Erstellen Sie eine Datenbankrolle, um Lesezugriff auf alle Tabellen zu ermöglichen. Schreibzugriff auf einige

9

Wir haben eine Datenbank mit über 1000 Tabellen. Ich muss eine Rolle erstellen, die nur Lesezugriff auf alle Tabellen sowie Schreibzugriff auf zwei bestimmte Tabellen ermöglicht.

Ich habe mit Datenbankrollen herumgespielt, aber wann immer ich die Tabellen hinzufügte, musste ich alle 1000 von Hand auswählen ... gibt es einen besseren Weg, dies zu tun?

Wir s
quelle
Das könnte tatsächlich der einfachste Weg sein ... Gibt es einen Weg, das zu schreiben? Ich muss eine Reihe von Skripten aufbewahren, damit wir bei jeder Aktualisierung einer dieser Datenbanken alle Einstellungen sofort zurückerhalten können.
Wes

Antworten:

9

Durch das Erteilen von Berechtigungen für das Schema (z. B. dbo) werden alle Objekte in diesem Schema kaskadiert. Für einzelne Ausnahmen können Sie diese einfach explizit auflisten:

GRANT SELECT ON SCHEMA::dbo TO [role];
GO

GRANT INSERT, UPDATE --, DELETE
  ON dbo.table_they_can_write_to TO [role];

DENY SELECT ON dbo.table_they_cannot_read TO [role];
Aaron Bertrand
quelle
3
Leicht genug. Ich bin froh, dass wir so eine Community haben.
Wes
1

Versuche dies :

EXEC sp_MSForEachTable 'GRANT INSERT, UPDATE ON ? to [ROLE]'
Druzin
quelle
3
Zu Ihrer Information, dies gibt Schreib-, aber keinen Lesezugriff auf alle Tabellen und ignoriert auch das Schema insgesamt. Auch sp_MSForEachTableist nicht dokumentiert, nicht unterstützt und möglicherweise leidet die gleichen Skipping Probleme wiesp_MSForEachDB .
Aaron Bertrand