Questo script permette di cancellare i riferimenti ad un utente e ricrearli attribuendo piene permission a quell’utente; ciò è particolarmente utile quando si esegue il restore di un database il cui backup è stato eseguito su una istanza diversa di Sql Server.
Per eseguire lo script, lanciare Query Analyzer, fare il login con utente 'sa'
(o altro utente che abbia permessi analoghi) e “usare” il database appena restorato.
DECLARE @UserName VARCHAR(40) SET @UserName = 'theUserName' /* Prima di tutto, revoco l'accesso all'utente */ IF EXISTS (SELECT * FROM dbo.sysusers WHERE name = @UserName) EXECUTE sp_revokedbaccess @UserName /* Quindi ripristino l'accesso all'utente */ IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = @UserName AND uid < 16382) /* Il primo parametro è il nome dell'utente; il secondo parametro è il nome con cui l'utente farà il login al database */ EXECUTE sp_grantdbaccess @UserName, @UserName DECLARE instr CURSOR FOR /* Revoca dei permessi sull'oggetto: attenzione allo spazio iniziale che serve a revocare i permessi prima di riattribuirli */ SELECT ' REVOKE ALL ON [' + name + '] TO thAdministrator' FROM sysobjects WHERE (type = 'u' OR type = 'v' OR type = 'p' OR type = 'x') UNION /* Attribuzione dei permessi su tabelle e viste */ SELECT N'GRANT SELECT, INSERT, DELETE, UPDATE ON [' + A.Name + '] TO ' + @UserName FROM SYSOBJECTS A WHERE (A.xType = 'u' OR A.xType = 'v') UNION /* Attribuzione dei permessi su stored procedure */ SELECT N'GRANT EXEC ON [' + B.name + '] TO ' + @Username FROM SYSOBJECTS B WHERE B.Type = 'p' OR B.Type = 'x' DECLARE @Cmd nvarchar(200) OPEN instr FETCH NEXT FROM instr INTO @Cmd WHILE @@FETCH_STATUS = 0 BEGIN EXECUTE sp_ExecuteSql @Cmd FETCH NEXT FROM instr INTO @Cmd END CLOSE instr DEALLOCATE instr