Захист за допомогою файлу робочої групи mdw - Програмні продукти
Під час створення програми бази даних часто виникає необхідність розмежувати права користувачів для роботи з даними. Крім цього, обмеження доступу до бази виконує, по суті, ще й функцію захисту даних від несанкціонованого доступу. Адже не зареєстрованому користувачеві неможливо буде відкрити базу навіть для читання (принаймні теоретично). У цій статті я розповім про стандартний захист бази даних за допомогою файлу робочих груп - спеціального файлу з розширеннямmdw.
При установці захисту, перш за все потрібно поставити собі питання: що і від кого Ви збираєтесь захищати? Справа в тому, що спроби створити «непрошибаний» захист однозначно приречені на провал. До того ж, часто побоювання з приводу бажання когось «зламати» Вашу базу сильно перебільшені. Зазвичай при розробці проектів, що вимагають підвищеного рівня надійності та безпеки, застосовують не Access, а інші, більш придатні для такої справи сховища даних - наприклад SQL Server. Для решти випадків цілком підходить стандартний захист Access за допомогою файлу робочих груп.
Робочою групою в Access називається група користувачів, які працюють із базою.
У файл робочої групи записуються облікові записи користувачів та груп, що входять до робочої групи. Паролі користувачів також зберігаються у файлі робочої групи. Обліковим записам у робочій групі можуть бути призначені права доступу до бази даних та її об'єктів (таблиць, запитів, форм, звітів та макросів). Права доступу зберігаються у захищеній базі даних.
Коли користувач вперше запускає Microsoft Access після інсталяції Microsoft Office, Access автоматично створює файл робочої групи, який ідентифікується за вказаними користувачем імені таназвою організації. Відносне розташування файлу робочої групи записується в наступні параметри реєстру:
Можна також подивитися, де лежить стандартний файл робочої групи черезСервіс - Захист - Адміністратор робочих груп - Зв'язок - Огляд - тут бачимоSystem.mdw. Переконається ж у тому, що Access створює його при запуску (якщо його немає) можна дуже просто - видаліть його і закрийте Access. Знову відкрийте Access та створіть нову порожню базу. Тепер подивіться Сервіс – Захист – … System.mdw знову з'явився.
Тобто, по суті, стандартну систему захисту Access завжди включено. До активізації користувачем процедури підключення для робочої групи, Access при першому запуску або при створенні нової бази перевіряє наявність файлу робочої групи, і якщо його немає, то створює його та автоматично підключає до нього всіх користувачів за допомогою вбудованого облікового запису користувача Admin з порожнім паролем. Вікно для введення логіну та паролю при цьому не виводиться, а тому складається враження, що база нічим «не захищена». Це вірно в тому сенсі, що двері не зачинені, а лише прикриті - будь-хто може її відчинити.
Можна самому створити власний mdw. Для цього тиснемоСервіс - Захист - Адміністратор робочих груп - Створити. Відкриється діалогове вікноІнформація про власника робочої групи. У поляІм'я таОрганізація введіть назву робочої групи і, якщо хочете, організації. У поліКод групи введіть унікальний ідентифікатор групи, що складається з літер та цифр. Цей ідентифікатор може містити до 20 символів. Як ідентифікатор захисту рекомендується використовувати набір символів, який складніше вгадати, щоб забезпечити тим більший рівень захищеності робочої групи.
Натисніть кнопкуОК. З'явиться діалогове вікно,що дозволяє задати ім'я нового файлу робочої групи. Введіть повне ім'я файлу з розширенням mdw, або натиснітьОгляд, щоб вибрати папку, в якій буде збережено новий файл, та вкажіть ім'я файлу. Якщо Ви не вкажіть ім'я файлу, то Access сам його придумає - це буде звичайно System1.mdw . Натисніть кнопкуОК. З'явиться діалогове вікно, яке дозволяє перевірити введену інформацію. НатиснітьОК. Створений mdw автоматично приєднується до Access, тобто тепер усі бази на даній машині запускатимуться через нього.
"C:\Program Files\Microsoft Office\Office10\MSACCESS.EXE" "Повний шлях до захищеної бази"/WRKGRP "Повний шлях до файлу робочої групи - mdw"
Тут відбувається послідовне виконання команд: спочатку запускається СУБД Access - MSACCESS.EXE (для Office 2003 потрібно Office10 замінити на Office11), потім запускається база із зазначенням шляху до відповідного файлу користувача робочої групи. Якщо перша та остання команди пропущені, то до бази підключається mdw, що використовується за умовчанням.
Перш ніж приступати до захисту бази за допомогою файлу робочої групи, слід визначитися: захищатимемо обидві частини програми (файл з даними та файл об'єктів) або лише файл із даними? Захищати інтерфейсну сенс, якщо Ви хочете обмежити доступ користувачів до макросів і запитів (заборонити їх редагування). Про форми та звіти не йдеться, адже само собою зрозуміло, що база буде пред'явлена користувачеві у форматі mde. Якщо ж це не є проблемою, наприклад, всі запити прописані у властивостях форм і звітів - достатньо буде встановити захист тільки на серверну частину. В цьому випадку базу простіше адмініструватиме.
Для встановлення захисту використовують спеціальний майстер. Відкриваємо файл даних -Сервер.mdb. Потім Сервіс – Захист – Майстер. Відкриється діалогове вікно, де насамперед пропонується вибрати: створити або змінити поточний файл робочої групи. Нам потрібно "Створити". Тиснемо далі. У вікні, що відкрилося, в полі «Ім'я файлу» автоматично прописується шлях до файлу робочих груп - за замовчуванням, в тому ж каталозі, що і Сервер.mdb. Звернімо увагу на поле «Код робочої групи». Це унікальний ідентифікатор групи із випадково набраної буквено-цифрової комбінації.
Його обов'язково потрібно зберегти!
Справа в тому, що при втраті або псуванні файлу робочих груп доступ до бази стане не можливим (щодо хакерських методів промовчу). Наприкінці всі процедури майстер запропонує Вам створити звіт про виконану роботу - там, серед іншого, і буде цей код. Також залишимо галочку "створити ярлик для захищеної бази". У попередній частині статті йшлося про цей ярлик. Йшлося про те, щоб запускати базу через нього, а не підключати створений mdw до всіх проектів Access. Раз майстер узявся за справу, нехай він і робить ярлик. Тиснемо далі.
На наступній вкладці пропонується виділити об'єкти, які потрібно захищати. Найчастіше, якщо вже ставити захист, то на все, що власне і робиться за умовчанням. Тому просто тиснемо далі.
Тепер майстер пропонує створити робочі групи, причому права доступу за ними вже заздалегідь розподілені. Можете вибрати якісь із них, а можете проїхати далі. Особисто я завжди сам створюю собі групи, але як кажуть справа смаку. Тиснемо далі.
На цій вкладці пропонується Users призначити обмежені права. Сенс тут у тому, що як говорилося в першій частині статті, всі бази Access насправді вже підключені до стандартного файлу робочих груп, просто права у всіх користувачів (група Users) повні,як у адміністратора. А при «налаштуванні захисту» створюється новий файл групи або змінюється стандартний. Взагалі, у будь-якому файлі груп завжди будуть присутні як мінімум дві групи: Admins та Users. Це і зрозуміло: у будь-якій системі захисту «вхідний» у найпростішому випадку має бути пізнаний як простий користувач або адміністратор. Видалити ці два поняття ніяк не можна, інакше втрачає сенс захист – як дізнатися, хто прийшов? Хоча розробники-початківці іноді намагаються видалити «користувачів», а ті не видаляються…
Зауважимо, майстер попереджає, щоб не віддавали «користувачам» права без особливої потреби, адже якщо така група є у ВСІХ групах, то призначаючи їй права, ви автоматично призначаєте ці права за умовчанням для всіх файлів mdw. Простіше кажучи, якщо дати групі Users повні права, то для обходу захисту достатньо створити новий файл mdw і зайти під ім'ям користувача групи Users. Тому найчастіше цю вкладку також проїжджаємо.
Тепер дісталися створення своїх адмінів і користувачів. За замовчуванням там уже є адмін – можете замінити його на свого, якщо йому не довіряєте. Для цього вибираємо у списку зліва «Додати користувача», задаємо йому ім'я (наприклад Пупкін), пароль і тиснемо «Додати користувача до списку». Тепер можна прогнати старого адміна - виділяємо його і тиснемо "Видалити користувача зі списку". Тепер наш Пупкін автоматично став адміном (бо інших все одно немає). Щоб переконатися в цьому, переходимо на наступну вкладку і бачимо, що в Admins (адміністратори) присутня наша людина. Тиснемо далі.
Тепер залишилося лише зазначити, куди зберегти резервну копію незахищеної бази. Це на випадок, якщо раптом ви передумаєте і вирішите повернути все як було. Access створює копію бази, тільки змінює розширення на .bak. Мабуть для того, щоб ніхтоне здогадався, що то не захищена база. Тиснемо готово.
База шифрується і з'являється звіт про виконану роботу. Ще раз нагадаю – його обов'язково треба зберегти. Якщо раптом файл груп mdw кудись подінеться чи зламається, щоб отримати доступ до бази потрібно буде створити його заново, вказавши при створенні його старий код робочої групи - стерти той, що пропонує майстер, і поставити свій. В результаті всього вийшло таке:
- З'явився новий файл робочих груп - Security.mdw (в Access 2002 він за промовчанням називається Secured.mdw)
- Усі об'єкти бази Сервер.mdb (таблиці) «пройшлися» через файл робочих груп
- З'явилася копія бази - Сервер.bak
- На робочому столі з'явився ярлик підключення до бази - Сервер.lnk
Отже, база захист, але з усіх користувачів там лише адмін Пупкін. Значить створюватимемо користувачів та групи. Запускаємо через ярлик базу та тиснемо Сервіс - Захист - Користувачі та групи. На першій вкладці створюємо користувачів, на другій – групи користувачів. З цим думаю проблем не буде: тиснемо «Створити» і далі на діалог. Зауважу лише, що імена краще давати як цифри. Справа в тому, що, як відомо, зустрічаються однофамільці, а от однакових цифр не існує.
Якщо користувачів досить багато, то є сенс створити групи, щоб об'єднати їх. У кожній групі може бути кілька користувачів. Права доступу групи автоматично призначаються членам групи. Тим самим спрощується адміністрування бази даних. Переходимо на другу вкладку та створюємо необхідні нам групи. Потім повертаємось на першу. Тут бачимо, що у списку груп крім стандартних admins і users з'явилися нові. Щоб зарахувати до них наших користувачів, виберемо зі списку користувача, виділимо групу і тиснемо додати. Звернемоувагу, що наш адмін Пупкін має обов'язково бути присутнім у групі адміністраторів (admins). Інакше він не буде адміном. Відповідно, решти це не стосується.
Після створення користувачів та розподілу їх по групах залишилося задати їм пароль входу – це робиться на останній вкладці.
Пароль користувача може змінити лише сам користувач, тобто той, хто зайде до програми під його ім'ям!
Тепер настав час задуматися про права доступу. Для цього слід ретельно продумати, хто з користувачів, до чого повинен мати доступ. Тут є кілька рішень. На жаль, в Access неможливо встановлювати доступ на поля таблиць, а можна тільки до всієї таблиці. Тому для випадку, коли до даних однієї таблиці різні користувачі повинні мати різний доступ, доведеться хитрувати. Наприклад:
- «розпиляти» таблицю на частини та зв'язати їх співвідношенням один до одного. Це саме той випадок, коли такий дивний зв'язок має сенс.
- Зробити різні форми для різних користувачів і запускати їх для кожного свою. Щоб дізнатися, хто є хто, можна скористатися простою процедурою:
IF CurrentUser = "1" Then …
Але такий варіант не дає доступу до даних через форми, але ніщо не заважає користувачеві «залізти» безпосередньо до Сервера.mdb.
Змінювати рівень доступу може лише адміністратор (admin) – член групи admins!
Тобто для зміни рівня доступу для користувачів необхідно зайти до серверної частини програми під ім'ям адміністратора (у нашому випадку «Пупкін»). Потім вибрати: Сервіс - Захист - Дозвіл. Можна встановлювати доступ для групи, а для кожного користувача окремо. У випадку з групами під час створення нового користувача, щоб призначити йому права доступу,достатньо помістити його у відповідну групу. Тому ми ставитимемо доступи для груп.
Для цього на вкладці «Дозволи» потрібно перейти на «групи» та у списку «Користувач та групи» вибрати необхідну групу. У полі зі списком Тип об'єкта вибрати необхідний тип об'єкта бази даних. У списку "Ім'я об'єкта" вибрати об'єкт і у списку "Дозволи" проставити рівень доступу до об'єкта.
Не експериментуйте з правами доступу адміністратор - інакше Ви, як адміністратор, може закрити базу від самого себе!
Як уже говорилося, вся інформація про захист бази зберігатиметься у зашифрованому вигляді у файлі робочих груп - Security.mdw. Перед будь-якими діями щодо зміни рівня доступу або зміни паролів рекомендується зробити резервну копію цього файлу та зберігати його у надійному місці на зовнішньому носії. Тим самим буде можливість повернути зміни, підключивши до бази збережену копіюSecurity.mdw.
При втраті або псуванні файлу робочих груп Security.mdw доступ до бази даних стане неможливим!
Крім обмеження доступу до даних, можна використовувати такий захист для ведення лог. журналу дій користувачів, що дозволяє простежити дату і час створення запису, а також ким і коли вона була змінена. Для цього в кожній таблиці потрібно створити поля, які автоматично записуються відповідні дані:
- Дата створення - дата та час створення запису.
- Дата зміни - дата та час зміни запису.
- Змінив - ім'я користувача, який змінив запис.
Запис робиться за допомогою перехоплення події форми «Внесені зміни»
Private Sub Form_Dirty(Cancel As Integer) [ДатаЗміни] = Date + Time [Змінив] = CurrentUser End Sub