Mapování databázového usera na serverový login

V Microsoft SQL Serveru existují na úrovni serveru Loginy, které zajišťují přístup k databázovému serveru. Tyto loginy jsou následně mapovány na databázové uživatele (users) v jednotlivých databází, kteří pak zajišťují přistup k daným databázím a objektům v nich.

Vzhledem k tomu, že databázový User je vždy uložen v databázi, je s ní i zálohován, resp. je její součástí i při odpojení [Detach] a přenosu na jiný server. Pokud tedy obnovujeme databázi na jiném stroji, nebo ji na jiném stroji připojujeme [Attach] zůstane v databázi user, který není namapován na odpovídající  login v serveru (to platí i pokud v serveru existuje login se stejným názvem).

Původním loginem se pak nedá k databázi přihlásit.

K opravě tohoto problému můžeme použít buď vestavěnou proceduru sp_change_user_login nebo SQL příkaz ALTER USER.

Procedura SP_CHANGE_USER_LOGIN

Procedura mapuje existující databázové uživatele (usery) na SQL Server login. Podle dokumentace má být sice tato procedura z SQL Serveru odebrána, ale ještě v MS SQL Serveru 2012 je přítomna a funguje.

Pomocí procedury můžeme zjistit, jsou-li v databázi uživatelé, kteří nejsou mapování na serverový login:

USE <database>;
GO
EXEC sp_change_user_login 'Report';
GO

Procedura se spouští na konkrétní databázi. Výsledkem je seznam databázových uživatelů a jejich identifikátorů SID, kteří existují v databázi a nejsou mapování na serverový login.

Pomocí procedury pak můžeme nenamapované usery opravit:

USE <database>;
GO
EXEC sp_change_users_login 'Auto_Fix', '<db_user>', NULL, '<heslo>';
GO

Pomocí parametru AutoFix procedura namapuje stávajícího databázového uživatele (<db_user>) na login stejného názvu nebo pokud login stejného názvu neexistuje, založí nový login se zadaným heslem (<heslo>).  Pokud login existuje heslo je ignorováno.

Pomocí procedury můžeme namapovat i existujícího databázového uživatele na existující login s jiným názvem:

USE <database>;
GO
EXEC sp_change_users_login 'Update_One', '<db_user>', '<server_login>';
GO

Procedura namapuje databázového uživatele (<db_user>) na existující serverový login (<server_login>).

Příkaz ALTER USER

Příkaz ALTER USER umožňuje namapování databázového usera na existující serverový login:

USE <database>;
GO
ALTER USER <db_user> WITH login=<server_login>;
GO

Příkaz se spouští na konkrétní databázi a mapuje databázového uživatele <db_user> na existující serverový login <server_login>.

SQL Server Management Studio

Mapování databázového uživatele na serverový login, lze také naklikat v Management Studiu, přes Properties serverového loginu na záložce User Mapping. Management Studio však nemusí být vždy k dispozici.

Komentáře nejsou povoleny.