gem*_*igo 10 sql-server-2008 security
最近我一直在使用 EXECUTE AS LOGIN 来检查某个人是否可以或不能在我们的一个数据库中使用表函数。测试表明他可以,但他一再报告失败。
该人使用登录“WEB”连接到数据库,并且他在该数据库中拥有与登录“WEB”关联的用户“WEB”,因此我尝试了以下脚本:
-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
和
-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
第一部分很好,结果如下:
网站 | 网站 | 网站 | 网络
但是第二个结果有点令人困惑:
dbo | 网站 | 网站 | 网络
EXECUTE AS USER 和 EXECUTE AS LOGIN 之间的区别是什么导致第二个失败?此外,当然,第一个是数据库级别,第二个是服务器级别的模拟,这是我所知道的,这里不解释情况。
sysadmin组的成员始终映射到dbo,即使它在数据库中具有显式用户。所以看起来登录名WEB是 的成员sysadmin,因此在第二种情况下USER_NAME()正确返回dbo。
| 归档时间: |
|
| 查看次数: |
24695 次 |
| 最近记录: |