2010-12-21 7 views
0

Ich möchte UPDATE Querys verhindern, die über ceartain Felder in meiner Datenbank schreiben. Ich möchte auch UPDATE oder DELETE Querys jeglicher Art für bestimmte Tabellen verhindern, da diese Tabellen permanente Informationen enthalten, die auf unbestimmte Zeit bestehen bleiben müssen.Ist es möglich, schreibgeschützte Felder in SQL Server 2008 R2 zu erzwingen?

Können diese Konfigurationen in SQL Server Management Studio implementiert werden?

Antwort

8

Um Updates für bestimmte Felder zu verhindern, müssen Sie wahrscheinlich einen AFTER UPDATE-Trigger für diese Tabelle haben, der prüft, ob eines der schreibgeschützten Felder aktualisiert wird. Wenn ja, brechen Sie die Transaktion ab.

CREATE TRIGGER triggerName 
ON dbo.YourTable AFTER UPDATE 
AS 
    IF UPDATE(somefield) 
     ROLLBACK TRANSACTION 

Um bestimmte Benutzer Zugriff auf bestimmte Tabellen zu verhindern, gewähren nicht nur die Benutzer (oder eine Datenbank Rolle sie gehören) das UPDATE und/oder DELETE-Berechtigung für diese Tabellen.

+1

Für ganze Tabellen gibt es jedoch einen effektiveren Weg: Verschieben Sie alle R/O-Dateien in eine separate Dateigruppe und markieren Sie die Dateigruppe als schreibgeschützt: 'ALTER DATABASE ... MODIFY FILEGROUP ... READ_ONLY'. –

+0

Ist das reversibel? –

+0

@Stephanie Seite: ja, sicher - 'ALTER DATABASE ... ÄNDERN FILEGROUP ... READWRITE' –

1

@marc_s ist richtig, wenn Sie Änderungen in einigen Feldern verhindern möchten, sollten Sie einen Trigger verwenden oder die Berechtigungen des Benutzers beschränken, wenn Sie die dba sind. In jedem Fall würde ich anstelle eines AFTER-Triggers einen INSTEAD OF-Trigger verwenden, sodass es nicht erforderlich ist, die Transaktion rückgängig zu machen.

CREATE TRIGGER triggerName 
ON dbo.YourTable INSTEAD OF UPDATE, INSERT 
AS  
IF UPDATE(somefield)  
    -- do nothing or whatever 

Auf jeden Fall, wenn Sie diese Antwort richtig finden, nutzen Sie bitte die von @marc_s vorgesehen Antwort akzeptieren, das ist nur etwas mehr über diese Antwort

4
  1. alle Berechtigungen entfernen nur Tabellen lesen. Niemand kann Änderungen vornehmen dann

  2. gespeicherte Prozeduren oder Ansichten Betrachten Sie schreibt zu steuern, wieder direkte Berechtigungen entfernen

  3. marc_s Siehe

beantworten Wenn die Benutzer als dbo verbinden oder sa dann gibt Ist nichts, was Sie tun können, das ist effektiv. Benutzer können trigegrs deaktivieren oder löschen. Mit sa Berechtigungen werden nie überprüft.