SQL Server登录错误:用户“NT AUTHORITY\SYSTEM”登录失败

52

我已经创建了名为“schoolPool”的应用程序池,并将其分配给我的Web应用程序。该池的标识已设置为LocalSystem。 当我尝试从应用程序中访问数据库,即打开SQL连接时,我总是收到以下错误:

Login failed for user 'NT AUTHORITY\SYSTEM'


我尝试将NT AUTHORITY/SYSTEM添加到SSMS(SQL Server Management Studio)登录中,但它已经是一个主体,显示以下错误:
enter image description here


3
虽然这段话有一些年头了,但需要指出的是,将您的Web应用程序作为本地系统运行是一个非常糟糕的想法。无论被攻击者获取了多小的权限,现在都可以立刻获得机器上的完全管理员访问权限。请谨慎对待。 - Joel Coehoorn
7个回答

145

允许NT AUTHORITY/SYSTEM作为sysadmin角色的服务器。

输入图像说明


如果NT AUTHORITY\SYSTEM不存在怎么办?我手动创建了它,但仍然出现相同的错误。 - Steve Smith
1
@Steve Smith 的链接可以帮助设置 NT AUTHORITY\SYSTEM。 https://dev59.com/L2w05IYBdhLWcg3w_W5O - Sachin Sarola
在某些情况下,您需要进入“用户映射”,检查(选择)数据库并确保用户正确。 - agileDev

59

我对应用程序的设置进行了大量调整,在Windows 8.1的IIS中更改了应用程序池的身份(Identity)为LocalSystem、LocalService、NetworkService和ApplicationPoolIdentity。然而,所有这些都未能解决我登录数据库时遇到的问题。
最终,我将池身份设置为LocalSystem,并思考它为什么可能会阻止“NT AUTHRITY\SYSTEM”打开与我的数据库的连接。我以“管理员”身份打开SQL Server Management Studio,并在“登录”部分下检查了NT AUTHORITY \ SYSTEM的服务器角色。该用户的默认服务器角色是public我还检查了sysadmin并刷新了我的Web应用程序表单。这次成功了! 现在一切正常运行。


这是唯一有效的方法。将应用程序池更改为本地系统,然后将sysadmin添加到DB中的该用户。 - Alok Rajasukumaran

5

还有一种解决方法。您需要打开命令提示符(cmd)并输入以下内容:

sqlcmd -S(服务器名称)

select name from sys.server_principals where name = 'NT AUTHORITY\SYSTEM'

go

SP_ADDSRVROLEMEMBER 'NT AUTHORITY\SYSTEM','SYSADMIN'

go

第一行代码将让你在本机上访问SQL服务器,第二行将会显示 NT AUTHORITY\SYSTEM,而存储过程 addsrvrolemember 会将 sysadmin 添加到其中。注意,必须按照下面的代码进行输入。


3
重新运行以下查询,它将把“NT SERVICE\MSSQLSERVER”分配给sysadmin。
EXEC master..sp_addsrvrolemember @loginame = N'NT SERVICE\MSSQLSERVER', @rolename = N'sysadmin'

谢谢,EXEC master..sp_addsrvrolemember "@loginame" = N'NT AUTHORITY/SYSTEM',"@rolename" = N'sysadmin' - Mohsen.Sharify

2
Musakkhir的授权sysadmin的答案在安全方面似乎考虑不周,而Pinal的答案则涉及赋予未知进程db_owner权限,几乎肯定是过度的。我自己通过简单地授予“public”权限来“解决”这个问题,通常只允许连接,但不允许其他任何操作,甚至包括SELECT。这样可以消除登录错误并停止洪泛错误日志,因为现在已经登录,但是无论什么未知进程正在连接,它仍然无法执行任何操作。

如果您担心的是连接过程,而不是授予权限,那么最好使用SQL Server Profiler来识别连接的进程。 - John Zabroski

1

在connectionStrings中,您应该提供SQL Server身份验证登录的用户ID和密码,格式为User ID="用户名";pwd="您的密码"。您可以使用以下查询: CREATE LOGIN login name WITH PASSWORD = '密码' ; GO


1
请按照以下步骤操作:在数据库登录后,进入“安全性”-->“登录名”-->“NT AUTHORITY\SYSTEM”(右键单击属性)-->“服务器角色”-->勾选“sysadmin”。

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