DBMS IMPERSONATE 权限

DBMS 的模拟(impersonation)权限可以像其他权限一样被授予、拒绝或撤销。

模拟是指用户承担另一个用户角色(并因此获得相应权限)的能力,但限制在于:以被模拟用户身份执行时,无法运行更新性的 admin 命令(即他们仍然可以使用 SHOW 命令)。

您可以使用 IMPERSONATE 权限来允许某个用户模拟另一个用户。

有关语法描述的更多详细信息,请参阅 阅读管理命令语法

表 1. 模拟权限命令语法
命令 描述
GRANT [IMMUTABLE] IMPERSONATE [(*)]
    ON DBMS
    TO role[, ...]

允许指定角色模拟任何用户。

GRANT [IMMUTABLE] IMPERSONATE (user[, ...])
    ON DBMS
    TO role[, ...]

允许指定角色模拟指定用户。

授予模拟所有用户的权限

您可以使用 IMPERSONATE (*) 权限来授予模拟所有用户的权限。
例如:

查询
GRANT IMPERSONATE (*) ON DBMS TO allUserImpersonator

因此,allUserImpersonator 角色将拥有模拟所有用户的权限。若要以命令形式列出角色 allUserImpersonator 的所有权限,请使用以下查询:

查询
SHOW ROLE allUserImpersonator PRIVILEGES AS COMMANDS;
表 2. 结果
command(命令)

"GRANT IMPERSONATE (*) ON DBMS TO `allUserImpersonator`"

行:1

授予模拟特定用户的权限

您也可以授予模拟特定用户或用户子集的权限。
例如:

查询
GRANT IMPERSONATE (alice, bob) ON DBMS TO userImpersonator;

因此,userImpersonator 角色将仅拥有模拟 alicebob 的权限。随后,您拒绝其模拟 alice 的权限:

查询
DENY IMPERSONATE (alice) ON DBMS TO userImpersonator;

最终,userImpersonator 用户将只能模拟 bob

若要以命令形式列出角色 userImpersonator 的所有权限,请使用以下查询:

查询
SHOW ROLE userImpersonator PRIVILEGES AS COMMANDS;
表 3. 结果
command(命令)

"DENY IMPERSONATE (alice) ON DBMS TO `userImpersonator`"

"GRANT IMPERSONATE (alice) ON DBMS TO `userImpersonator`"

"GRANT IMPERSONATE (bob) ON DBMS TO `userImpersonator`"

行:3