- •Администратор
- •Администрирование и система привилегий субд MySql
- •Способы создания нового пользователя и назначения или изменения привилегий
- •Item – бд или таблица (*.* - все бд, все таблицы) Если таблица – Dbname.Tablename
- •Ограничение ресурсов пользователя
- •Задание паролей
- •5.Ролевое управление доступом
Способы создания нового пользователя и назначения или изменения привилегий
Пользователей можно добавлять двумя различными способами - при помощи команды GRANT или напрямую в таблицы назначения привилегий MySQL (команда INSERT INTO имя_таблицы(список_столбцов) VALUES(список_значений) ). Предпочтительнее использовать команду GRANT - этот способ проще и дает меньше ошибок.
GRANT privileges [columns] ON item TO ‘user_name’@’host’ IDENTIFIED BY ‘user_password’
[WITH GRANT OPTION] [необязат. параметры]
PRIVILEGES – список наименований привилегий через запятую.
ALL PRIVILEGES – все, USAGE PRIVILEGES - никаких привилегий
сolumns – по каким столбцам
Item – бд или таблица (*.* - все бд, все таблицы) Если таблица – Dbname.Tablename
WITH GRANT OPTION – если указано, то пользователю дано право передавать свои привилегии другим пользователям
GRANT ALL PRIVILEGES ON *.* TO ‘user_name’@’host’ IDENTIFIED BY ‘user_password’;
GRANT USAGE PRIVILEGES ON *.* TO ‘user_name’@’host’ IDENTIFIED BY ‘user_password’;
Отнять все привилегии – REVOKE ALL PRIVILEGES ON item FROM 'user_name’@’host';
Служебное слово PRIVILEGES можно опустить при наборе команды.
Привилегии вступят в силу или при следующем соединении или в текущем сеансе только после обновления состояния системных таблиц, это делает команда FLUSH PRIVILEGES.
Просмотреть набор текущих привилегий пользователя
SHOW GRANTS FOR 'user_name'@'host';
Окончательно удалить пользователя следует командой типа
DELETE FROM TABLE where User=’user_name’ and Host=’host’;
удаляя соответствующие записи из всех системных таблиц: user, host, db, tables_priv, columns_priv. После этого следует выйти из монитора и перезагрузить системные таблицы командой
shell> mysqladmin reload –u user -p
Этот сервис доступен только пользователю с полномочиями RELOAD.
Изменять пароли других пользователей могут только пользователи с правом записи/обновления базы данных mysql.
UPDATE mysql.user SET Password=password(‘newpass’) WHERE User=’modify_user’ AND Host=’host’;
Все обычные пользователи могут модифицировать только свой собственный пароль при помощи команды set password
SET PASSWORD FOR user@’localhost’ = Password(‘newpass’);
Ограничение ресурсов пользователя
Начиная с MySQL версии 4.0.2 можно ограничивать определенные ресурсы, выделяемые пользователям.
До этой версии единственным возможным методом ограничения использования ресурсов сервера MySQL была установка переменной запуска max_user_connections в значение, отличное от нуля. Но этот метод действует только на глобальном уровне и не позволяет управлять отдельными пользователями.
На уровне отдельного пользователя теперь введено управление следующими тремя ресурсами:
-
Количество всех запросов в час: все команды, которые может запускать пользователь.
-
Количество всех обновлений в час: любая команда, которая изменяет таблицу или базу данных.
-
Количество соединений, сделанных за час: новые соединения, открытые за час.
Пользователь в упомянутом выше контексте представляет собой отдельную запись в таблице user, которая уникальным образом идентифицируется своими столбцами User и Host.
Данные ограничения могут быть наложены только при помощи глобальной команды GRANT (*.*) с использованием следующего синтаксиса:
GRANT ... WITH MAX_QUERIES_PER_HOUR N1
MAX_UPDATES_PER_HOUR N2
MAX_CONNECTIONS_PER_HOUR N3;
Можно указать любое сочетание приведенных выше ресурсов. N1, N2 и N3 являются целыми числами, представляющими собой значения количеств запросов/обновлений/соединений в час.
Если пользователь в течение часа достигает предела любого из вышеуказанных значений, его соединение будет прервано с выдачей соответствующего сообщения об ошибке.
Текущие значения для всех пользователей сбрасываются, если производится перезагрузка привилегий (на сервере или при использовании команды mysqladmin reload) или если выполняется команда FLUSH USER_RESOURCES.