SQL Server – Usar Autenticação Windows fora do Dominio

Numa estrutura típica duma aplicação em rede com base de dados SqlServer em que se usa um servidor de Active Directory para centralizar os Utilizadores e acessos, tudo funciona bem até aparecer uma máquina que por alguma razão não podemos ou não dá para colocar no domínio. Na situação em que tive que implementar este “truque” tratou-se de um pc com Windows Vista Home Basic que será usado por um utilizador que está no Active Directory e que têm que usar um pc que está no domínio e esporadicamente usa um portátil com Vista Home Basic (que não dá para colocar no Domínio).

Para implementar este “truque” tudo o que precisamos é usar funções fornecidas pelo próprio Windows!! vou enumerar os passos para tornar isto possível!

1º – Criar um atalho para aplicação

2º – Nas propriedades do atalho acrescentar o texto seguinte antes do caminho do executável:

runas /user:NomeDoDominio\NomeDoUtilizador /netonly

 

3º – Confirmar que o destino do atalho está com o texto anterior seguido do caminho do executável onde queremos usar a autenticação Windows.

4º – Ao executar o atalho o utilizador só terá que fornecer a sua password do Active Directory e usar  normalmente a aplicação como se o pc estivesse no domínio!!!!

5º – para embelezar a “coisa” podemos atribuir ao atalho o mesmo icon da aplicação que o utilizador já conhece!! (durante o processo o atalho vai assumir o icon do executável do RunAs).

6º – caso o windows não assuma o comando runas, colocar o caminho completo do executável que está na pasta system32 do Windows.

Ficheiros de Log do Active Directory

A propósito do artigo anterior fica a lista da localização dos vários ficheiros de log criados na implementação de politicas de Grupo na maquina cliente, estas tabelas foram copiadas na integra do site da Microsoft (copiei para evitar futuros 404 ao aceder á página da MS) !!!!

Output from: Is located in this file: Enable verbose logging by adding this key or value”¦ “¦to this registry key

Group Policy core (UserEnv) and registry CSE

%windir%\debug\usermode
\UserEnv.log

UserEnvDebugLevel = REG_DWORD 30002

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Winlogon

Security CSE

%windir%\security\logs
\winlogon.log

ExtensionDebugLevel = REG_DWORD 0x2

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Winlogon
\GpExtensions
\{827d319e-6eac-11d2-a4ea-00c04f79f83a}\

Folder Redirection CSE

windir%\debug\usermode
\fdeploy.log

FdeployDebugLevel = Reg_DWORD 0x0f

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Diagnostics

Software Installation CSE

%windir%\debug\usermode
\appmgmt.log

Appmgmtdebuglevel=dword:0000009b

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Diagnostics

Windows Installer
(deployment-related actions)

%windir%\temp
\MSI*.log

Logging = voicewarmup

Debug = DWORD: 00000003

HKEY_LOCAL_MACHINE
\Software
\Policies
\Microsoft
\Windows
\Installer

Windows Installer
(user-initiated actions)

%temp%
\MSI*.log

Logging = voicewarmup

Debug = DWORD: 00000003

HKEY_LOCAL_MACHINE
\Software
\Policies
\Microsoft
\Windows
\Installer

E já agora os do Servidor:

Output from: Is located in this file: Enable verbose logging by adding this keyword”¦ “¦to this registry key

GPMC:
error logging only

%temp%\gpmgmt.log

gpmgmttracelevel=1

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Diagnostics

GPMC:
error and verbose logging

%temp%\gpmgmt.log

gpmgmttracelevel=2

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Diagnostics

GPMC:
Output only to log file (not to debugger)

%temp%\gpmgmt.log

gpmgmtlogfileonly=1

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Diagnostics

Group Policy Object Editor:
Core-specific entries

%windir%\debug\usermode
\gpedit.log

GPEditDebugLevel = REG_DWORD 0x10002

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Winlogon

Group Policy Object Editor:
CSE-specific entries

%windir%\debug\usermode

\gptext.log

GPTextDebugLevel = REG_DWORD 0x10002

HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows NT
\CurrentVersion
\Winlogon

Group Policy Não Instala Software Gerido

Numa instalação de Active Directory com várias Politicas de Grupo configuradas, tudo funcionava excepto a instalação de software, isto é todas as configurações que alterava em cada politica no próximo reboot ou no próximo “gpupdate /force” entravam em vigor excepto a instalação de software gerido, o que me levou a crer que não era erro de configuração é que isto não acontecia em todos os computadores do dominio.

Depois de pesquisar todas as combinações possiveis  do erro em Inglês e em Português no Google não conseguia achar a solução, comecei então a ler os logs das politicas de grupo dos computadores em que verifiquei o problema, e o sintoma era comum nenhum encontra o controlador principal do dominio no arranque, no log em todos tinha o mesmo erro (está a bold):

USERENV(2c4.688) 12:58:22:109 ProcessGPOs: Forced option changed policy mode.
USERENV(2c4.634) 12:58:23:593 ProcessGPOs: Forced option changed policy mode.
USERENV(2c4.664) 12:58:23:718 PolicyChangedThread: UpdateUser failed with 6.
USERENV(2c4.2c8) 12:59:21:640 CUserProfile::CleanupUserProfile: Ref Count is not 0
USERENV(2c4.2c8) 12:59:21:656 CUserProfile::CleanupUserProfile: Ref Count is not 0
USERENV(2c4.2c8) 12:59:21:656 CUserProfile::CleanupUserProfile: Ref Count is not 0
USERENV(2c4.600) 12:59:23:812 ProcessGPOs: The DC for domain REMOVIONOMEDODOMINIO is not available at startup. retrying
USERENV(2c4.600) 12:59:44:031 ProcessGPOs: DC for domain REMOVIONOMEDODOMINIO is reachable after retries.
USERENV(2c4.600) 13:05:20:265 ProcessGPOs: Extension Instalação de software ProcessGroupPolicy failed, status 0x643.
USERENV(2c4.1a8) 14:31:58:924 PolicyChangedThread: UpdateUser failed with 0.
USERENV(2c4.f3c) 14:41:06:558 PolicyChangedThread: UpdateUser failed with 6.
USERENV(2c4.f80) 14:42:15:814 PolicyChangedThread: UpdateUser failed with 0.

Depois de vários testes a causa deste problema está no carregamento da rede, que não sei se será dos drivers ou das placas de rede demoram mais a ficar disponiveis no sistema e na altura que o sistema vai procurar o PDC, não o encontra!!

Solução: Alterar o tempo que o Windows (cliente) demora até concluir que não encontra o DC, por outras palavras mudar o timeout, para isso basta criar a seguinte chave no registry:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GpNetworkStartTimeoutPolicyValue

do tipo DWORD e com valor decimal de 30, caso o problema persista deve-se aumentar o valor até o mesmo estar resolvido.