Estou enfrentando um problema quando tento me conectar à instância do SQL Express do cliente para o servidor. O servidor registra um erro:
O handshake SSPI falhou com o código de erro 0x8009030c, estado 14 ao estabelecer uma conexão com segurança integrada; A conexão foi encerrada. Motivo: Falha em AcceptSecurityContext. O código de erro do Windows indica a causa da falha. A tentativa de logon falhou
[CLIENTE: 192.168.245.50]
A conta com a qual faço logon é sysadmin e tem todas as permissões possíveis no banco de dados ao qual está tentando se conectar, mas ainda falha. Mas se eu adicionar o usuário que está tentando se conectar ao grupo de administradores locais, funcionará. Esta não é uma boa solução, não quero que todos os usuários sejam administradores locais no servidor. Por que o usuário precisa ser administrador local?
E acho que o SPN está configurado corretamente.
Está tudo no mesmo domínio e usando contas de domínio. A Autenticação do Windows é usada para login.
Não deve haver problema com a conectividade com o DC. O nome das instâncias nomeadas é usado (funciona se o usuário do domínio for administrador local).
Log do log de erros do SQL:
03/09/2015 15:22:47,Logon,Desconhecido,Falha no login. O login é de um domínio não confiável e não pode ser usado com a autenticação do Windows. [CLIENTE: 192.168.245.50] 09/03/2015 15:22:47,Logon,Desconhecido,Erro: 18452 Gravidade: 14 Estado: 1. 09/03/2015 15:22:47,Logon,Desconhecido,Falha no handshake SSPI com código de erro 0x8009030c estado 14 ao estabelecer uma conexão com segurança integrada; A conexão foi encerrada. Razão: Falha em AcceptSecurityContext. O código de erro do Windows indica a causa da falha. A tentativa de logon falhou [CLIENTE: 192.168.245.50] 03/09/2015 15:22:47,Logon,Desconhecido,Erro: 17806 Gravidade: 20 Estado: 14.
Log do cliente tentando se conectar:
LSRetailPosis.POS.Program: System.Data.SqlClient.SqlException (0x80131904): falha no logon. O login é de um domínio não confiável e não pode ser usado com a autenticação do Windows. em System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) em System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1 nova tentativa, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) em 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 nova tentativa, DbConnectionOptions userOptions) em System.Data.SqlClient.SqlConnection.TryOpentionSourceInner1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 nova tentativa) em System.Data.SqlClient.SqlConnection.Open() em LSRetailPosis.Settings.Database.CheckDatabaseExistence() em LSRetailPosis.Settings.Database.CheckDatabaseSettings() em LSRetailPosis.Settings.ApplicationSettings.InitializeSettings(String[] args) em LSRetailPosis.POS.Program.InitializeAndLoadPOS(String[] args, propriedade booleana, SplashScreenForm splashScreenForm) em LSRetailPosis.POS.Program.Main(String[] args) ClientConnectionId:d57c7fd9-4a47-41b7-af07-ed93627d2930.
Eu encontrei uma solução para este problema.
Adicionei o usuário do domínio a: Política de segurança local -> Políticas locais -> Atribuição de direitos do usuário -> Acessar este computador pela rede