Dlaczego suser_name () nie odzwierciedla zmiany nazwy konta AD?

10

Jedna z nazw naszych użytkowników została legalnie zmieniona, dlatego zmieniliśmy ich nazwę użytkownika Active Directory, aby pasowała - z domeny \ stara nazwa na domenę \ nowa nazwa. Jednak gdy suser_sname () jest wywoływany przez tego użytkownika w procedurze składowanej, zwraca starą nazwę, a nie nową.

Googling doprowadził mnie do KB 946358, co sugeruje, że ich nazwa jest buforowana na serwerze i nie jest aktualizowana, prawdopodobnie dlatego, że suser_name () wywołuje LsaLookupSids. Jednak obejście tego artykułu obejmuje ponowne uruchomienie serwera, a nawet jeśli tak, nadal chciałbym zrozumieć problem.

Jeśli zmienię mój kontekst na kontekst, powróci poprawna nazwa:

EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name()   --returns 'domain\newname'

... Zakładałbym, że wywoła to również LsaLookupSids, a zatem zwróci niepoprawną nazwę. Wydaje się prawdopodobne, że tak naprawdę nie rozumiem mechanizmów, które tu działają.

Niektóre spostrzeżenia, które mogą mieć znaczenie:

  • Ten użytkownik nie ma wyraźnego loginu na serwerze. Ale są członkami grupy AD, która to robi. Zmieniona nazwa (domena \ nowa nazwa) pojawia się w zestawie wyników dla exec xp_logininfo 'domain\ADGroupName', 'members'; domena \ stara nazwa nie.

  • Użytkownik wywołuje suser_name () w ramach procedury składowanej, wywoływanej z zapytania tranzytowego w MDB programu Access 2003.

  • W przeszłości zmieniliśmy wiele nazw kont użytkowników, ale zaobserwowaliśmy ten problem tylko w ostatnim tygodniu (w zeszłym tygodniu wprowadzono dwie zmiany, oba wydają się wykazywać problem).

  • Na serwerze działa Sql Server 2008 SP3 x64 w wersji Windows 2008 R2 Datacenter.

Co się dzieje? Jako DBA, co mogę zrobić lub gdzie mogę to rozwiązać?

Wojownik Bob
źródło
Czy usługa MSSQLSERVER (lub jakakolwiek jest nazwa instancji) loguje się jako System lokalny lub prawdziwe Logowanie? Wartość może być buforowana w rejestrze konta, na którym działa wyszukiwanie. W twoim przypadku byłeś zalogowany i złożyłeś wniosek. Myślę, że może jeśli używasz zwykłego konta do uruchamiania programu SQL Server (jak należy), to może zaloguj się do SQL Server jako login „SQL Server”, a następnie uruchom swój EXECUTE ASi SELECT SUSER_NAME()przetestuj. Czy wypróbowałeś też SUSER_SNAME()jedną z pozostałych 100 odmian?
Solomon Rutzky
Spróbuj utworzyć login w instancji przy użyciu nowej nazwy. Nie wpłynie to na ich uprawnienia. Uruchom SUSER_SNAME(), należy to naprawić w tym momencie. Następnie możesz spróbować usunąć login i sprawdzić, czy zachowuje on nową nazwę.
Kenneth Fisher
@srutzky Jest to domyślna instancja MSSQLSERVER działająca na koncie domeny. Niestety nie mam hasła, aby się zalogować. Nie próbowałem jeszcze suser_sname () jako użytkownik, uważam, że jest taki sam jak suser_same (), jeśli nie podano żadnych argumentów. Warto spróbować - dzięki!
Warrior Bob
1
SQL Server dopasowuje wszystkie konta według identyfikatora SID - SQL lub domeny. Ponieważ identyfikatory SID domeny pochodzą z katalogu aktywnego, zmiana nazwy nie zmienia identyfikatora SID. Jeśli był buforowany, stara nazwa zostanie zwrócona. Jeśli login już istnieje, nazwa logowania zostanie zwrócona bez względu na to, czy jest to ta sama nazwa, czy nie, o ile identyfikatory SID są zgodne. To samo dotyczy użytkowników baz danych.
Sean Gallardy,
1
Można spróbować uruchomić ipconfig /flushdnsi ipconfig /registerdnsz wiersza polecenia, aby sprawdzić, czy pokonuje się ten problem.
RLF

Odpowiedzi:

2

Czy może to być związane z buforowaniem przy użyciu Kerberos? (choć przypuszczenie może być niepowiązane) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx

Normoe
źródło
1
Nie mogę powiedzieć na pewno, że to jest problem, ale wierzę w to lub coś w tym rodzaju. Ponowne uruchomienie serwera (co nastąpiło z różnych powodów) najwyraźniej go wyczyściło, przynajmniej w tym przypadku. Nie jest jasne, czy to się powtórzy.
Warrior Bob
To dobra sugestia, powinienem o tym pomyśleć! :-) Tak właśnie zrobiliśmy wcześniej, aby usunąć problemy z Kerberos w pamięci podręcznej. Cieszę się, że odniosłeś sukces!
Normoe