SQL Server 2005 Grant enkelt Välj till alla tabeller och / eller visningar i en databas

Bevilja Välj till alla tabeller för en inloggning kan vara en extremt smärtsam och lång process. Genom att använda SQL Server Management Studio för att utföra detta innebär att gå bord per tabell och markera kryssrutan Välj för varje enskild tabell, gör detta en riktig mardröm om du arbetar med hundratals tabeller. Du kan göra detta på några sekunder mot timmar genom att använda Query-fönstret. Här är hur:


1. Öppna SQL Server Management Studio.

2. Anslut till önskad server.

3. Klicka på Ny fråga knapp.

4. Välj önskad databas från rullgardinsmenyn i verktygsfältet.

5. För att bevilja Välj till alla tabeller i databasen, kopiera och klistra in följande i ditt sökfönster:
DECLARE @ login varchar (50)
SET @login = 'loginname'

DECLARE @ tabeller TABELL (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSERT IN @ tabeller
VÄLJ 'GRANT SELECT ON' + NAME + 'TO' [email protected]
FRÅN sysobjekt
VAR TYP = 'U'
OCH NAMN ÄR INTE SOM "SYNC%"

DECLARE @rowid int, @sqlstr varchar (500)
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_tbl_cursor CURSOR FOR
VÄLJ ROWID, SQLSTR
FRÅN @ tabeller
BESTÄLL AV ROWID
OPEN grant_tbl_cursor
FETCH NEXT FROM grant_tbl_cursor
IN @ @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
BÖRJA
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_tbl_cursor
IN @ @ rowid, @ sqlstr
SLUTET
CLOSE grant_tbl_cursor
DEALLOCATE grant_tbl_cursor

6. Ändra i den andra raden i det förfrågade frågan inloggningsnamn till inloggningen som du vill bevilja Välj till alla tabeller.

7. Utför frågan.

För att bevilja Välj till alla visningar i databasen följer du ovanstående steg men använder följande:
DECLARE @ login varchar (50)
SET @login = 'loginname'

DECLARE @ views TABLE (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSERT IN @ visningar
VÄLJ 'GRANT SELECT ON' + NAME + 'TO' [email protected]
FRÅN sysobjekt
VAR TYP = 'V'
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_vw_cursor CURSOR FOR
VÄLJ ROWID, SQLSTR
FRÅN @visningar
BESTÄLL AV ROWID
OPEN grant_vw_cursor
FETCH NEXT FROM grant_vw_cursor
IN @ @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
BÖRJA
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_vw_cursor
IN @ @ rowid, @ sqlstr
SLUTET
CLOSE grant_vw_cursor
DEALLOCATE grant_vw_cursor