MySQL用户也可以是个角色( 二 )

2.3、资源限制resource_option: {MAX_QUERIES_PER_HOUR count# 允许该用户每小时多少查询| MAX_UPDATES_PER_HOUR count# 允许该用户每小时多少更新| MAX_CONNECTIONS_PER_HOUR count# 允许该用户每小时多少连接到服务器| MAX_USER_CONNECTIONS count# 限制该用户同时连接到服务器的最大数量}# 限制用户每小时的查询和更新数CREATE USER 'kuzma'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;如果count为0(默认值) , 表示该用户没有限制 。通常生产用户不会在数据库层做资源限制 , 但某些特殊用户特殊场景下 , 可通过进行资源限制实现限流 。
2.4、账户锁定CREATE USER 和 ALTER USER 中使用 ACCOUNT LOCK 和 ACCOUNT UNLOCK 选项支持用户的锁定和解锁;常见场景:数据库、业务迁移 , 用户切新改造等 , 通过对用户的锁定和解锁 , 实现对业务连接控制 。3、授权用户使用 GRANT 给用户授权 , REVOKE 给用户撤权(需要操作者拥有 GRANT OPTION 权限) 。支持用户对库、表、列、存储过程、代理用户【MySQL用户也可以是个角色】# 授权[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';权限元数据存储位置:
权限类型元数据存储-系统表用户全局权限mysql.user数据库(DB)权限mysql.db表(table)权限mysql.tables_priv列(columns)权限mysql.columns_privroutine-level(procedures and functions)权限mysql.procs_priv代理(proxy)用户权限mysql.proxies_privTips:值得注意的是 , 在某些情况下 , 无论是 CREATE|ALTER USER 还是 GRANT 都可能会记录在服务器日志中或客户端的历史文件中 , 例如 ~/.mysql_history , 这就意味着任何有权读取该信息的人都可以读取明文密码 , 这不就暴露了吗 。 二、瞅瞅其他数据库的用户角色管理1、SQL Server的用户角色服务器级别角色:

  • 全局权限 , 只登入名(如超级管理员的登录名是sa)拥有;
  • 服务器角色是固定的(包括:sysadmin、setupadmin、serveradmin等) , 用户无法创建服务器角色 , 一般也不建议给用户直接分配服务器角色 。
数据库级别角色: