Я должен предоставить прямой доступ к моей базе данных некоторым пользователям для целей аудита и должен добавить ограничение, чтобы избежать, чтобы эти новые пользователи не удаляли, не обновляли и не изменяли изменяя привилегии.Создание пользователя без удаления, обновления и изменения прав в MySQL
ответ
Просто создайте пользователя и дайте толькоSELECT
привилегия.
CREATE USER [email protected]_name identified by 'password';
GRANT SELECT ON db_name.* TO [email protected]_name;
Чтобы проверить, какие привилегии у пользователя использовать
SHOW GRANTS FOR [email protected]_name;
и убедитесь, что пользователь имеет только GRANT USAGE
и GRANT SELECT ON db_name.*
Допустим, у меня есть my_db
базу данных с test
таблицы в он и я хочу создать пользователя с именем user1
, которому разрешено подключаться только из локальный хост и сможет считывать данные из всех таблиц в этой базе данных, но не сможет вставлять, изменять и удалять данные.
mysql> create user [email protected] identified by 'password'; Query OK, 0 rows affected (0.00 sec) mysql> show grants for [email protected]; +--------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' | +--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> grant select on my_db.* to [email protected]; Query OK, 0 rows affected (0.00 sec) mysql> show grants for [email protected]; +--------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' | | GRANT SELECT ON `my_db`.* TO 'user1'@'localhost' | +--------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
Теперь давайте посмотрим, что наш user1
может и не может сделать
$ mysql -uuser1 -p mysql> use mysql ERROR 1044 (42000): Access denied for user 'user1'@'localhost' to database 'mysql' mysql> use test ERROR 1044 (42000): Access denied for user 'user1'@'localhost' to database 'test' mysql> use my_db Database changed
Как вы можете видеть наши user1
могут подключаться только к my_db
базе данных.
Теперь посмотреть, что пользователь может делать с данными теста таблицы (только таблицы в этой базе данных)
mysql> select * from test; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec) mysql> insert into test values (3); ERROR 1142 (42000): INSERT command denied to user 'user1'@'localhost' for table 'test' mysql> delete from test where id = 1; ERROR 1142 (42000): DELETE command denied to user 'user1'@'localhost' for table 'test' mysql> update test set id = 10 where id = 1; ERROR 1142 (42000): UPDATE command denied to user 'user1'@'localhost' for table 'test'
Опять же, как вы можете, пользователь может выбрать только из таблицы.