Como atualizar o grupo de segurança do AD nas permissões do Sql Server

12

Estou usando o Sql Server 2008 no Small Business Server 2003; cliente está usando o WinXP.

Adicionei um usuário ao meu grupo de segurança do Active Directory; Por que esse usuário não pode acessar imediatamente o banco de dados? Parece que há um atraso antes que o usuário seja reconhecido no Sql Server.

Estou usando grupos de segurança do AD para permissões expressamente, para que não precise adicionar usuários individuais no Sql Server. Com tanta eficiência, não preciso fazer nada além de adicionar o usuário ao grupo de segurança do AD para conceder acesso.

Mas, por alguma razão, o Sql Server não reconhece imediatamente a adição. Eu já vi isso várias vezes. Eu adiciono o usuário ao grupo, mas esse usuário não pode acessar dados até o dia seguinte. Parece que não consulta o Active Directory em tempo real. Você pode confirmar que é isso?

O que preciso fazer para que o Sql Server "atualize" a lista de usuários do Active Directory?

D_Bester
fonte
No SQL Server 2008 Management Studio, adicionei um logon de servidor usando o Grupo de Segurança e no banco de dados criei um usuário mapeado para esse logon. Isso funciona muito bem!
26413 D_Bester
No entanto, depois que adicionei um novo usuário ao grupo de segurança, ele não pôde acessar o banco de dados especificado. Esse usuário tem acesso ao servidor usando outro grupo, portanto, basta testar a conexão com o Sql Server. Eu estava adicionando uma conexão ao Sql Server para o usuário (no computador dela). Quando especifiquei o banco de dados, queria que ele dissesse que o banco de dados não estava disponível.
22413 D_Bester
Verificação pontual de vários controladores de domínio Vejo que a replicação está realmente concluída após 15 minutos, mas o SQL ignora o novo usuário no grupo do AD. Reiniciar o servidor SQL resolve o problema, assim como esperar 24 horas. Deve ser uma maneira melhor.
Aaron Auseth 4/17/17

Respostas:

12

O usuário precisa fazer logoff da estação de trabalho e fazer logon novamente. É por isso que as alterações parecem entrar em vigor no dia seguinte. A razão para isso é que, quando o usuário faz logon no dia seguinte, ele recebe um novo token do controlador de domínio e esse token contém a lista de grupos de domínio dos quais é membro. Esse token com a lista de grupos de domínio é atualizado apenas quando o usuário efetua login no computador; portanto, se o usuário nunca efetuar logoff, o token nunca será atualizado.

Também há atrasos na replicação de domínios em vários sites que precisam ser levados em consideração se os controladores de domínio estiverem em locais físicos diferentes.

mrdenny
fonte
1
Existe um comando ou script que pode ser executado na estação de trabalho para "atualizar" seu token do AD para que ele possa "conhecer" o usuário agora é membro do novo grupo de domínio e, assim, evitar o atraso? --Update: parece que uma pessoa recomendou klist purgeem dba.stackexchange.com/a/44922/29371 , mas com a ressalva de que pode quebrar outros acessadores de recursos em cache aos quais o usuário teria que restabelecer / reconectar.
NateJ
@mrdenny Alguma recomendação sobre como lidar com isso em contas de serviço? Executamos todas as instâncias SQL em contas de serviço e usamos essas contas de serviço para conexões entre servidores SQL e SSRS, etc. A qualquer momento, temos muitas conexões entre máquinas. Não podemos desconectar todas as conexões e fazer um novo login em algum lugar para obter novas informações do grupo AD.
SomeGuy
Para contas de serviço, tudo o que você pode fazer é reiniciar o serviço na máquina que precisa dos novos direitos.
mrdenny
5

Quando um usuário faz logon, ele recebe um token de segurança que inclui todas as informações sobre a associação ao grupo.

Esse token persiste até que o usuário efetue logoff - nesse ponto, ele será descartado - mesmo se você fizer alterações na associação ao grupo no AD nesse meio tempo. As alterações feitas somente terão efeito na próxima vez que o usuário fizer logon e receber um novo token de segurança.

Você pode reproduzir o mesmo cenário ao atribuir permissões em um sistema de arquivos, por exemplo; é um comportamento do AD, não do SQL Server.

Jon Seigel
fonte
1

Portanto, você obtém resultados imediatos, obtendo sempre novas credenciais executando um cmd / script como:

runas /netonly /user:domain\username "sqlcmd -S serverName -d dbname -q \"insert into testpermissions values (65)\""

usando cmd.exe (não PowerShell, não foi possível obter a citação correta).

Dessa forma, você receberá um novo token sempre e sempre (mas precisará inserir seu pwd). Provavelmente, você também pode fazer algo com um texto de senha salvo, se as coisas forem muito onerosas.

Enfim, funciona para mim e espero que ajude outra pessoa.

Karl
fonte