Entfernen Sie in SQL Server das Zugriffsrecht aller Benutzer auf ein Tabellenobjekt

7

Als Bereinigungsjob versuche ich, das Zugriffsrecht aller Benutzer (einschließlich nicht öffentlicher Benutzer) auf ein einzelnes Tabellenobjekt (mit Ausnahme von Superusern) zu entfernen, und erteile anschließend neue Zugriffsrechte. Gibt es eine einfache Möglichkeit, Zugriffsrechte auf eine Tabelle zu entfernen, ohne einen Cursor mit Systemtabellen zu verwenden?

NaN
quelle
Möchten Sie die Rechte eines einzelnen Benutzers für alle Tabellen oder alle Benutzerrechte für eine einzelne Tabelle widerrufen?
1
Verwenden Sie den normalen Widerrufsbefehl mit der Option public. Dadurch wird allen öffentlichen Benutzern der Zugriff auf die Tabelle entzogen.
@Brian Nicht alle Benutzer sind in der öffentlichen Rolle. Entschuldigung, ich werde die Frage bearbeiten.

Antworten:

3

Dieser Code sollte unten funktionieren:

declare 
    @user_name sysname,
    @deny_cmd nvarchar(500)

declare UserCursor cursor for
select name
from sys.database_principals
where type in ('U', 'S')
and name not in ('dbo', 'information_schema', 'sys')

open UserCursor

fetch next from UserCursor
into @user_name

while @@fetch_status = 0
begin
    set @deny_cmd = 
        'deny select, insert, update, delete on object::UberSecureTable
        to ' + @user_name

    exec (@deny_cmd)

    fetch next from UserCursor
    into @user_name
end

close UserCursor
deallocate UserCursor

Lassen Sie mich wissen, ob das das tut, wonach Sie suchen. Ändern Sie UberSecureTable in Ihren tatsächlichen Tabellennamen.

Thomas Stringer
quelle
Danke @Shark. Dies funktioniert und erledigt den Job, aber ich habe gesucht, ob es einen Admin-Befehl gibt, mit dem die Verwendung des Cursors vermieden werden kann. Als Analogie kann man Zeilen löschen, aber es gibt auch den Befehl zum Abschneiden. Ich stimme trotzdem für Ihre Antwort.
NaN