我在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作为应用程序运行时,看看它给予网络服务权限的主要角色。 无论如何,这是星期五晚上,我将不得不在星期一继续。干杯!
答案 0 :(得分:1)
如果您要验证实际登录名,请使用system_user或suser_sname()
关于user_name()的在线图书:
*如果Windows主体通过组中的成员身份访问数据库,则USER_NAME将返回Windows主体的名称而不是组。*
关于问题的第二部分,不要让它作为dbo运行......
在这里阅读definition of dbo,但简而言之,您实例上任何系统管理员都将成为dbo。
答案 1 :(得分:0)
它在我尝试的大多数服务器上返回“dbo”。
在一台服务器上它返回“guest”。
检查一下。