MySQL管理——授权系统

2023年 8月 15日 42.4k 0

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解决方案工程师”!

            相关文章

            Oracle如何使用授予和撤销权限的语法和示例
            Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
            下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
            社区版oceanbase安装
            Oracle 导出CSV工具-sqluldr2
            ETL数据集成丨快速将MySQL数据迁移至Doris数据库

            发布评论