SQL Server 2005 ermöglicht das einfache Zuweisen von select für alle Tabellen und / oder Ansichten in einer Datenbank

Das Erteilen von Select an alle Tabellen für ein Login kann ein äußerst schmerzhafter und langwieriger Prozess sein. Wenn Sie das SQL Server Management Studio verwenden, um dies durchzuführen, gehen Sie Tabelle für Tabelle vor und aktivieren das Kontrollkästchen Auswählen für jede einzelne Tabelle. Dies ist ein echter Alptraum, wenn Sie mit Hunderten von Tabellen arbeiten. Mit dem Abfragefenster können Sie dies in nur wenigen Sekunden gegenüber Stunden tun. Hier ist wie:


1. Öffnen SQL Server Management Studio.

2. Verbinden Sie sich mit dem gewünschten Server.

3. Klicken Sie auf Neue Abfrage Taste.

4. Wählen Sie die gewünschte Datenbank aus der Dropdown-Liste in der Symbolleiste aus.

5. Um allen Tabellen in der Datenbank Select zu gewähren, kopieren Sie Folgendes und fügen Sie sie in Ihr Abfragefenster ein:
DECLARE @login varchar (50)
SET @login = 'loginname'

DECLARE @tables TABLE (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSERT IN @tables
SELECT 'GRANT SELECT ON' + NAME + 'TO' [Email geschützt]
VON sysobjects
WO TYP = "U"
UND NAME NICHT MÖGEN 'SYNC%'

DECLARE @rowid int, @sqlstr varchar (500)
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_tbl_cursor CURSOR FOR
WÄHLEN SIE ROWID, SQLSTR
FROM @tables
BESTELLEN ÜBER ROWID
OPEN grant_tbl_cursor
FETCH NEXT FROM grant_tbl_cursor
INTO @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
START
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_tbl_cursor
INTO @ rowid, @ sqlstr
ENDE
SCHLIESSEN Sie grant_tbl_cursor
DEALLOCATE grant_tbl_cursor

6. Ändern Sie in der zweiten Zeile der eingefügten Abfrage Benutzername zu dem Login, das Sie Select für alle Tabellen gewähren möchten.

7. Führen Sie die Abfrage aus.

Um allen Ansichten in der Datenbank Select zu gewähren, führen Sie die oben genannten Schritte aus, verwenden Sie jedoch die folgenden Schritte:
DECLARE @login varchar (50)
SET @login = 'loginname'

DECLARE @views TABLE (ROWID int IDENTITY (1,1), SQLSTR varchar (500))
INSERT IN @views einfügen
SELECT 'GRANT SELECT ON' + NAME + 'TO' [Email geschützt]
VON sysobjects
WO TYP = 'V'
SET @rowid = 0
SET @sqlstr = "
DECLARE grant_vw_cursor CURSOR FOR
WÄHLEN SIE ROWID, SQLSTR
FROM @views
BESTELLEN ÜBER ROWID
OPEN grant_vw_cursor
FETCH NEXT FROM grant_vw_cursor
INTO @ rowid, @ sqlstr
WHILE @@ FETCH_STATUS = 0
START
EXECUTE (@sqlstr)
FETCH NEXT FROM grant_vw_cursor
INTO @ rowid, @ sqlstr
ENDE
SCHLIESSEN Sie grant_vw_cursor
DEALLOCATE grant_vw_cursor