出于审核目的,我必须向某些用户提供对我的数据库的直接访问权限,并且应该添加限制以避免这些新用户没有删除、更新和更改权限。
问问题
1183 次
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 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'
同样,用户只能从表中进行选择。
于 2013-10-01T18:56:35.047 回答