我已经创建了名为“schoolPool”的应用程序池,并将其分配给我的Web应用程序。该池的标识已设置为LocalSystem。
当我尝试从应用程序中访问数据库,即打开SQL连接时,我总是收到以下错误:
Login failed for user 'NT AUTHORITY\SYSTEM'
我尝试将NT AUTHORITY/SYSTEM添加到SSMS(SQL Server Management Studio)登录中,但它已经是一个主体,显示以下错误:
我已经创建了名为“schoolPool”的应用程序池,并将其分配给我的Web应用程序。该池的标识已设置为LocalSystem。
当我尝试从应用程序中访问数据库,即打开SQL连接时,我总是收到以下错误:
Login failed for user 'NT AUTHORITY\SYSTEM'
我尝试将NT AUTHORITY/SYSTEM添加到SSMS(SQL Server Management Studio)登录中,但它已经是一个主体,显示以下错误:
允许NT AUTHORITY/SYSTEM作为sysadmin角色的服务器。
我对应用程序的设置进行了大量调整,在Windows 8.1的IIS中更改了应用程序池的身份(Identity)为LocalSystem、LocalService、NetworkService和ApplicationPoolIdentity。然而,所有这些都未能解决我登录数据库时遇到的问题。
最终,我将池身份设置为LocalSystem,并思考它为什么可能会阻止“NT AUTHRITY\SYSTEM”打开与我的数据库的连接。我以“管理员”身份打开SQL Server Management Studio,并在“登录”部分下检查了NT AUTHORITY \ SYSTEM的服务器角色。该用户的默认服务器角色是public。 我还检查了sysadmin并刷新了我的Web应用程序表单。这次成功了! 现在一切正常运行。
还有一种解决方法。您需要打开命令提示符(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
添加到其中。注意,必须按照下面的代码进行输入。
EXEC master..sp_addsrvrolemember @loginame = N'NT SERVICE\MSSQLSERVER', @rolename = N'sysadmin'
在connectionStrings中,您应该提供SQL Server身份验证登录的用户ID和密码,格式为User ID="用户名";pwd="您的密码"。您可以使用以下查询: CREATE LOGIN login name WITH PASSWORD = '密码' ; GO