允许以其他用户身份执行查询。
语法
EXECUTE AS target_user;
EXECUTE AS target_user subquery;第一种形式 (不带 subquery) 会将当前 session 中后续的所有查询设置为以指定的 target_user 身份执行。
第二种形式 (带 subquery) 仅会以指定的 target_user 身份执行指定的 subquery。
要使这两种形式都能生效,需要将配置项 access_control_improvements.allow_impersonate_user
设置为 1,并授予 IMPERSONATE 权限。例如,以下命令
GRANT IMPERSONATE ON user1 TO user2;
GRANT IMPERSONATE ON * TO user3;允许用户 user2 执行 EXECUTE AS user1 ... 命令,同时也允许用户 user3 以任意用户身份执行命令。
在伪装为另一个用户时,函数 currentUser() 返回该用户的名称, 而函数 authenticatedUser() 返回实际通过身份验证的用户名称。
示例
SELECT currentUser(), authenticatedUser(); -- outputs "default default"
CREATE USER james;
EXECUTE AS james SELECT currentUser(), authenticatedUser(); -- outputs "james default"