SQL USER_NAME() Windows身份验证

3
当我使用Windows身份验证登录SQL Management Studio并运行以下命令时:
SELECT USER_NAME()

我看到的结果是dbo。

我原本以为它会显示我的用户....

我更关注为什么它返回dbo的解释。

3个回答

7
请使用这个。
SELECT SUSER_NAME()

USER_NAME:根据指定的标识号返回数据库用户名。

SUSER_NAME:返回用户的登录标识名。


我更感兴趣的是为什么它显示dbo。你知道为什么它返回dbo吗? - pdiddy
@pdiddy - 你期望它返回什么?这个函数将返回一个数据库用户名 - 即来自sysusers的值。 - Martin Smith
2
@pdiddy - 当您登录服务器时,需要提供服务器登录凭据。您不会以特定的数据库用户身份登录。这些服务器登录映射到0..n个数据库用户。如果您是sysadmin,则会自动映射到所有数据库中的dbo用户。 - Martin Smith
你是机器上的管理员吗? - Martin Smith
哦,那就可以解释了。谢谢!所以唯一的方式就是模拟数据库用户。 - pdiddy
显示剩余2条评论

3

Try:

SELECT SUSER_SNAME()


@anish - 不太准确。我说的是 SUSER_NAME,不确定它与 SUSER_SNAME 有何不同。 - Martin Smith
我的是suser_sname;它们看起来是可以互换的。马丁的答案应该被视为正确。 - Zamboni
我在一些SQL Server 2000的帮助文档中进行了快速检查,并发现以下评论:当在Microsoft® SQL Server™ 2000中使用时,SUSER_NAME始终返回NULL。此系统内置函数仅用于向后兼容。请改用SUSER_SNAME。 - Zamboni
SQL Server 2008文档中没有提到弃用。不知道他们是否决定保留它。 - Martin Smith

2

我曾经遇到过类似的问题,这个问题是由于用户ID创建方式引起的。

在安全性下选择登录ID -> 右键属性 -> 服务器角色。确保你只点击了“Public”,而没有点击“sysadmin”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接