Eu tenho um par de nós do Microsoft SQL Server 2016 em um grupo de disponibilidade sempre ativa. Estou tentando executar um BULK INSERT
(usando uma consulta do SQL Server 2016 Management Studio) em um arquivo localizado em um Cluster de Failover do Servidor de Arquivos do Windows Server 2016, mas recebo o seguinte erro:
Mensagem 4861, nível 16, estado 1
Não é possível carregar em massa porque o arquivo "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" não pôde ser aberto. Código de erro do sistema operacional 5 (acesso negado.).
Isso ocorrerá independentemente se eu usar o nome do nó ativo ( nas2.my.domain
) ou o ouvinte do cluster de failover ( nas.my.domain
).
Depois de olhar ao redor, descobri que isso se devia ao fato de o SQL Server não poder representar a conta de usuário com a qual estou conectado devido a nuances BULK INSERT
.
Se você se conectar ao SQL Server usando a Autenticação do Windows, a conta de serviço do SQL Server tentará representar sua conta de usuário ao se conectar ao servidor de arquivos. Se você se conectar usando a autenticação do SQL Server, ele se conectará ao servidor de arquivos como a conta de serviço do SQL Server.
Se a delegação e a representação não estiverem configuradas corretamente (o estado padrão), o serviço do SQL Server não poderá representar sua conta de usuário e voltará a tentar se conectar ao servidor de arquivos como um usuário anônimo.
Isso pode ser confirmado consultando o log de eventos de segurança no servidor de arquivos. Esses fatos, juntamente com um guia sobre a configuração de delegação sem restrições e restritas, estão documentados nesses links:
Eu tentei seguir as instruções no guia do thqqude , mas ele ainda não está funcionando.
O banco de dados que estou tentando BULK INSERT
não faz parte do grupo de disponibilidade, portanto, apenas o nó MSSQL1 deve ser relevante. O servidor de arquivos estava ativo no nó NAS2. A verificação do log de eventos no servidor de arquivos mostra que ele ainda está sofrendo com esse problema e o SQL Server está tentando se autenticar no servidor de arquivos como um usuário anônimo, em vez de se passar por minha conta de usuário.
Alguém sabe o que está errado? Ou se algo mudou no SQL Server 2016 para tornar esses guias obsoletos?
- Entrada de log de eventos de segurança do servidor de arquivos
- Delegação de conta de serviço
- SPNs da conta de serviço
- Delegação de conta de computador nº 1 do SQL Server
- Servidor de arquivos nº 2 da conta de computador SPNs
- Objetos de Diretiva de Grupo
sys.dm_exec_connections
- Kerberos
Posso confirmar que esse GPO foi aplicado ao MSSQL1 via gpresult.exe /R
e os nós do SQL e do servidor de arquivos foram reinicializados posteriormente para garantir que todos os caches fossem liberados.
Respostas:
Sua configuração parece sólida. SPNs e delegação estão configurados como eu mesmo teria feito.
A única coisa que você não explicou são as permissões de arquivo / compartilhamento. É aqui que entra minha solução.
Solução 1 (conta pessoal)
Solução 2 (conta de serviço do SQL Server)
Permissões de inserção em massa
Referência: BULK INSERT (Transact-SQL)
fonte
Na minha experiência com delegação, a Conta de Serviço do SQL Server precisa de permissões apropriadas para o compartilhamento que está tentando acessar em seu nome. Você ajustou essas permissões? Eu acho que apenas leitura seria suficiente antecipadamente.
fonte