Come aggiornare il gruppo di sicurezza AD con le autorizzazioni SQL Server


12

Sto usando SQL Server 2008 su Small Business Server 2003; il client utilizza WinXP.

Ho aggiunto un utente al mio gruppo di sicurezza di Active Directory; Perché questo utente non può accedere immediatamente al database? Sembra che ci sia un ritardo prima che l'utente venga riconosciuto in SQL Server.

Sto usando i gruppi di sicurezza AD per le autorizzazioni espressamente, quindi non ho bisogno di aggiungere singoli utenti in SQL Server. Così efficacemente non ho bisogno di fare altro che aggiungere l'utente al gruppo di sicurezza AD per consentire l'accesso.

Ma per qualche ragione SQL Server non riconosce immediatamente l'aggiunta. L'ho visto un numero di volte. Aggiungo l'utente al gruppo ma quell'utente non può accedere ai dati fino al giorno successivo. Sembra che non interroghi l'Active Directory in tempo reale. Puoi confermare che è così?

Cosa devo fare in modo che il server SQL "aggiorni" l'elenco degli utenti da Active Directory?


In SQL Server 2008 Management Studio, ho aggiunto un accesso al server utilizzando il gruppo di sicurezza e sul database ho creato un utente mappato a tale accesso. Funziona benissimo!
D_Bester,

Tuttavia, dopo aver aggiunto un nuovo utente al gruppo di sicurezza, non è stato possibile accedere al database specificato. Quell'utente ha accesso al server usando un altro gruppo, quindi testare semplicemente la connessione al server SQL ha funzionato bene. Stavo aggiungendo una connessione a SQL Server per l'utente (sul suo computer). Quando ho specificato il database volevo che dicesse che il database non era disponibile.
D_Bester,

Controllo spot vari controller di dominio Vedo che la replica è effettivamente terminata dopo 15 minuti, ma SQL ignora il nuovo utente nel gruppo AD. Il riavvio del server SQL risolve il problema, quindi attendere 24 ore. Deve essere un modo migliore.
Aaron Auseth,

Risposte:


12

L'utente deve disconnettersi dalla propria workstation e riconnettersi. Ecco perché le modifiche sembrano avere effetto il giorno successivo. La ragione di ciò è che quando l'utente accede il giorno successivo riceve un nuovo token dal controller di dominio e questo token contiene l'elenco dei gruppi di dominio di cui sono membri. Questo token con l'elenco dei gruppi di dominio viene aggiornato solo quando l'utente accede al proprio computer, quindi se l'utente non si disconnette mai il token non viene mai aggiornato.

Esistono anche ritardi nella replica di domini multi-sito che devono essere presi in considerazione se i controller di dominio si trovano in posizioni fisiche diverse.


1
Esiste un comando o uno script che è possibile eseguire sulla workstation per "aggiornare" il suo token AD in modo che possa "sapere" che l'utente è ora un membro del nuovo gruppo di domini e quindi evitare il ritardo? - Aggiornamento: sembra che una persona abbia consigliato klist purgesu dba.stackexchange.com/a/44922/29371 , ma con l'avvertenza che potrebbe rompere altri accessori di risorse memorizzati nella cache che l'utente dovrebbe ristabilire / riconnettere.
NateJ,

@mrdenny Qualche consiglio su come gestirlo per gli account di servizio? Eseguiamo tutte le istanze SQL negli account di servizio e utilizziamo questi account di servizio per le connessioni tra i server SQL e per SSRS, ecc. In qualsiasi momento, abbiamo molte connessioni tra le macchine. Non possiamo davvero disconnettere tutte le connessioni e fare un nuovo login da qualche parte per ottenere nuove informazioni sul gruppo AD.
SomeGuy

Per gli account di servizio, tutto ciò che puoi fare è riavviare il servizio sul computer che necessita dei nuovi diritti.
mrdenny,

5

Quando un utente accede, gli viene assegnato un token di sicurezza che include tutte le informazioni sull'appartenenza al gruppo.

Questo token persiste fino a quando l'utente non si disconnette, a quel punto viene scartato, anche se nel frattempo apporti modifiche all'appartenenza al gruppo in AD. Le modifiche apportate avranno effetto solo al successivo accesso dell'utente e alla ricezione di un nuovo token di sicurezza.

È possibile riprodurre lo stesso scenario quando si assegnano autorizzazioni su un file system, ad esempio; è un comportamento di Active Directory, non un comportamento di SQL Server.


1

Quindi ottenere risultati immediati sarebbe ottenere nuove credenziali ogni volta eseguendo un cmd / script come:

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

usando cmd.exe (non powershell, non sono riuscito a ottenere la quotazione corretta).

In questo modo otterrai un nuovo token ogni volta (ma devi inserire il tuo pwd). Probabilmente potresti fare qualcosa anche con un testo della password salvato, se le cose fossero troppo onerose.

Comunque, funziona per me e spero che aiuti qualcun altro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.