Про захист даних у файлах MDB СУРДБ Access, AccessПрограмування - Програмування C,

Маленький відступ. Що таке СУРБД? Це розшифровується як Система управління Реляційними базами даних. А що таке – реляційні? Для простоти можна сказати, що це бази, що базуються на таблицях. А що бувають інші? Так, бувають. Основи знань, ієрархічні бази, об'єктно-орієнтовані бази даних. Існують файлові бази, побудовані на індексно-послідовному методі доступу до даних (Indexed Sequential Access Method – ISAM). У таких системах кожна таблиця зберігається в окремому файлі, а назва ISAM походить від фізичного способу зберігання та доступу до даних. Прикладами баз даних ISAM можуть бути dBase, FoxPro, Paradox, Excel. Одні теоретики відносять ISAM до реляційних баз даних, інші вважають, що повноцінна СУРДБ має лише зберігати і отримувати інформацію, а й забезпечувати її цілісність. Access, у сенсі, перебуває десь посередині. Вона може виконувати деякі контрольні функції, але SQL серверів їй далеко. Є й інші різновиди баз даних, але це вже окрема розмова. І так, продовжимо. Більш-менш розвинений розробник ділить свою MDB базу на дві, котрий іноді більше частин. Поділ на інтерфейсну та табличну частину треба проводити, коли програма готова до передачі в експлуатацію, а іноді й раніше (якщо Ви не пишете програму лише для себе). Це полегшує супровід програми, яка є у клієнтів. І це, практично, обов'язкова вимога при побудові файл-серверних розрахованих на багато користувачів систем. Про захист клієнтської частини тут уже порушувалося питання. Я хочу розглянути проблему захисту даних, що у таблицях. Розглянемо файл-серверний варіант розміщення бази.

Перш, ніж почнемо розмову про захист, Ви повинні ясно уявити,чого ви бажаєте захистити свої дані. Захисту бувають різних рівнів та складнощів. І можливо виконання вимоги «максимально захистити всі дані» перевищить за трудомісткістю розробку та налагодження самої бази. І пам'ятайте, що одна людина зробила, інша завжди зламати може. І ніякий захист не врятує від звичайного розгильдяйства. Я зустрічав випадки, коли логін та пароль доступу писали на папірці, а потім цей папірець клеїли на монітор, «щоб не втратити». І це не анекдот. Справа в тому, що рядовому співробітнику фірми/відділу найчастіше немає жодної справи до захисту інформації. Його завдання – відпрацювати належний годинник, причому з найбільшим комфортом для себе. Звідси і виходить: роздаєш паролі доступу КОЖНОМУ співробітнику, а вони їх пишуть на папірці (загальним списком) та кладуть під скло. Таке «неподобство» зазвичай закінчується тим, що хтось чогось не туди ввів/видалив. Починаються розбірки - і тут до оператора доходить, що якби він не розголошував свій пароль, то, отже, ніхто не зміг би влізти в базу і "колупатися" там від його імені. Звідси висновок – захист бази, справа КЕРІВНИКА, а не операторів. Розглянемо тепер методи захисту.

Адміністративний метод.

Якщо інформація записана - значить, її можна прочитати, якщо її можна прочитати - можна і скопіювати, якщо можна скопіювати - можна і вкрасти.

Маскування.

ПОПЕРЕДЖЕННЯ. Ніколи не привласнюйте базу розширення, зарезервовані для тимчасових файлів. Інакше програма очищення вінчестера може видалити його. Не надавайте розширення мультимедіа файлів. Інакше користувачі з цікавості постійно намагатимуться його запустити, щоб глянути, що там адмін ховає на сервері?

Є ще одна можливість заморочити користувача. Справа в тому, що в Access є три варіанти відображенняоб'єктів:

  • Нормальний режим (у вікні бази даних не відображаються приховані та системні об'єкти) встановлено за замовчуванням
  • Режим відображення прихованих об'єктів (у вікні бази динних не відображаються системні об'єкти)
  • Режим відображення системних об'єктів (відображаються всі об'єкти)

Системний об'єкт – це вбудований об'єкт бази даних, визначений як системний, наприклад таблиця "MSysIndexes", або системні об'єкти, визначені користувачем. Для визначення системного об'єкта необхідно, щоб його ім'я починалося з символів USys. Наприклад, додайте до назви форми, таблиці, звіту USys – і вони відразу «зникнуть», стануть системними, але звертатися до них із програми можна так само, як завжди. Щоб зробити об'єкт прихованим, потрібно виділити його, потім правою кнопкою - і в контекстному меню вибрати Властивості і задати параметр Прихований. Щоб побачити такі об'єкти, потрібно зробити таке:

Сервіс - Параметри - Вкладка вигляд.

