【问题标题】:Creating a user without deleting, updating and altering privileges in MySQL在 MySQL 中创建用户而不删除、更新和更改权限
【发布时间】:2013-10-08 00:21:07
【问题描述】:

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

【问题讨论】:

    标签: mysql privileges audit auditing


    【解决方案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'

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2013-12-04
      • 2011-12-28
      • 2020-06-04
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多