MySQL管理——授权系统

MySQL的授权系统的一个重要功能是为数据库分配具有权限的用户。当用户通过认证后,MySQL将通过下记问题验证用户的权限:

  • 当前的用户是谁?

  • 用户具有哪些权限?

  • 权限的应用范围

DBA必须为用户配置正确的权限用于授权工作。MySQL的用户权限适用于不同的范围级别,包括,全局、数据库、表、列,及存储程序。为用户或角色授权时,需要考虑他们的访问要求:

  • 只读用户:赋予全局、数据库或表级别的“SELECT”权限。

  • 修改数据库的用户:赋予全局、数据库或表级别的“INSERT,UPDATE,DELETE,CREATE,ALTER,DROP”权限。

  • 管理员用户:赋予全局级别的权限,例如,“FILE,PROCESS,SHUTDOWN,SUPER”。


管理员权限

管理员权限在全局范围内赋予,允许用户进行下记活动:

  • FILE:从主机的文件系统中的文件读取/写入SQL语句执行。

  • PROCESS:使用“SHOW PROCESSLIST”语句查看全部客户端正在执行的语句。

  • SHOW DATABASES:列出全部的数据库。

  • SHUTDOWN:使用“SHUTDOWN”或“RESTART”语句关闭或重启MySQL服务器。

  • RELOAD:执行“FLUSH”语句重新加载日志和权限表。

  • CREATE ROLE, CREATE TABLESPACE, CREATE USER,DROP ROLE, REPLICATION CLIENT

  • SUPER:SUPER权限允许云和执行服务器级别的任务,包括设置全局变量、控制日志和复制、断开客户端连接等。

上记管理员权限,涉及危及安全、访问隐私数据,或令服务器拒绝服务,因此需要确保为正确的账户赋予该权限。

动态权限

动态权限是服务器启动时或通过组件、插件定义的权限。为用户在有限的范围内赋予动态权限以代替“SUPER”权限,以执行最小权限原则。动态权限存储在mysql.global_grants表中,例如:

AUDIT_ADMIN:在审计日志插件中配置审计日志

FIREWALL_ADMIN:在防火墙插件中管理防火墙规则

GROUP_REPLICATION_ADMIN:配置、启动、停止组复制

ROLE_ADMIN:授予和撤销角色,并配置“mandatory_roles”变量值

REPLICATION_SLAVE_ADMIN:配置从服务器,并启动/停止复制功能

SYSTEM_VARIABLES_ADMIN:使用“SET GKIBAL”和“SET PERSIST”语句更改全局系统变量。

“GRANT”和“REVOKE”

DBA通过“GRANT”语句赋予权限,通过“REVOKE”语句撤销权限。“GRANT”语句可以为用户和角色授权,例如,

    GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
    GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
    GRANT SELECT ON world.* TO 'role3';

    语句中包含需要授予的权限,及权限的范围。权限范围如下:

    • 全局:*.*

    • 数据库:db_name.*

    • 表:db_name.table_name

    • 存储程序:db_name.routine_name

    数据库级别的权限包括, CREATE, DROP, EVENT, GRANT OPTION, LOCK TABLES, 及REFERENCES。表级别的权限包括, ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, 及 UPDATE。注意,表级别的权限不适用于“CREATE TEMPORARY TABLE”创建的表。存储程序中的权限包括, ALTER ROUTINE, CREATE ROUTINE, EXECUTE, 及GRANT OPTION。

    此外,可以为用户和角色赋予表中列的权限,例如,

      GRANT SELECT (col1), INSERT (col1, col2) ON mydb.mytbl TO 'someuser'@'somehost';

      DBA可以通过使用“SHOW GRANTS”语句查看赋予的权限,例如,

        mysql> SHOW GRANTS FOR u3;
        +----------------------------------------------------+
        | Grants for u3@% |
        +----------------------------------------------------+
        | GRANT SELECT, INSERT, UPDATE ON *.* TO `u3`@`%` |
        | REVOKE INSERT, UPDATE ON `schema1`.* FROM `u3`@`%` |
        | REVOKE SELECT ON `schema2`.* FROM `u3`@`%` |
        +----------------------------------------------------+

        REVOKE语句可以撤销用户的全部或部分权限,例如,一个用户具有SELECT,DELETE,INSERT和UPDATE权限,如果DBA需要更改该用户的权限,使其仅具有SELECT权限,则执行下语句:

          REVOKE DELETE, INSERT,UPDATE ON world.* FROM 'user1'@'localhost';

          部分撤销

          该功能在8.0.16版本加入,使用时需开启“partial_revokes”系统变量。该功能允许在全局范围内授权,并撤销一部分schema的权限。例如,

            mysql> CREATE USER u1;
            mysql> GRANT SELECT, INSERT ON *.* TO u1;
            mysql> REVOKE INSERT ON world.* FROM u1;


            注意,MySQL的授权系统无法为一个指定的对象(例如,数据库,表等)分配一个密码,也无法显示地拒绝一个指定的用户访问指定的对象(可以通过撤销部分权限在schema级别实现),并且无法实现行级别的授权。

            以上内容是关于MySQL授权系统的简介,感谢关注“MySQL解决方案工程师”!


            免责声明:

            1、本站资源由自动抓取工具收集整理于网络。

            2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

            3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

            4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

            5、如果您喜欢本资源,请您支持作者,购买正版内容。

            6、资源失效,请下方留言,欢迎分享资源链接

            文章评论

            0条评论