您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

CREATE ROLE 语句

新建角色、将现有用户扩展为角色,或者管理角色对应的角色管理员。

快速链接:

转至参数

转至示例

转至用法

转至标准

转至权限

语法

CREATE [ OR REPLACE ] ROLE {  | FOR USER  }

[ WITH ADMIN [ ONLY ] , [ SYS_MANAGE_ROLES_ROLE ]

参数

  • role_name 除非使用 OR REPLACE 子句,否则 不能已存在于数据库中。

  • OR REPLACE 数据库中必须包含 。如果 尚不存在,将创建一个新的用户定义角色。当前所有管理员将由 子句中指定的管理员所替换,具体如下所述: 所有被授予 WITH ADMIN OPTION 而未包含在新角色管理员列表中的现有角色管理员将成为没有角色管理权限的角色的成员。所有被授予 WITH ADMIN ONLY OPTION 而未包含在新角色管理员列表中的现有角色管理员将作为角色的成员被删除。使用 OR REPLACE 子句时,如果新角色管理员列表中包含的某个现有角色管理员的原始管理权限高于替换权限,则保留其原始管理权限。例如,用户 A 是一个现有角色管理员,最初被授予对角色的 WITH ADMIN 权限。新角色管理员被授予 WITH ADMIN ONLY 权限。如果该列表中包含用户 A,则用户 A 将保留较高的 WITH ADMIN 权限。

  • 所有被授予 WITH ADMIN OPTION 而未包含在新角色管理员列表中的现有角色管理员将成为没有角色管理权限的角色的成员。

  • 所有被授予 WITH ADMIN ONLY OPTION 而未包含在新角色管理员列表中的现有角色管理员将作为角色的成员被删除。

  • FOR USER 使用 FOR USER 子句而不使用 OR REPLACE 时, 必须是当前无法用作角色的现有用户的名称。

  • admin_name 要指定为角色管理员的用户的列表。

  • WITH ADMIN 除了所有基础系统特权外,指定的每个 还被授予对角色的管理特权。列表中包含 SYS_MANAGE_ROLES_ROLE 时,WITH ADMIN 子句无效。

  • WITH ADMIN ONLY 指定的每个 仅被授予对角色的管理特权,而不是基础系统特权。

  • SYS_MANAGE_ROLES_ROLE 允许全局角色管理员管理角色。可结合 WITH ADMIN ONLY 子句进行指定。

    示例

  • 示例 1 创建角色 Sales。只有全局角色管理员可以管理此角色。 CREATE ROLE Sales

  • 示例 2扩展现有用户 Jane 以用作角色。 CREATE OR REPLACE ROLE FOR USER Jane

  • 示例 3创建角色 Finance,并使 Mary 和 Jeff 成为具有角色管理权限的角色管理员。全局角色管理员无法管理此角色。 CREATE ROLE Finance WITH ADMIN Mary, Jeff

  • 示例 3 创建角色 Marketing,并使 Mary 和 Jeff 成为角色管理员。全局角色管理员也可以管理此角色。 CREATE ROLE Finance WITH ADMIN ONLY Mary, Jeff, SYS_MANAGE_ROLES_ROLE

  • 示例 4 Finance 是一个现有角色,Harry 和 Susan 是具有管理权限的角色管理员。您希望 Susan 保留管理员角色,替换 Harry 并添加全局角色管理员。新角色管理员将仅具有管理权限。 该语句将保留 Susan 的管理员角色,但因为授予的原始管理权限较高,仍将保留 Susan 对角色的管理权限。Bob 和 Sarah 将替换 Harry,不过仅限管理权限,并添加了全局角色管理员角色。Harry 仍为角色成员,但不再具有管理权限。 CREATE OR REPLACE ROLE Finance WITH ADMIN ONLY Susan, Bob, Sarah, SYS_MANAGE_ROLE_ROLE

    用法

    如果指定角色管理员 (),但不包含全局角色管理员 (SYS_MANAGE_ROLES_ROLE),则全局角色管理员将无法管理新角色。因此,建议您在创建过程中不指定角色管理员。之后使用 OR REPLACE 子句进行添加。

    如果未指定 ADMIN 子句,将使用缺省 WITH ADMIN ONLY 子句,且缺省管理员为全局角色管理员 (SYS_MANAGE_ROLES_ROLE)。

    替换角色管理员时,如果角色具有全局角色管理员,则必须将全局角色管理员包含在新角色管理员列表中,否则会将其从角色中删除。

    但是,使用 WITH ADMIN 子句授予角色管理员时,由于该子句对全局角色管理员无效,您必须使用 GRANT ROLE 语句将全局角色管理员 (SYS_MANAGE_RILES_ROLE) 重新添加到角色。执行此授予失败则表示全局角色管理员无法管理该角色。

    标准

    符合 ANSI SQL 的级别:Transact-SQL 扩展。

    权限

  • 创建新角色 - 需要 MANAGE ROLES 系统特权。

  • OR REPLACE 子句 – 需要 MANAGE ROLES 系统特权,以及对所替换角色的管理权限。