2013-10-01 5 views
0

Я должен предоставить прямой доступ к моей базе данных некоторым пользователям для целей аудита и должен добавить ограничение, чтобы избежать, чтобы эти новые пользователи не удаляли, не обновляли и не изменяли изменяя привилегии.Создание пользователя без удаления, обновления и изменения прав в MySQL

ответ

1

Просто создайте пользователя и дайте только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' 

Опять же, как вы можете, пользователь может выбрать только из таблицы.

 Смежные вопросы

  • Нет связанных вопросов^_^