Jak odświeżyć grupę zabezpieczeń AD na uprawnieniach serwera Sql

12

Używam Sql Server 2008 na Small Business Server 2003; klient używa WinXP.

Dodałem użytkownika do mojej grupy zabezpieczeń Active Directory; Dlaczego ten użytkownik nie może natychmiast uzyskać dostępu do bazy danych? Wygląda na to, że istnieje opóźnienie, zanim użytkownik zostanie rozpoznany w Sql Server.

Korzystam z grup zabezpieczeń AD w celu uzyskania wyraźnych uprawnień, dzięki czemu nie muszę dodawać poszczególnych użytkowników na serwerze Sql Server. Tak skutecznie nie muszę nic robić, tylko dodać użytkownika do AD Security Group w celu przyznania dostępu.

Ale z jakiegoś powodu Sql Server nie rozpoznaje natychmiast tego dodatku. Widziałem to wiele razy. Dodaję użytkownika do grupy, ale ten użytkownik nie może uzyskać dostępu do danych do następnego dnia. Wygląda na to, że nie odpytuje Active Directory w czasie rzeczywistym. Czy możesz to potwierdzić?

Co muszę zrobić, aby Sql Server „odświeżył” listę użytkowników z Active Directory?

D_Bester
źródło
W SQL Server 2008 Management Studio dodałem login serwera przy użyciu Security Group i w bazie danych utworzyłem użytkownika zamapowanego na ten login. To działa świetnie!
D_Bester
Jednak po dodaniu nowego użytkownika do grupy zabezpieczeń nie mógł on uzyskać dostępu do określonej bazy danych. Ten użytkownik ma dostęp do serwera za pomocą innej grupy, więc po prostu testowanie połączenia z Sql Server działało dobrze. Dodałem połączenie z Sql Server dla użytkownika (na jej komputerze). Kiedy określiłem bazę danych, chciałem powiedzieć, że baza danych jest niedostępna.
D_Bester
Sprawdzanie na miejscu różnych kontrolerów domeny Widzę, że replikacja rzeczywiście kończy się po 15 minutach, ale SQL ignoruje nowego użytkownika w grupie AD. Ponowne uruchomienie serwera SQL rozwiązuje problem, więc czeka 24 godziny. To musi być lepszy sposób.
Aaron Auseth

Odpowiedzi:

12

Użytkownik musi się wylogować ze stacji roboczej i zalogować się ponownie. Właśnie dlatego zmiany wydają się obowiązywać następnego dnia. Powodem tego jest to, że gdy użytkownik loguje się następnego dnia, otrzymuje nowy token od kontrolera domeny, a ten token zawiera listę grup domen, których jest członkiem. Ten token z listą grup domen jest aktualizowany tylko wtedy, gdy użytkownik loguje się na swoim komputerze, więc jeśli użytkownik nigdy się nie wyloguje, token nie jest nigdy aktualizowany.

Istnieją również opóźnienia replikacji domen dla wielu witryn, które należy wziąć pod uwagę, jeśli kontrolery domeny znajdują się w różnych fizycznych lokalizacjach.

mrdenny
źródło
1
Czy istnieje polecenie lub skrypt, który można uruchomić na stacji roboczej, aby „odświeżyć” swój token AD, aby mógł „wiedzieć”, że użytkownik jest teraz członkiem nowej grupy domen, a tym samym uniknąć opóźnienia? - Aktualizacja: wydaje się, że jedna osoba zalecana klist purgena dba.stackexchange.com/a/44922/29371 , ale z zastrzeżeniem, że może to uszkodzić inne buforowane urządzenia dostępowe zasobów, które użytkownik musiałby przywrócić / ponownie połączyć.
NateJ
@mrdenny Wszelkie zalecenia dotyczące obsługi tego w przypadku kont serwisowych? Wszystkie instancje SQL uruchamiamy w ramach kont usług i używamy tych kont usług do połączeń między serwerami SQL, SSRS itp. W dowolnym momencie mamy wiele połączeń między komputerami. Nie możemy tak naprawdę rozłączyć wszystkich połączeń i zrobić nowego logowania, aby uzyskać nowe informacje o grupie AD.
SomeGuy,
W przypadku kont serwisowych wszystko, co możesz zrobić, uruchom ponownie usługę na komputerze, który potrzebuje nowych uprawnień.
mrdenny
5

Gdy użytkownik loguje się, otrzymuje token bezpieczeństwa, który zawiera wszystkie informacje o członkostwie w grupie.

Ten token utrzymuje się, dopóki użytkownik się nie wyloguje - w tym momencie jest odrzucany - nawet jeśli w międzyczasie wprowadzisz zmiany w członkostwie grupy w AD. Wprowadzone zmiany zaczną obowiązywać dopiero po następnym zalogowaniu się użytkownika i otrzymaniu nowego tokena zabezpieczającego.

Możesz na przykład odtworzyć ten sam scenariusz, przypisując uprawnienia do systemu plików; jest to zachowanie AD, a nie zachowanie SQL Server.

Jon Seigel
źródło
1

Otrzymasz natychmiastowe wyniki za każdym razem, aby uzyskać nowe poświadczenia, uruchamiając skrypt cmd / taki jak:

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

używając cmd.exe (nie PowerShell, nie mogłem uzyskać poprawnego cytowania).

W ten sposób otrzymasz nowy token za każdym razem (ale musisz wpisać swój pwd). Prawdopodobnie możesz zrobić coś z zapisanym tekstem hasła, jeśli sprawy byłyby zbyt uciążliwe.

W każdym razie, działa dla mnie i mam nadzieję, że pomoże komuś innemu.

Karl
źródło