第9章 用户与角色9.1.1 创建用户CREATE USER语句来创建一个或多个用户账户:CREATE USER [IF NOT EXI STS]用户 [身份验证选项][, 用户 [身份验证选项]] ...DEFAULT ROLE 角色[, 角色] ...[REQUI RE {NONE | SSL/TLS选项 [[AND] SSL/TLS选项] ...}][WITH 资源选项 [资源选项] ... ][密码选项 | 锁定选项] ...用户:''用户名''@''主机名''9.1 用户管理9.1.1 创建用户身份验证选项:{IDENT IFIED BY ''身份验证字符串'' | IDENTIFIED WITH 身份验证插件| IDENTIFIED WITH身份验证插 件 BY ''身份验证字符串''| IDENTIFIED WITH身份验证插件 AS ''哈希字符串''}SSL/TLS选项:{SSL | X509 | CIPHER ''密码''| ISSUER ''颁发者'' | SUBJECT ''主题''}资源选项:{MAX_ QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count| MAX_CONNECTI ONS_PER_HOUR count | MAX_USER_CONNECTIONS count}9.1 用户管理9.1.1 创 建用户密码选项:{PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]| PASS WORD HISTORY {DEFAULT | N}| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]}锁定选项:{ACCOUNT LOCK|ACCOUNT UNLOCK}9.1 用户管理9.1.2 修改用户使用ALTER USER语句来修改现有MySQL 账户的身份验证、角色、SSL/TLS、资源限制以及密码管理属性,并启用账户锁定和解锁:ALTER USER [IF EXISTS] 用户 [身份验证选项][, 用户 [身份验证选项]] ...[REQUIRE {NONE|SSL/TLS选项 [[AND] SSL /TLS选项] ...}][WITH 资源选项 [资源选项] ...][密码选项|锁定选项] ...用户:''用户名''@''主机名''身 份验证选项:{IDENTIFIED BY ''身份验证字符串'' [REPLACE ''当前身份验证字符串'']| IDENTIFIED WITH 身份验证插件| IDENTIFIED WITH 身份验证插件BY ''身份验证字符串'' [REPLACE ''当前身份验证字 符串'']| IDENTIFIED WITH 身份验证插件 AS ''哈希字符串’ }9.1 用户管理9.1.2 修改用户SSL/ TLS选项:{SSL | X509 | CIPHER ''密码'' | ISSUER ''颁布者'' | SUBJECT ''主题'' }资源 选项:{MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count| MAX_ CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count}密码选项:{PAS SWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]| PASSWORD HISTORY {DEFAULT | N}| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}| PASSWO RD REQUIRE CURRENT [DEFAULT | OPTIONAL] }锁定选项:{ACCOUNT LOCK | ACC OUNT UNLOCK }9.1 用户管理9.1.3 重命名用户使用RENAME USER语句对现有MySQL用户进行重命名: RENAME USER 旧用户 TO 新用户[, 旧用户 TO 新用户] ...其中每个账户名使用 ''用户名''@''主机名'' 格式指 定。如果省略账户名的主机名部分,则默认为''%''。如果不存在的旧账户或者已经存在新账户,则会出错。要使用RENAME USER语句, 必须具有全局CREATE USER权限或mysql系统数据库的UPDATE权限。启用read_only系统变量时,RENAME U SER还需要CONNECTION_ADMIN或SUPER权限。RENAME USER使旧用户拥有的权限成为新用户持有的权限。但是, RENAME USER不会自动删除旧用户创建的数据库或对象。这包括DEFINER属性为旧用户命名的存储程序或视图。如果在定义的安全 性上下文中执行,则尝试访问此类对象可能会产生错误。9.1 用户管理9.1.4 修改密码使用SET PASSWORD语句可以为M ySQL用户账户分配密码,语法格式如下。SET PASSWORD [FOR 用户]=''身份验证字符串'' [REPLACE ''当前身 份验证字符串'']设置指定账户的密码(带有FOR子句)需要mysql系统数据库的UPDATE权限。为自己设置密码(对于没有FOR子句 的非用户账户)不需要特殊权限。启用read_only系统变量时,除了任何其他所需权限外,SET PASSWORD还需要CONNEC TION_ADMIN或SUPER权限。如果给定REPLACE子句,则必须指定要替换的当前账户密码。如果需要对账户密码进行修改,则必 须提供当前密码。如果给出了该子句但与当前密码不匹配,则语句失败。只有在更改当前用户的账户密码时才能指定REPLACE子句。在SET PASSWORD语句中,FOR子句是可选的。如果使用FOR子句,则可以设置指定账户的密码。例如:SET PASSWORD FOR ''jeffrey''@''localhost'' = ''auth_string'';如果没有使用FOR子句,则设置当前用户的密码。例如: SET PASSWORD =''auth_string'';使用非账户账户连接到服务器的任何客户端都可以更改该账户的密码。9.1 用 户管理9.1.5 删除用户在MySQL中,可以使用DROP USER语句删除一个或多个MySQL用户及其权限,从所有授权表中删除 用户的权限行,语法格式如下。DROP USER [IF EXISTS] 用户[, 用户] ...要使用DROP USER语句,必须 具有全局CREATE USER权限或mysql系统数据库的DELETE权限。启用read_only系统变量时,DROP USER还 需要CONNECTION_ADMIN或SUPER权限。DROP USER对所有命名用户都成功或回滚,如果发生任何错误则无效。默认情 况下,如果尝试删除不存在的用户,则会发生错误。如果给出了IF EXISTS子句,则该语句会为每个不存在的命名用户生成警告而不是错误 。如果语句执行成功,则将语句写入二进制日志,如果失败则不写入。在这种情况下,发生回滚并且不进行任何更改。每个用户账户使用 ''用户名 ''@''主机名'' 格式。如果省略主机名部分,则默认为 ''%''。DROP USER语句不会自动关闭任何打开的用户会话。相反,如果删除了 具有打开会话的用户,则该语句在该用户的会话关闭之前不会生效。当会话关闭后,用户将被删除,该用户下次尝试登录将失败。DROP USE R不会自动删除旧用户创建的数据库或对象。这包括存储程序或视图,DEFINER属性为已删除的命名用户。如果在定义的安全性上下文中执行 ,则尝试访问此类对象可能会产生错误。9.1 用户管理9.2.1 创建角色在MySQL中,可以使用CREATE ROLE语句创建 一个或多个角色,语法格式如下。CREATE ROLE [IF NOT EXISTS] 角色[, 角色] ...要使用CREATE ROLE语句,必须具有全局CREATE ROLE或CREATE USER权限。启用read_only系统变量时,CREATE RO LE还需要CONNECTION_ADMIN或SUPER权限。创建时的角色已被锁定,没有密码,并被分配了默认的身份验证插件。CREA TE ROLE对所有命名角色成功或回滚,如果发生任何错误则无效。默认情况下,如果尝试创建已存在的角色,则会发生错误。如果给出了IF NOT EXISTS子句,则该语句会为已存在的每个命名角色生成警告而不是错误。如果成功,则将语句写入二进制日志,但如果失败则不写 入。在这种情况下,发生回滚并且不进行任何更改。写入二进制日志的语句包括所有命名角色。如果给出IF NOT EXISTS子句,则包括 已存在且未创建的角色。9.2 角色管理9.2.2 授予权限使用GRANT语句为用户账户和角色分配权限或角色:GRANT 权限类 型 [(列名列表)] [, 权限类型[(列名列表)]] ...ON [对象类型] 权限级别 TO 用户或角色[, 用户或角色] . ..[WITH GRANT OPTION]GRANT PROXY ON 用户或角色TO 用户或角色[, 用户或角色] ... [W ITH GRANT OPTION]GRANT 角色[, 角色] ...TO 用户或角色[, 用户或角色] ... [WITH AD MIN OPTION]对象类型:{ TABLE | FUNCTION | PROCEDURE }权限级别:{ | . | 数据库名. | 数据库名.表名 | 表名 | 数据库名.例程名 }用户或角色:{ 用户 | 角色 }用户:''用户名''@''主机名'' 角色:''角色名''@''主机名’9.2 角色管理9.2.3 撤消权限从指定MySQL用户账户或角色中撤消已授予的权限:REVOKE 权限类型 [(列名列表)] [, 权限类型[(列名列表)]] ...ON [对象类型] 权限级别FROM 用户或角色 [, 用户 或角色] ...从指定MySQL用户账户或角色中撤消已授予的所有权限:REVOKE ALL [PRIVILEGES], GRANT OPTIONFROM 用户或角色 [, 用户或角色] ...从MySQL用户账户或角色中撤消用户代理:REVOKE PROXY ON 用户或角色FROM 用户或角色 [, 用户或角色] ...从MySQL用户账户或角色中撤消已授予的角色:REVOKE 角色 [, 角色] ...FROM 用户或角色 [, 用户或角色] ... 用户或角色:{用户 | 角色}9.2 角色管理9.2.4 激活角色1. SET DEFAULT ROLE语句SET DEFAULT ROLE{NONE | ALL | 角色 [, 角色] ...}TO 用户[, 用户] ...2. SET ROLE语句SET ROLE {DEFAULT | NONE | ALL| ALL EXCEPT 角色[, 角色] ...| 角色 [, 角色] ...}9.2 角色管理9.2.5 删除角色使用DROP ROLE语句删除一个或多个角色:DROP ROLE [IF EXISTS] 角色[, 角色] ...要使用DROP ROLE语句 ,必须具有全局DROP ROLE或CREATE USER权限。当启用read_only系统变量时,DROP ROLE还需要CONN ECTION_ADMIN或SUPER权限。无法删除在mandatory_roles系统变量值中命名的角色。DROP ROLE对所有 命名角色成功或回滚,如果发生任何错误则无效。默认情况下,如果尝试删除不存在的角色,则会发生错误。如果给出了IF EXISTS子句,则该语句会为每个不存在的命名角色生成警告而不是错误。如果成功,则将语句写入二进制日志,但如果失败则不写入。在这种情况下,发生回滚并且不进行任何更改。写入二进制日志的语句包括所有命名角色。如果给出了IF EXISTS子句,则包括不存在且未被删除的角色。每个角色名称使用 ''角色名''@''主机名''。如果省略主机名部分,则默认为 ''%''。已被删除的角色会自动从已授予角色的任何用户账户(或角色)中撤消。在此类账户的任何当前会话中,将针对下一个执行的语句调整其权限。9.2 角色管理 |
|