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

SETUSER 语句

允许用户临时采用其他用户的角色和系统特权(也称为模仿)来执行操作,前提是该用户已具有执行任务所需的最低特权。

注意 SET USER 系统特权是两个词;而 SETUSER 语句是一个词。

快速链接:

转至参数

转至用法

转至标准

转至权限

语法

SETUSER 

参数

  • UserID 必须是具有登录口令的现有用户或角色的名称。

    用法

    必要条件验证在执行 SETUSER 语句时进行,而不是在授予 SET USER 系统特权时进行。

    要终止成功的模仿,可发出 SETUSER 语句,而不指定 userID。

    标准

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

    权限

    需要以下各项:

  • 已授予模仿者模仿目标用户的权限。

  • 模仿者至少具有目标用户被授予的所有角色和系统特权。

  • 已授予模仿者具有类似或更高管理权限的角色和系统特权。注意 为了满足管理权限条件,将认为 WITH ADMIN OPTION 和 WITH ADMIN ONLY OPTION 子句授予类似的管理权限。此外,还会认为这些子句授予的管理权限比 WITH NO ADMIN OPTION 子句授予的权限要高。例如,使用 WITH ADMIN OPTION 子句向 User1 授予 Role1,使用 WITH ADMIN ONLY 子句向 User2 授予 Role1,使用 WITH NO ADMIN OPTION 子句向 User3 授予 Role1。将授予 User1 和 User2 具有类似管理权限的 Role1。将授予 User1 和 User2 管理权限比 User3 高的 Role1。

  • 如果已授予目标用户支持扩展的系统特权,则用于授予模仿者系统特权的子句是用于目标用户的子句的超集。仅 SET USER 和 CHANGE PASSWORD 系统特权支持扩展。将 ANY 子句视为 子句的超集。如果已授予目标用户具有 ANY 授权的 SET USER 系统特权,则模仿者必须也具有 ANY 授权。 如果同时使用 子句授予目标用户 SET USER 系统特权,则必须同时使用这两个子句授予模仿者系统特权,并且每个子句的目标列表必须与目标用户的相应子句授权列表相同,或是其列表的超集。例如,如果模仿者和目标用户的目标列表分别包含 User1、User2 及 Role1、Role2,则每个子句的目标列表授权将视为相同。或者,如果模仿者的目标列表授权分别包含 User1、User2、Role1 和 Role2,而目标用户的目标列表授权仅包含 User1 和 Role2,则认为模仿者的目标列表授权是目标用户列表的超集。 如果已使用单个目标列表子句授予目标用户 SET USER 系统特权,则模仿者的目标列表必须与目标用户的列表相同,或是其列表的超集。例如,模仿者和目标用户的 均包含 User1 和 User2(相同),或模仿者列表包含 User1 和 User2,而目标用户列表包含 User2,则 User1、User2(模仿者列表)是 User2(目标用户列表)的超集。 根据定义,用户可以始终模仿其自身。因此,如果授予目标用户模仿模仿者的权限,将不会违反模仿者的“必须相同或为超集”的条件要求。例如,User3 是模仿者,而 User4 是目标用户。User3 的 包含 User4 和 User5。User4 的 包含 User3 和 User5。如果从目标列表中删除该模仿者,则 User3 的目标列表满足条件要求。

  • 将 ANY 子句视为 子句的超集。如果已授予目标用户具有 ANY 授权的 SET USER 系统特权,则模仿者必须也具有 ANY 授权。

  • 如果同时使用 子句授予目标用户 SET USER 系统特权,则必须同时使用这两个子句授予模仿者系统特权,并且每个子句的目标列表必须与目标用户的相应子句授权列表相同,或是其列表的超集。例如,如果模仿者和目标用户的目标列表分别包含 User1、User2 及 Role1、Role2,则每个子句的目标列表授权将视为相同。或者,如果模仿者的目标列表授权分别包含 User1、User2、Role1 和 Role2,而目标用户的目标列表授权仅包含 User1 和 Role2,则认为模仿者的目标列表授权是目标用户列表的超集。

  • 如果已使用单个目标列表子句授予目标用户 SET USER 系统特权,则模仿者的目标列表必须与目标用户的列表相同,或是其列表的超集。例如,模仿者和目标用户的 均包含 User1 和 User2(相同),或模仿者列表包含 User1 和 User2,而目标用户列表包含 User2,则 User1、User2(模仿者列表)是 User2(目标用户列表)的超集。

  • 根据定义,用户可以始终模仿其自身。因此,如果授予目标用户模仿模仿者的权限,将不会违反模仿者的“必须相同或为超集”的条件要求。例如,User3 是模仿者,而 User4 是目标用户。User3 的 包含 User4 和 User5。User4 的 包含 User3 和 User5。如果从目标列表中删除该模仿者,则 User3 的目标列表满足条件要求。