Alzi la mano chi non ha mai avuto questo problema… Quando si ripristina un database esiste il rischio di ritrovarsi con utenti orfani: presenti cioè nel database, ma inesistenti come login nel server.
Una premessa: SQL Server mantiene le informazioni riguardo alla logins nel database master, associandovi il SID (Security Identifier) di Windows o del dominio Active Directory se parliamo utenti Windows oppure il SID creato e mantenuto da SQL Server stesso nel caso di logins SQL Server. Le informazioni relative agli utenti del database sono mantenute nel database stesso, nel quale sono associati i SID delle logins con i dati dell’utente del db.
Il problema degli utenti orfani si verifica generalmente quando si effettua il ripristino di un backup su un server diverso dall’originale. Anche se nel server di destinazione sono presenti gli stessi utenti del server di origine, cambiando i SID non è possibile a SQL Server collegare le due entità, dando origine ad utenti orfani.
Se vi state chiedendo: “esiste una procedura per fissare gli utenti orfani senza dover cancellare e ricreare gli utenti, perdendo tutte le informazioni sui permessi associati ?”, beh, la risposta è sì.
Esiste una stored procedure che si chiama sp_change_users_login che consente di effettuare un check degli utenti orfani e farsi restituire l’elenco e, con un diverso parametro, fissare il problema "riagganciando” i SID delle logins con gli utenti relativi.
La procedura è la seguente: prima eseguo la query
EXEC sp_change_users_login 'REPORT'
che restituisce l’elenco degli utenti orfani.
UserName UserSID -------- ----------------------------------- Mark 0xD5B5548C6DC81D7773E769631629CE1D
Quindi eseguo la query
EXEC sp_change_users_login 'UPDATE_ONE','Mark','Mark'
per riagganciare utente e login.
Esiste anche una opzione AUTO_FIX che verifica i potenziali orfani ed eventualmente ricrea le logins mancanti, basandosi sul match tra il nome utente ed il nome della login. Personalmente non sono molto favorevole a tutto ciò che è automatico, principalmente perchè in questo caso rischiate di ritrovarvi con login indesiderate o potenzialmente dannose.
Qualche link per approfondire:
BOL SQL Server 2008 ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/1554b39f-274b-4ef8-898e-9e246b474333.htm MSDN: http://msdn.microsoft.com/it-it/library/ms174378.aspx