只需创建一个用户并授予仅 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 USAGE 和GRANT 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'
同样,用户只能从表格中进行选择。