Налаштування привілеїв mysql

Розглянемо на прикладі, як створити облікові записи і привілеї для уявної організації widgets.example.com. Припустимо, що ви увійшли в тільки що встановлений екземпляр MySQL і видалили всі облікові записи, присутні за замовчуванням, командою DROP USER. Не забудьте перевірити таблицю mysql.user, щоб переконатися, що в ній дійсно нічого не залишилося.

MySQL не включає ролі і групи, з якими ви, можливо, знайомі з інших СУБД. MySQL підтримує тільки тих, хто.

Вся робота будується на застосуванні комбінацій трьох основних команд:

GRANT [privileges] ON [objects] TO [user]:

GRANT [privileges] ON [objects] TO [user] IDENTIFIED BY [password]:

REVOKE [privileges] ON [objects] FROM [user];

Нижче наведено огляд різних видів облікових записів, які вам можуть знадобитися, а також відповідних їм привілеїв.

mysql> GRANT ALL PRIVILEGES ON *. * TO 'root' @ 'localhost'

-> IDENTIFIED BY 'p4ssword' WITH GRANT OPTION;

Облікові записи адміністраторів бази даних (АБД)

Якщо до сервера MySQL повинні мати доступ декілька АБД, то іноді має сенс створити для кожного свій обліковий запис, а не загальну для всіх. При цьому спрощується облік і контроль:

mysql> GRANT ALL PRIVILEGES ON *. * TO 'john' @ 'localhost'

-> IDENTIFIED BY 'p4ssword' WITH GRANT OPTION;

mysql> GRANT INSERT, UPDATE PRIVILEGES ON widgets.orders -> TO 'tera'@'Z.widgets.example.com'

-> IDENTIFIED BY 'p4ssword';

Імітація груп В MySQL немає груп і ролей, як у багатьох інших СУБД. Іноді має сенс створити обліковий запис з ім'ям ролі додатка або ролі співробітника, наприклад analyst або custserv, але в даному прикладі ми цього робити не будемо.

Доступ тільки для протоколювання Досить часто MySQL застосовується для протоколювання різного роду даних. Неважливо, чи йде мова про реєстрацію всіх запитів до Apache або про облік дзвінків в двері, протоколювання - це додаток, з яким, швидше за все, необхідний тільки доступ для запису в одну базу даних або таблицю. Щоб створити обліковий запис протоколювання, підійде така команда:

mysql> GRANT INSERT ON logs. * TO 'logger'@'Z.widgets.example.com'

-> IDENTIFIED BY 'p4ssword';

Вона додає один рядок в таблицю user, але, оскільки ми не задали глобальних привілеїв (*. *), То всі пов'язані з привілеям стовпці в ній містять N. Єдине призначення цього рядка -Дати можливість користувачу підключитися з будь-якого комп'ютера і ввести пароль. Оскільки ми вказали привілей, пов'язану з конкретною базою даних, то все цікаве потрапило в таблицю db, в якій всі стовпці, окрім Insert_priv, будуть містити N, а останній - Y.

mysql> GRANT SELECT, LOCK TABLES, FILE ON *. * TO 'backup' @ 'localhost'

-> IDENTIFIED BY 'p4ssword';

Щоб забезпечити узгодженість результатів декількох операцій резервного копіювання, потрібно виконати команду FLUSH TABLES WITH

READ LOCK, для якої необхідна також привілей RELOAD. Вона дозволяє ще кілька операцій, зокрема FLUSH LOGS.

mysql> GRANT PROCESS, SHUTDOWN on *. *

-> TO 'noc'@'monitorserver.noc.widgets.example.com'

-> IDENTIFIED BY 'p4ssword';

Може також знадобитися привілей SUPER, яка дозволить виконувати команду SHOW INNODB STATUS.

Схожі статті