前言角色(Role),可以认为是一些权限的集合,一直是存在各个数据库中,比如Oracle、SQL Server、OceanBase等,MySQL 自从 8.0 release 才引入角色这个概念 。为用户赋予统一的角色 , 即把一个带有某些权限集合的角色分配给一个用户,那该用户就拥有了该角色所包含的所有权限,权限的修改直接通过角色来进行,无需为每个用户单独授权 , 大大的方便了权限管理 。一、回顾MySQL 8.0之前的用户管理1、创建用户(默认缺省)从 CREATE USER 的 help 语法解释中发现,其不仅可以创建新的 MySQL 帐户 , 还支持为新帐户建立身份验证、SSL/TLS、资源限制和密码管理属性,并控制帐户最初是锁定还是解锁 。那么,缺省选项默认创建的用户是怎么样的呢?mysql> CREATE USER kuzma IDENTIFIED BY 'iamkuzma';Query OK, 0 rows affected (0.07 sec)mysql> select * from mysql.user where User="kuzma"\G*************************** 1. row ***************************Host: %User: kuzmaSelect_priv: NInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: N Create_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: NCreate_tablespace_priv: Nssl_type:ssl_cipher: 0xx509_issuer: 0xx509_subject: 0xmax_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_password authentication_string: *E2D9547BC3A2AD2EEC6BE9636489AC973656EEB9password_expired: N password_last_changed: 2022-10-05 17:41:06password_lifetime: NULLaccount_locked: N1 row in set (0.06 sec)如上,在 CREATE USER 后会在 mysql.user 系统表中注册相关用户信息,未指定的属性设置为其默认值:
- 帐户名的主机名部分,如果省略,则默认为'%',即 'kuzma'@'%',表示不限主机连接
- Authentication:系统变量定义的认证插件 default_authentication_plugin = mysql_native_password , 空凭证
- SSL/TLS:NONE
- 资源限制:无限制,max_questions最大查询数、max_updates最大更新数等都为0(默认值),即未做限制
- 密码管理:PASSWORD EXPIRE DEFAULT
- 密码过期:NONE,未设定,即永不过期
- 账户锁定:ACCOUNT UNLOCK,未锁定
2.4、账户锁定CREATE USER 和 ALTER USER 中使用 ACCOUNT LOCK 和 ACCOUNT UNLOCK 选项支持用户的锁定和解锁;常见场景:数据库、业务迁移,用户切新改造等,通过对用户的锁定和解锁,实现对业务连接控制 。3、授权用户使用 GRANT 给用户授权,REVOKE 给用户撤权(需要操作者拥有 GRANT OPTION 权限) 。支持用户对库、表、列、存储过程、代理用户# 授权[kuzma_write]用户{查询、插入、更新、删除}所有库表(*表示所有,db1.*表示db1库下的所有表)GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO kuzma_write;# 撤销[kuzma_write]用户的删除权限REVOKE DELETE ON *.* FROM 'kuzma_write'@'%';# 设置列权限-----虽然但是有时业务还就是有这样的需求# 1.列权限类型有且仅包括INSERT、REFERENCES(创建外键约束)、SELECT 和 UPDATE,权限后括号内给定表中的一个或多个列# 2.列权限存储在 mysql.columns_priv,其中的Column_priv列是一个枚举列,亦可说明为什么列权限"有且仅"4种权限GRANT SELECT (col1), INSERT (col1, col2) ON db1.tbl2 TO 'xxx_user'@'xxx_host';# 授权存储过程的创建和执行GRANT CREATE ROUTINE ON db1.* TO 'xxx_user'@'xxx_host';GRANT EXECUTE ON PROCEDURE db1.proc2 TO 'xxx_user'@'xxx_host';# 代理用户# 该PROXY权限使一个用户可以成为另一个用户的代理,代理用户冒充或冒用被代理用户的身份,实现权限的复制GRANT PROXY ON 'localuser'@'localhost' TO 'xxx_user'@'xxx_host';
推荐阅读
- python+request+pymysql+pytest数据驱动
- CentOS 7.9 安装 MySQL 5.7.35
- 关于windows-server-下MySQL Community版本的的安装与配置
- CentOS 7 下安装 MySQL 8.x
- 2021年Q4手机用户偏好榜-2021年安兔兔第四季度用户偏好榜
- day04-MySQL常用函数01
- 我操作MySQL的惊险一幕
- centos7中配置java + mysql +jdk+使用jar部署项目
- day03-MySQL基础知识02
- gRPC+Protocol Buffer Go微服务实战 - 用户服务开发