У групі Відображати виберіть необхідний варіант – поставте (приберіть) галочку «Приховані об'єкти», «Системні об'єкти» і т. д. Багато користувачів такий «захист» здатний спантеличити: навіть зумівши відкрити програму через Shift, вони з здивуванням виявлять, що якоїсь форми чи таблиці там немає, хоча під час роботи вона видно. Але на професіоналів, звичайно, такий прийом не подіє - зрозуміло, вони знають про властивості об'єктів бази даних. Але, якщо врахувати, що більшість цікавих найчастіше кидають спроби «колупатися», якщо у них не вийшло з першого разу, то такий «захист» заслуговує на увагу.

Захист лише на рівні доменних політик.

Захист за допомогою макросу AutoExec та блокування Shift.

Для побудови інтерфейсу захисту створимо два макроси: AutoExec, AutoKeys.AutoExec потрібен для перехоплення події "відкриття програми", AutoKeys виконує схожу роль - перехоплює натискання клавіш на клавіатурі. Щоб він їх перехоплював, має називатися AutoKeys (зарезервоване ім'я в Access). З цієї причини AutoExec має називатися AutoExec. Ще один важливий момент - в меню Сервіс - Параметри запуску приберемо всі галочки, інакше обійти захист від Shift стане просто: Вікно - Відобразити - Вікно БД. Якщо ж вимкнути все меню, то в пункті меню "Вікно" будуть виводитись лише режими розташування вікон, а вікно бази не виводиться. У макросі AutoExec дамо команду на запуск форми FrmStart, у макросі AutoKeys - форми ВклОткШифт. Причому форма ВклОткШифт запускатиметься при натисканні комбінації клавіш Ctrl + Q. Для цього в конструкторі задаємо ім'я макросу - ^Q. Навіщо так дивно? Справа в тому, що якщо ми просто поставимо запуск форми в Сервіс - Параметри запуску, то при включенні захисту від Shift відкриватиметься порожнє вікно Access. Ми закриємо базу взагалі для всіх, у тому числі від себе! Для будь-якого замку повинен бути ключ: ним і виступає форма ВклОткШифт - через неї встановлюється та знімається захист. А якщо її зробити прихованою (див. нижче) і запускати через макрос (комбінацію кнопок) - ми ще більше заплутаємо цікавих користувачів. Саме включення відбувається через властивість бази

DBS.Properties("AllowBypassKey") = True (або False)

Залежно від значення пароля, введеного в полі форми «ВклОткШифт», цій властивості присвоюється True або False. Потім база закривається (щоб зміни набули чинності)

Приклад, як це все працює, Ви можете подивитися тут http://www.accessoft.ru/Text/Text201.html

Захист бази з таблицями трохи відрізняється від захисту бази з виконуваним кодом. Найчастіше стартова формаявляє собою форму із застережливим написом типу «Таблиці з даними, Прямий доступ заборонено!» та встановленим таймером. Якщо після відкриття стартової форми протягом певного часу не натиснута комбінація клавіш, що викликають форму відключення Shift, то програма закривається. І тут фантазії розробників можуть розвернутися! Я зустрічав програму, де при спробі відкрити базу з таблицями, на весь екран розгортався чорний піратський прапор із черепом, пов'язаний червоною хусткою та пов'язкою на очниці, схрещеними шаблями та кривавим написом – «Тут на Вас не чекають!». Можна через деякий час перед закриттям бази пустити на динамік міліцейську сирену або зловісний регіт. Серед розробників БД є люди з гумором! Деякі «особливо злісні» програмісти вбудовують ще команди перезавантаження та вимкнення комп'ютера. А з урахуванням того, що клавіш багато, а висновок форми відключення захисту від Shift можна повісити і на складнішу комбінацію з кількох клавіш, то «експериментатору дуже скоро набридне заново включати комп'ютер Зазвичай захист від Shift застосовують у комплексі з іншими методами: прив'язка до комп'ютера, вхід по паролю, шифрування даних і т. д. А тепер додамо велику ложку дьогтю. Цей захист працює тільки для тих, хто вивчав Access за книгами типу «Access за 24 години», «Access для чайників» тощо. Вона спрацьовує лише в тому випадку, якщо ви намагаєтеся відкрити базу MDB за допомогою програми Access. Проти звичайного підключення до неї інших програм вона працює. Для цього можна використовувати ту саму Access. Достатньо створити чисту базу та зв'язати її із захищеною. Або імпортувати до неї весь вміст захищеної бази. Так у Вас виявиться точна копія захищеної бази зі знятим захистом. Крім того, в Інтернеті можна знайти програми, які занововключають Shift. А потім завантажуйся з натиснутим Shift і роби все, що завгодно. Так, що переходимо до наступного захисту – паролем.

Захист із використанням пароля БД.

Цей спосіб захисту дозволяє встановити пароль для відкриття БД, всім користувачів. Для його створення необхідно відкрити файл БД у "монопольному" режимі та вибрати пункт менюСервіс/Захист/Встановити пароль бази даних. Для роботи з такою базою даних у MS Access потрібно буде вводити пароль. Ось приклад роботи з файлом БД, використовуючи DAO чи ADO.

Public Sub TestDAO() Dim mWS As DAO.Workspace Dim mDB As DAO.Database Set mWS = DBEngine.Workspaces(0) Set mDB = mWS.OpenDatabase _ (" C:a97.mdb", True, True, ";pwd=123") End Sub

Public Sub TestADO() Dim CnDB як New ADODB.Connection CnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0" & _ ";Data Source=C:a97.mdb" & _ ";Jet OLEDB:Database Password=123" End Sub

Це теж не найнадійніший спосіб захисту баз даних. Існує достатня кількість безкоштовних та платних утиліт, що відображають пароль. У тому числі доступні вихідні коди на VB що дозволяють прочитати такий пароль. В іншому не все так погано. Справа в тому, що деякі розробники вважають, що крім англійської мови інших мов не існує. Достатньо включити в пароль українські літери, щоб привести до ступору користувача, який використовує такі програми. Так, вони начебто і розкривають пароль, але те, що вони видають як пароль, розібрати неможливо. Продовжимо ігри з паролем бази даних. Наприклад, у паролі можна використовувати недруковані символи. Насамперед цей спосіб націлений на протидію визначенню паролів за допомогою спеціальних програм. Стандартний спосіб встановлення та використання пароляБД має на увазі його введення з клавіатури в діалоговому вікні. Якщо стоку пароля містить недруковані символи, вони не будуть коректно відображені програмою відкриває паролі БД. З іншого боку, цей пароль не можна ввести в діалоговому вікні при відкритті БД в MS Access. Якби пароль містив символи табуляції, Esc або Enter, то стандартним чином Ви не змогли б їх ввести у віконце введення пароля. Спосіб заснований на тому, що пароль БД формату Access 2000 та 2002-2003 – текстовий рядок у форматі Unicode (в Access 97 – ANSI). При цьому немає жодних обмежень на її вміст. У специфікації баз даних та у довідці за DAO 3.60 зазначено, що максимальна кількість символів у паролі - 14. Але насправді їх може бути 20. При цьому й сам Access 97 не допускає введення рядків пароля понад 14 символів. У специфікації Access 2003 також сказано про 14 символів, але програма допускає введення всіх 20. Також можливе використання недрукованих символів, що наводить більшість програм, що зламують паролі в ступор. Для встановлення такого пароля потрібно застосувати спеціальну програму, яка використовує метод CompactDatabase бібліотек ADOX або DAO. Але, як кажуть, проти всього можна знайти брухт. І такий захист розкривається.

По-перше, можна скористатися програмоюAccessRecovery, яка створює новий файл без захисту та переносить до нього таблиці, запити, форми, макроси, звіти та код модулів.

  • По-друге, можна спробувати визначити пароль БД за допомогою спеціальних програм.
  • По-третє, можна дізнатися пароль, проаналізувавши код програми у налагоджувачі. Яким би не був пароль, він все одно передається як текстовий рядок у методі відкриття БД. За наявності певного досвіду це не дуже складне завдання.
  • Дізнатися чи змінити пароль БД можна, не вдаючисьдо допомоги спеціальних програм. У Access 97 пароль виходить додаванням по XOR пароля з 20 байтною послідовністю. Значення цих байт можна отримати з будь-якого файлу, що не захищений паролем mdb. Починаючи з Access 2k, у зв'язку з використанням Unicode для зберігання 20 символів пароля відведено 40 байт. При шифруванні також використовується додавання XOR, але для отримання послідовності байт відповідної порожньому паролю необхідно створити файл з датою досліджуваної БД. Отримані байти можна вписати в досліджуваний файл та обнулити пароль, або скласти їх з аналогічними байтами досліджуваного файлу та отримати значення пароля.
  • Але все це вже потребує певних знань і досвіду, так що є шанси на те, що цікавому користувачеві набридне експериментувати.

    Захист за допомогою термінального доступу до сервера.

    Практично непрошибний захист. І клієнтська частина та база з таблицями знаходиться на сервері. У клієнта на комп'ютері емулюється термінал сервера. Немов ти за ним сидиш (себто за сервером). Можна налаштувати термінальний доступ так, що при запуску необхідної задачі (по ярлику), запиту відповідних паролів доступу до системи, вантажиться потрібна база. При закритті бази термінал закривається. У самій базі прописано захист від шифту, відключено всі стандартні Access-івські меню та гарячі клавіші, відключено вікно бази. І нічого користувач ні затерти, ні копіювати не може. Ні відкрити безпосередньо таблиці, ні отримати доступ до закритих для нього форм та звітів. Ще термінальний доступ називається, на мою думку, віддаленим робочим столом. Недоліки цього – вся обробка даних лягає на сервер, зате як клієнтів можна використовувати слабкі машини.