Der Ultimative Leitfaden zur Gewährung von Berechtigungen auf allen Benutzertabellen in SQL Server

Die Verwaltung von Berechtigungen in SQL Server ist entscheidend für die Aufrechterhaltung der Integrität und Sicherheit Ihrer Datenbank. Ein häufiges Szenario tritt auf, wenn Sie einem bestimmten Datenbankrolle nahtlos Berechtigungen auf allen Benutzertabellen gewähren müssen. Wenn Sie frustriert sind, weil Sie mehrere Skripte schreiben oder Berechtigungen jedes Mal manuell anpassen müssen, wenn Sie neue Tabellen hinzufügen, sind Sie nicht allein. In diesem Leitfaden werden wir untersuchen, wie Sie ein vielseitiges SQL-Skript erstellen können, das es Ihnen ermöglicht, Berechtigungen für SELECT, REFERENCES, INSERT, UPDATE und DELETE an einer Datenbankrolle auf allen Benutzertabellen mühelos zu gewähren.

Die Herausforderung: Berechtigungen effizient gewähren

SQL Server Management Studio (SSMS) generiert normalerweise Skripte für einzelne Datenbankobjekte, was zeitaufwendig sein kann, wenn man es mit mehreren Tabellen zu tun hat. Außerdem kann das Ändern der Berechtigungen für neu hinzugefügte Tabellen schnell zu einer zeitaufwendigen Aufgabe werden. Was Sie brauchen, ist ein robustes “Fire-and-Forget”-Skript, das ausgeführt werden kann, um Berechtigungen für alle Benutzertabellen anzuwenden, ohne dass das Skript jedes Mal erneut besucht werden muss.

Die Lösung: Ein Stored Procedure für Berechtigungsgewährungen

Um die Gewährung von Berechtigungen effektiv zu automatisieren, können wir ein Stored Procedure erstellen, das einen Cursor verwendet, um durch alle Benutzerobjekte zu schleifen und die gewünschten Berechtigungen zu gewähren. Lassen Sie uns den Prozess in überschaubare Schritte unterteilen:

Schritt 1: Erstellen Sie das Stored Procedure

Beginnen Sie mit der Definition Ihres Stored Procedure. Verwenden Sie den folgenden SQL-Code als Vorlage:

IF EXISTS (
    SELECT 1 FROM sysobjects
    WHERE name = 'sp_grantastic'
    AND type = 'P'
)
DROP PROCEDURE sp_grantastic
GO

CREATE PROCEDURE sp_grantastic
AS
DECLARE
 @object_name VARCHAR(30),
 @time VARCHAR(8),
 @rights VARCHAR(20),
 @role VARCHAR(20)

DECLARE c_objects CURSOR FOR
    SELECT name
    FROM sysobjects
    WHERE type IN ('P', 'U', 'V')
    FOR READ ONLY

BEGIN
    SELECT @rights = 'ALL',
           @role = 'PUBLIC'

    OPEN c_objects
    WHILE (1=1)
    BEGIN
        FETCH c_objects INTO @object_name
        IF @@SQLSTATUS <> 0 BREAK

        SELECT @time = CONVERT(VARCHAR, GetDate(), 108)
        PRINT '[%1!] hitting up object %2!', @time, @object_name
        EXECUTE('GRANT '+ @rights +' ON '+ @object_name+' TO '+@role)
    END

    PRINT '[%1!] fin!', @time

    CLOSE c_objects
    DEALLOCATE CURSOR c_objects
END
GO

GRANT ALL ON sp_grantastic TO PUBLIC
GO

Schritt 2: Verstehen der Komponenten

  • Cursor-Deklaration: Der Cursor c_objects wird eingerichtet, um durch alle Benutzertabellen (U), Ansichten (V) und Stored Procedures (P) zu schleifen.
  • Ausführung von Grants: Für jedes Objekt, das über den Cursor abgerufen wird, führt das System einen GRANT-Befehl aus, um die definierten Rechte auf die angegebene Rolle anzuwenden.
  • Ausgabeinformationen: Das Verfahren gibt Protokolle aus, die den Zeitpunkt der Ausführung und alle Objekte, denen Berechtigungen gewährt wurden, angeben.

Schritt 3: Führen Sie das Verfahren aus

Sobald das Stored Procedure erstellt wurde, können Sie es mit einem einfachen Befehl ausführen:

EXEC sp_grantastic

Mit nur diesem Befehl erhält Ihre Datenbankrolle nahtlos die erforderlichen Berechtigungen auf allen Benutzertabellen.

Fazit

Sie haben gerade gelernt, wie Sie ein leistungsstarkes SQL-Skript erstellen, das Berechtigungen für eine Datenbankrolle auf allen Benutzertabellen auf einfache Weise gewährt. Dieser Ansatz rationalisiert nicht nur Ihren Arbeitsablauf, sondern sorgt auch dafür, dass Ihre Berechtigungen stets auf dem neuesten Stand sind, ohne dass manuelles Eingreifen erforderlich ist. Das nächste Mal, wenn Sie eine neue Tabelle zu Ihrer Datenbank hinzufügen, führen Sie einfach das Stored Procedure erneut aus, und Sie sind bereit.

Viel Spaß beim Programmieren!