Czasami zdarza się, że należy utworzyć login z góry zadanym SID-em. Problem tego typu można zaobserwować podczas korzystania z usług Log Shipping’u, AlwaysOn Availability Group czy miroringu. W momencie przełączenia się na serwer zapasowy podczas próby podłączenia się do bazy danych występuje błąd logowania.

Sytuacja taka dotyczy jedynie loginów SQLowych, a nie kont do logowania się do Windows czy też kont z AD.

W sytuacjach opisywanych powyżej zawsze mamy do czynienia z minimum dwoma serwerami SQL. Gdy założymy, że pracujemy z dwoma serwerami to mamy doczynienia z np. SQLServerSource i SQLServerDestination. Na obu tych serwerach zakładamy taki sam login SQLowy: TestSID

Na serwerze źródłowym zakładamy bazę TestDB, a następnie przypisujemy do tej bazy usera z założonego loginu. Uruchamiając od przedstawiony poniżej jesteśmy wstanie odczytać SIDy loginu i usera w bazie TestDB. Oba SIDy powinny być oczywiście takie same.

USE TestDB 
GO 
SELECT name, sid FROM sys.sysusers 
WHERE name = 'TestSID' 
GO 
USE MASTER 
GO 
SELECT name, sid 
FROM sys.sql_logins WHERE name = 'TestSID' 
GO

Kolejny krok to zasymulowanie jednej ze wspomnianych usług np. Logshipping’u. Na serwerze źródłowym wykonujemy backup bazy TestDB i odtwarzamy ją na instancji docelowej.

Kolejny krok to uruchomieniu powyższego skryptu na instancji docelowej.

Jak widać na serwerze docelowym mamy dwa rożne SID-y. Pierwszy SID, który jest taki sam jak na serwerze źródłowym umieszczony jest w bazie, która odtworzyliśmy z backupu lecz nie jest on zgodny z SIDem loginu, który zakładaliśmy na serwerze docelowy.

No i w tym jest problem. SIDy są niezgodne węc pomimo takiej samej nazwy są to dwa różne konta. Mamy efekt osieroconego użytkownika.

Aby zachować zgodność należ na serwerze docelowym wykasować login z niezgodnym SIDem a następnie ponownie założyć login ale ze wskazanym SIDem. Nie można wykonać operacji ALTER.

W tym celu należy wykonać skrypt poniżej:

CREATE Login TestSID
WITH password = 'Pa$$w0rd'
, SID = 0x12D25C0E6667624BB48298DD01735E39

Po założeniu nowego loginu mamy już prawidłowo powiązane konta.


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl