0

出于审核目的,我必须向某些用户提供对我的数据库的直接访问权限,并且应该添加限制以避免这些新用户没有删除、更新和更改权限。

4

1 回答 1

1

只需创建一个用户并 SELECT授予权限。

CREATE USER user_name@host_name identified by 'password';
GRANT SELECT ON db_name.* TO user_name@host_name;

检查用户使用了哪些权限

SHOW GRANTS FOR user_name@host_name;

并确保用户只有GRANT USAGEGRANT SELECT ON db_name.*


假设我有一个my_db带有表的数据库,test我想创建一个用户名,该用户名user1只能从本地主机连接,并且能够从该数据库中的所有表中读取数据,但无法插入、更改和删除数据。

mysql> 创建由“密码”标识的用户 user1@localhost;
查询正常,0 行受影响(0.00 秒)

mysql> 显示 user1@localhost 的授权;
+-------------------------------------------------- -------------------------------------------------- ------------+
| 授予 user1@localhost |
+-------------------------------------------------- -------------------------------------------------- ------------+
| 将 *.* 上的使用权限授予由密码 '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' 识别的 'user1'@'localhost' |
+-------------------------------------------------- -------------------------------------------------- ------------+
一组中的 1 行(0.00 秒)

mysql> 将 my_db.* 上的选择授予 user1@localhost;
查询正常,0 行受影响(0.00 秒)

mysql> 显示 user1@localhost 的授权;
+-------------------------------------------------- -------------------------------------------------- ------------+
| 授予 user1@localhost |
+-------------------------------------------------- -------------------------------------------------- ------------+
| 将 *.* 上的使用权限授予由密码 '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' 识别的 'user1'@'localhost' |
| GRANT SELECT ON `my_db`.* TO 'user1'@'localhost' |
+-------------------------------------------------- -------------------------------------------------- ------------+
2 行(0.00 秒)

现在让我们看看我们user1能做什么和不能做什么

$ mysql -uuser1 -p
mysql> 使用 mysql
错误 1044 (42000): 用户 'user1'@'localhost' 拒绝访问数据库 'mysql'
mysql> 使用测试
错误 1044 (42000):拒绝用户 'user1'@'localhost' 访问数据库 'test'
mysql> 使用 my_db
数据库已更改

如您所见,我们user1只能连接到my_db数据库。

现在让我们看看该用户可以对表 test(该数据库中唯一的表)中的数据做什么

mysql> 从测试中选择 *;
+------+
| 编号 |
+------+
| 1 |
| 2 |
+------+
2 行(0.00 秒)

mysql> 插入测试值 (3);
ERROR 1142 (42000): INSERT 命令拒绝用户 'user1'@'localhost' 用于表 'test'
mysql> 从 id = 1 的测试中删除;
ERROR 1142 (42000): DELETE command denied to user 'user1'@'localhost' for table 'test'
mysql> 更新测试集 id = 10 其中 id = 1;
错误 1142 (42000): UPDATE 命令拒绝用户 'user1'@'localhost' 用于表 'test'

同样,用户只能从表中进行选择。

于 2013-10-01T18:56:35.047 回答