SQL Server网络服务为dbo

时间:2011-06-11 00:09:34

标签: sql-server networking service

我在Windows Server 2003上运行SQL Server 2005.我注意到当我使用包含"SELECT USER_NAME()"的命令从我的Web应用程序(运行带有网络服务的IIS 6.0运行应用程序池)查询服务器时,我得到了“dbo” “而不是"NT AUTHORITY\NETWORK SERVICE"。我甚至没有将NETWORK SERVICE作为dbo运行在我的数据库上。

如何防止NETWORK SERVICE在我的数据库上以dbo身份运行?

作为旁注,我使用Windows 7(IIS 7),SQL Server 2008在我的PC上运行相同的代码和数据库,并将"SELECT USER_NAME()"作为“NT AUTHORITY \ NETWORK SERVICE”返回,这正是我的期望。是什么赋予了?

编辑:抱歉,我没有对此帖子进行更改。我是新来的。正如我所说,原始登录确实是网络服务,它正在以dbo访问数据库,这是我没想到的。网络服务帐户没有sysadmin角色或数据库的db_owner。但是,我查看了它的有效权限,它类似于系统管理员的权限。我确保网络服务不是本地管理员组的一部分,并且它本身没有运行SQL服务器服务。 查找谷歌的答案,我确实遇到了类似情况的人,他们最终查询sys.login_token作为应用程序运行时,看看它给予网络服务权限的主要角色。 无论如何,这是星期五晚上,我将不得不在星期一继续。干杯!

2 个答案:

答案 0 :(得分:1)

如果您要验证实际登录名,请使用system_usersuser_sname()

关于user_name()的在线图书:

*如果Windows主体通过组中的成员身份访问数据库,则USER_NAME将返回Windows主体的名称而不是组。*

关于问题的第二部分,不要让它作为dbo运行......

在这里阅读definition of dbo,但简而言之,您实例上任何系统管理员都将成为dbo。

答案 1 :(得分:0)

它在我尝试的大多数服务器上返回“dbo”。

在一台服务器上它返回“guest”。

检查一下。

http://msdn.microsoft.com/en-us/library/ms188014.aspx