考虑这个 T-SQL:
CREATE USER my_test_user WITHOUT LOGIN;
SELECT USER_NAME(), USER, SUSER_SNAME(),SYSTEM_USER, suser_name();
EXECUTE AS USER = 'my_test_user' WITH NO REVERT;
SELECT USER_NAME(), USER, SUSER_SNAME(),SYSTEM_USER, suser_name();
我正在考虑将这些帐户WITHOUT LOGIN
用于审计目的。基本上,我的“获取数据库连接”代码返回一个EXECUTE AS USER...WITH NO REVERT
已经执行的连接。
问题是我无法从任何这些用户名函数中获得一致的结果。两行输出是:
dbo dbo original_user original_user original_user my_test_user my_test_user S-1-9-3-XXXXX.. S-1-9-3-XXXXX.. S-1-9-3-XXXXX..
这些USER
函数在 之后产生正确的输出'EXECUTE AS'
,但事先它们显示的是 dbo 而不是用户名SUSER
函数正好相反——它们最初是正确的,但在模拟之后它们显示了某种 ID
SUSER_SNAME的 MSDN 文档明确给出了一个应该起作用的示例。
更新:我正在寻找的是一个函数,它将在第一种情况下产生“original_user”,在第二种情况下产生“my_test_user”。