DROP ROLE¶
从系统中移除指定角色。
语法¶
DROP ROLE [ IF EXISTS ] <name>
参数¶
name
指定要删除的角色的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
使用说明¶
已删除的角色无法恢复;必须重新创建。
不能删除当前的主要角色。尝试删除该角色会返回错误。例如:
CREATE ROLE bobr_primary; GRANT ROLE bobr_primary to USER bobr; USE ROLE bobr_primary; DROP ROLE bobr_primary;
SQL execution error: Cannot drop role BOBR_PRIMARY as it is the current primary role.
有关更多信息,请参阅 活动角色 和 具有主要角色和次要角色的执行模型。
如果角色具有共享数据库的 OWNERSHIP 权限,则无法删除该角色。使用 GRANT OWNERSHIP 命令,首先转让对共享数据库的 OWNERSHIP 权限,然后删除角色。
已删除的角色所拥有的任何对象的所有权会转让给执行 DROP ROLE 命令的角色。要将每个对象的所有权转让给不同的角色,请使用 GRANT OWNERSHIP ...COPY CURRENT GRANTS 的章节。
如果某角色作为授予者或被授予者具有未来权限,则该角色只能由具有 MANAGE GRANTS 权限的角色的用户删除。
在删除角色时,也会撤销将角色命名为授予者或被授予者的所有当前和未来授权。
查询 GRANTS_TO_ROLES Account Usage 视图,检索将指定角色命名为授予者或被授予者的权限授予:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES WHERE grantee_name = UPPER('<role_name>') OR granted_by = UPPER('<role_name>');
以下示例检索
myrole
是授权方或被授权方的权限授予:SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES WHERE grantee_name = UPPER('myrole') OR granted_by = UPPER('myrole');
如果角色是向用户授予角色的授予者,则删除该角色会自动撤消这些授权。
执行 DROP ROLE 命令时即会撤销授权。如果有数千或数百万项授权需要撤销,DROP ROLE 命令可能超时。在上一次调用停止的位置继续执行命令是安全的做法。
如果指定了
IF EXISTS
子句,而目标对象不存在,该命令会成功完成,不会返回错误。
示例¶
DROP ROLE myrole;