2011-06-11 39 views
2

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

我如何防止网络服务运行作为我的数据库DBO?

作为一个方面说明,我跑我的Windows 7(IIS 7),SQL Server 2008的计算机上的相同的代码和数据库,并将其返回"SELECT USER_NAME()"为“NT AUTHORITY \ NETWORK SERVICE”这正是我期待。是什么赋予了?

编辑:对不起,我没有修改这个帖子吧。我是新来的。正如我所说的那样,原来的登录名确实是网络服务,它以dbo的身份访问数据库,这是我没有想到的。网络服务帐户没有sysadmin角色或数据库的db_owner。但是,我查看了它的有效权限,它与系统管理员的权限类似。我确信网络服务不是本地管理员组的一部分,也不会运行SQL服务器本身。 仰望答案谷歌,我没碰到过有人用类似的情况,他们最终的应用,看看有什么主要作用它给网络服务权限运行时,查询sys.login_token。 不管怎么说,这是上周五尾盘,我得去继续周一。干杯!

+0

您是否验证其登录帐户实际上是2003服务器上使用SUSER_SNAME()运行? – RThomas 2011-06-11 02:22:57

回答

1

如果你想验证实际登录名,然后使用system_usersuser_sname()

从书本网上关于user_name()

*如果Windows主要通过会员的方式访问数据库的一组中, USER_NAME返回Windows主体,而不是组的名字。*

关于你问题的第二部分,从运行的DBO保持它...

请在这里阅读definition of dbo,但简而言之,任何对您实例的系统管理员都将是一个dbo。