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';