|
|
Адміністратор може надавати користувачам привілеї різних рівнів (вони приведені в табл. 11.1 і детально описані в розділі 12, "Безпека"). В цьому розділі привілеї описуються як з погляду їх призначення, так і з погляду відношення до таблиць дозволу.
Типи привілеїв MySQL
Специфікація привілею
|
Операція, дозволена даним привілеєм |
CREATE TEMPORARY TABLES EXECUTE
| Створити тимчасові таблиціВиконувати зберігаючі процедури (зарезервовано для використання в майбутньому)
| FILE
| Читати і записувати файли на серверному вузлі
| GRANT OPTION
| Виділити привілеї даного облікового запису іншим обліковим записам
| LOCK TABLES
| Заблокувати таблиці за допомогою оператора LOCK TABLES
| PROCESS
| Проглянути інформацію про процеси, виконані сервером
| RELOAD
| Перезавантажити таблиці дозволу або відновити протоколи або кеші
| REPLICATION CLIENT
| Запит розміщення головного і підлеглого серверів
| REPLICATION SLAVE
| Діяти як підлеглий сервер реплікації
| SHOW DATABASES
| Задати оператори SHOW DATABASES
| SHUTDOWN
| Відключити сервер
| SUPER
| Завершити процеси і провести інші адміністративні дії
| ALTER
| Змінити таблиці і індекси
| CREATE
| Створити бази даних і таблиці
| DELETE
| Видалити існуючі рядки з таблиць
| DROP
| Видалити бази даних і таблиці
| INDEX
| Видалити індекси
| INSERT
| Додати нові рядки в таблиці
| REFERENCES
| Не використовується (зарезервовано для використання в майбутньому)
| SELECT
| Вибрати існуючі рядки в таблицях
| UPDATE
| Відновити існуючі рядки в таблицях
| ALL
| Всі дії (за винятком GRANT); синонімом є ALL PRIVILEGES
| USAGE
| Спеціальний привілей "немає привілеїв"
|
Специфікатори привілеїв з першої групи, представленої в цій таблиці, є привілеями адміністратора. Звичайно привілеї цієї групи присвоюються дуже обережно, оскільки власники таких привілеїв мають нагоду істотно впливати на роботу серверу. (Наприклад, привілей SHUTDOWN для щоденного використання не потрібна.) Привілеї з другої групи застосовні до баз даних, таблиць і стовпців і дозволяють за допомогою серверу управляти доступом до даних. Специфікатори з третьої групи є спеціальними. ALL означає "всі привілеї" (за винятком того, що він не включає привілей GRANT OPTION). USAGE позначає "відсутність привілеїв", тобто "створити обліковий запис, але не присвоювати їм ніяких привілеїв". USAGE також можна використовувати при внесенні змін в аспекти облікового запису, які не пов'язані з привілеями, не змінюючи поточні установки привілеїв.
Деякі привілеї з'явилися в MySQL 4.0.2, тому їх не можна присвоювати в більш ранніх версіях. Це такі привілеї, як CREATE TEMPORARY TABLES, EXECUTE, LOCK TABLES,REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES і SUPER. Введення цих привілеїв вносить зміну в управління деякими операціями. Наприклад, можливість зупинити будь-який процес на сервері до версії MySQL 4.0.2 надавалася привілеєм PROCESS, а в подальших версіях - за допомогою привілею SUPER. Зазвичай це не складає великої проблеми, оскільки таблиці дозволу обновляються при оновленні серверу з версій від 4.0.2 і до 4.0.2 або вище; дистрибутив MySQL вміщає в себе сценарій mysql_fix_privilege_tables, який створює стовпці для зберігання значень нових привілеїв, а привілей SUPER для облікових записів ініціалізується з використанням привілею PROCESS. Таким чином, користувачі, які мали право на знищення процесів до версії 4.0.2, зможуть робити це і в подальших версіях. (Правила перенесення привілеїв при оновленні до версії 4.0.2 або вище описані в розділі 12, "Безпека".)
Слід пям'ятати, що не можна привласнювати привілеї CREATE TEMPORARY TABLES або LOCK TABLES для певних баз даних в MySQL 4.0.2 і 4.0.3, тому ці версії по можливості краще не застосовувати. Ця проблема була вирішена в MySQL версії 4.0.4.
Всі привілеї можна привласнювати на різних рівнях починаючи з глобальним рівнем і закінчуючи рівнем стовпців. Для управління привілеями призначається специфікатор пропозиції ON, що видно з наступної таблиці.
Специфікація привілею
|
До якого рівня має відношення |
ON *.*
| Глобальні привілеї; всі бази даних, всі таблиці
| ON *
| Глобальні привілеї, якщо не була вибрана стандартна база даних, в іншому випадку - привілеї на рівні бази даних для поточної бази даних
| ON db_name.*
| Привілеї рівня бази даних; всі таблиці в заданій базі даних
| ON db_name.tbl_name
| Привілеї рівня таблиці; всі стовпці вказаної таблиці
| ON tbl_name
| Привілеї рівня таблиці; всі стовпці вказаної таблиці стандартної бази даних
|
Найбільш потужними є глобальні привілеї, застосовані до всіх баз даних. Так, наприклад, щоб надати користувачу ethel права суперкористувача, який має право робити все, у тому числі і надавати привілеї іншим користувачам, необхідно запустити наступний оператор:
GRANT ALL ON *.* ТО 'ethel'@'localhost' IDENTIFIED BY 'coffee' WITH GRANT OPTION
Специфікатор * . * в пропозиції ON можна умовно замінити фразою "всі бази даних і всі таблиці". Для підвищення безпеки користувачу ethel дозволено підключатися тільки з одного локального комп'ютера. Обмеження комп'ютерів, з яких може підключатися до серверу користувач, що володіє широкими правами, - доволі мудре рішення. В цьому випадку обмежується і число комп'ютерів, з яких можуть бути зроблені спроби злому пароля.
Деякі привілеї є адміністративними і можуть привласнюватися з використанням тільки специфікатора глобальних привілеїв ON *.*. Це такі привілеї, як FILE, PROCESS, RELOAD, SHUTDOWN і інші, приведені в табл. 11.1. Наприклад, привілей RELOAD дозволяє використовувати оператор FLUSH, таким чином, наступний оператор створює користувача flush, який має право тільки на роботу з операторами FLUSH:
GRANT RELOAD ON *.* TO 'flush1'@'localhost' IDENTIFIED BY 'flushpass';
Цей тип облікового запису MySQL може знадобитися для створення адміністративних сценаріїв, які можуть бути потрібні для виконання таких операцій, як, скажімо, оновлення протоколів при заміні файлу протоколу. (Докладніше про це див. в розділі "Оновлення файлів реєстрації".)
Привілеї рівня баз даних відносяться до всіх таблиць у вказаній базі даних. Такі привілеї присвоюються пропозицією ON db_name.*:
GRANT ALL ON sampdb.* TO 'bill'@'racer.snake.net' IDENTIFIED BY 'rock';
GRANT SELECT ON menagerie.* TO 'reader'@'%' IDENTIFIED 'dirt';
Перший з вказаних операторів надає користувачу bill всі права для роботи зі всіма таблицями бази даних sampdb. Другий оператор створює користувача reader з обмеженими правами (тільки читання), який може мати доступ до будь-якої таблиці бази даних menagerie, проте тільки для читання. Іншими словами, цей користувач має можливість запускати тільки оператор SELECT.
При завданні оператора GRANT можна задавати відразу декілька привілеїв одночасно. Так, наприклад, якщо необхідно надати користувачу можливість прочитувати і вносити зміни у вміст існуючих таблиць, але заборонити створювати нові таблиці або видаляти вже існуючі, це можна зробити таким чином:
GRANT SELECT, INSERT, DELETE, UPDATE ON sampdb.* TO 'Jennie'@'%' IDENTIFIED BY 'boron';
Для ще більш детального управління доступом можна надавати привілеї окремим таблицям або навіть окремим їх стовпцям. Привілеї по стовпцях виявляються дуже корисними, якщо певну частину таблиці необхідно приховати від користувача або надати можливість зміни тільки заданих стовпців. Припустимо, наприклад, що в офіс "Історичної Ліги" на посаду секретаря наймається співробітник. Адміністратор вирішує надати новому співробітнику тільки права на читання таблиці member, що містить інформацію про діючих членів суспільства, і привілеї UPDATE стовпцю expiration (термін закінчення членства) цієї таблиці. При такому доступі новий секретар цілком зможе змінювати дати закінчення членства організацій-учасників, якщо вони продовжують своє членство. Для створення такого користувача MySQL можна використовувати наступні оператори:
GRANT SELECT ON sampdb.member TO 'assistant'@'localhost' IDENTIFIED BY 'officehelp';
GRANT UPDATE (expiration) ON sampdb.member TO 'assistant'@'localhost';
Перший оператор надає права на читання таблиці member і визначає пароль. Другий оператор додає привілеї UPDATE, але тільки для стовпця expiration. Оскільки пароль встановлюється першим оператором, в другому його визначати повторно необов'язково.
Якщо необхідно присвоїти привілеї для роботи з декількома стовпцями, їх імена слід розділяти комами. Так, наприклад, щоб додати привілеї UPDATE для полів адрес таблиці member для користувача assistant, використовується приведений нижче оператор. При його виконанні нові привілеї будуть додані до вже існуючих привілеїв користувача:
GRANT UPDATE (street,city,state,zip) ON sampdb.member TO 'assistant'@'localhost';
Записи з таблиць дозволу при операціях перейменування зазвичай не "наслідуються". Наприклад, будь-який привілеї, прив'язаний безпосередньо до заданої таблиці, після її перейменування до даної таблиці відноситися більше не буде. І цей принцип справедливий як для рівня баз даних, так і для таблиць і стовпців.
|
|
Книга Фріланс на західному ринку
|
|