【发布时间】:2020-07-15 05:21:09
【问题描述】:
我有一个用户,我通过以下方式授予访问凭据的权限:
GRANT ALTER ANY CREDENTIAL TO userA
当我使用该用户登录时,以下内容会返回给我数据
SELECT * FROM sys.credentials
我可以看到我拥有 SERVER 级别的权限。这可以通过做来验证
SELECT * FROM fn_my_permissions (NULL, 'SERVER')
使用另一个用户,比如 userB,我通过这样做来模拟 userA
GRANT IMPERSONATE ON USER::userA TO userB
在存储过程中,当我以 userB 身份登录时,我将上下文切换到 userA
EXECUTE AS user = 'userA'
SELECT user_name() AS ContextUserName
SELECT * FROM fn_my_permissions (NULL, 'SERVER')
SELECT * FROM sys.credentials
SELECT * FROM fn_my_permissions (NULL, 'SERVER') 不会返回给我 ALTER ANY CREDENTIAL 权限。SELECT * FROM sys.credentials 不会返回任何值。SELECT user_name() 会返回给我 userA。
这里有什么我错过的吗?为什么我不能像 userA 那样从 sys.credentials 中获取数据?
谢谢!
【问题讨论】:
标签: sql-server tsql impersonation execute-as