Zmiana mapowania konta użytkownika bazy danych (user) na inny login w SQL Server

12-gru-2010

Kiedy nadajesz uprawnienia w SQL sererze tworzysz loginy dla użytkowników. Login może pochodzić z systemu Windows, bądź też może być utworzony specjalnie w obrębie wybranej bazy danych.

Użytkownik, który posiada własny login może się podłączyć do serwera. Aby jednak skorzystać z danych zapisanych w konkretnej bazie danych potrzebuje dodatkowo konta użytkownika w tej bazie danych. Tworzenie użytkownika polega na połączeniu (zmapowaniu) loginu do nazwy użytkownika.

Jeżeli jednak baza danych zostanie przeniesiona na inny serwer (np backup/restore), to może sie okazać, że na tym nowym serwerze nie istnieją loginy do których odwołują się konta użytkowników w bazie danych. Dotyczy to loginów tworzonych w SQL oraz pochodzących z Windows.

W przypadku loginu Windows sprawa jest stosunkowo prosta. Wystarczy utworzyć login dla użytkownika Windows, a użytkownik bazy danych zostanie zmapowany do tego konta automatycznie.

Gorzej ma się sprawa z kontami tworzonymi wewnętrzenie w SQL Server. Nawet jeżeli utworzysz login o tej samej nazwie na nowym serwerze, to mapowanie użytkownika bazy danych do loginu serwera nie odbędzie sie automatycznie. Można jednak wykonać polecenie:

ALTER USER user_name WITH LOGIN = login_name

Powoduje ono, że nazwa login_name będzie mapowana na nazwę użytkownika user_name.

A jaki z tego wniosek? Gdzie tylko można staraj się unikać kont SQL Server na rzecz loginów pochodzących z Windows (Używaj autentykacji windows).

Komentarze:

  1. sqlbi napisał,

    Można też procedurą składowaną:

    sp_change_users_login [ @Action = ] 'action’
    [ , [ @UserNamePattern = ] 'user’ ]
    [ , [ @LoginName = ] 'login’ ]
    [ , [ @Password = ] 'password’ ]
    [;]

    http://technet.microsoft.com/en-us/library/ms174378.aspx

Autor: Rafał Kraik