Riattribuire le permission ad un utente via codice Sql 

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*