当我尝试从客户端连接到服务器的 SQL Express 实例时,我遇到了一个问题。服务器记录错误:
SSPI 握手失败,错误代码为 0x8009030c,在建立具有集成安全性的连接时状态为 14;连接已关闭。原因:AcceptSecurityContext 失败。Windows 错误代码指示失败的原因。登录尝试失败
[CLIENT: 192.168.245.50]
我登录的帐户是 sysadmin,并且对它尝试连接的数据库拥有所有可能的权限,但仍然失败。但是,如果我添加试图连接到本地管理员组的用户,它就可以工作。这不是一个好的解决方案,我不希望所有用户都是服务器上的本地管理员。为什么用户需要是本地管理员?
而且我认为 SPN 设置正确。
它都在同一个域中并使用域帐户。Windows 身份验证用于登录。
与 DC 的连接应该没有问题。使用命名实例名称(如果域用户是本地管理员,则它有效)。
从 SQL 错误日志中记录:
03/09/2015 15:22:47,登录,未知,登录失败。登录来自不受信任的域,不能与 Windows 身份验证一起使用。[客户端:192.168.245.50] 03/09/2015 15:22:47,登录,未知,错误:18452 严重性:14 状态:1。03/09/2015 15:22:47,登录,未知,SSPI 握手失败建立具有集成安全性的连接时出现错误代码 0x8009030c 状态 14;连接已关闭。原因:AcceptSecurityContext 失败。Windows 错误代码指示失败的原因。登录尝试失败 [CLIENT: 192.168.245.50] 03/09/2015 15:22:47,登录,未知,错误:17806 严重性:20 状态:14。
从尝试连接的客户端登录:
LSRetailPosis.POS.Program: System.Data.SqlClient.SqlException (0x80131904): 登录失败。登录来自不受信任的域,不能与 Windows 身份验证一起使用。在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,Boolean allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&connection)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1 次重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1 次重试,DbConnectionOptions userOptions)在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource)1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 次重试)在 System.Data.SqlClient.SqlConnection.Open() 在 LSRetailPosis.Settings.Database.CheckDatabaseExistence() 在 LSRetailPosis.Settings.Database.CheckDatabaseSettings() 在 LSRetailPosis.Settings.ApplicationSettings.InitializeSettings(String[] args) 在LSRetailPosis.POS.Program.InitializeAndLoadPOS(String[] args, Boolean owned, SplashScreenForm splashScreenForm) 在 LSRetailPosis.POS.Program.Main(String[] args) ClientConnectionId:d57c7fd9-4a47-41b7-af07-ed93627d2930。
我找到了解决这个问题的方法。
我将域用户添加到:本地安全策略 -> 本地策略 -> 用户权限分配 -> 从网络访问这台计算机