2009-04-21 16 views
2

Ich habe eine Access 2003-Anwendung, die eine Verbindung zu einer SQL Server 2000-Box herstellt.Wie kann ein Datensatz dauerhaft als schreibgeschützt markiert werden?

Ich habe eine Tabelle, in der ich einen Datensatz zusammen mit allen verwandten Datensätzen in verschiedenen Tabellen sperren muss. Mit "Sperren" meine ich, dass sie als schreibgeschützt gekennzeichnet sind, sodass keine Clients diese Datensätze bearbeiten können, sofern sie nicht von einem Administrator entsperrt werden.

Irgendwelche Ideen?

+1

Was meinst du mit "sperren"? Änderungen dauerhaft verhindern? Oder verhindern Sie, dass sich jemand während einer Operation kurzzeitig verändert? –

+1

Mehr von einer dauerhaften Sperre. Der Endbenutzer sollte nicht in der Lage sein, die gesperrten Datensätze zu bearbeiten. Es muss jedoch eine Möglichkeit für einen Administrator geben, sie zu entsperren. Derzeit habe ich ein verstecktes Bitfeld in meiner Haupttabelle, das gesetzt wird, wenn der Datensatz gesperrt ist, aber ich habe Probleme mit der Ermittlung der besten Möglichkeit, die zugehörigen Datensätze zu sperren. – DoubleJ92

+0

Ich habe die Frage bearbeitet, um klarzustellen, dass Sie eine permanente Sperre meinen. Einige Leute, die das gelesen haben, hätten angenommen, dass Sie eine temporäre Sperre auf Zeilenebene meinen. Ich hoffe, das hilft dir bessere Antworten zu bekommen. – JosephStyons

Antwort

3

Mehr als wahrscheinlich gibt es keine "elegante" Möglichkeit, dies auf Datenbankebene zu tun. Aber es gibt ein paar Routen, die Sie tun können.

  1. Fügen Sie jeder Tabelle ein "gesperrtes" Bitfeld hinzu, und wenn Sie den Wert der übergeordneten Kaskade "sperren".
  2. In Verbindung mit # 1 fügen Sie einen Trigger zum Aktualisieren und Löschen, wenn das Flag gesetzt ist, können Sie das Update abbrechen oder löschen.

die über die einzige wirkliche einfache Möglichkeit ist es auf der db Ebene zu erzwingen, die ich mir vorstellen kann.

0

Angenommen, Ihre Daten sind in SQL Server, würde ich die SQL Server-Sicherheit verwenden, wenn möglich zuerst. Wir erlauben normalerweise keinen Zugriff auf Tabellen und kontrollieren sie dann über SPs. SPs können eine komplexere Logik haben, um zu bestimmen, ob eine bestimmte Operation ausgeführt werden soll.

Wenn das keine Option ist, können Sie immer Trigger verwenden, die Zeilen prüfen und eine Aktualisierung ablehnen oder auf diese Weise löschen.

Es gibt eine Menge Möglichkeiten, diese Katze zu häuten.

0

Nur eine weitere Möglichkeit gibt, zu werfen:

  • eine last_updated Spalte zu Ihrer Tabelle hinzufügen, die durch das Update Trigger
  • Erstellen Sie eine Tabelle aktualisiert wird, Locked_Widgets (oder was auch immer), die einfach die PK Ihrer Basistabelle und die last_updated Spalt und die ganze Reihe von Säulen machen den PK in Locked_Widgets
  • Setzen Sie einen nicht-Kaskadierung Fremdschlüssel aus der Basistabelle zu Locked_Widgets bis

Wenn jemand versucht, die Zeile zu aktualisieren, versucht der Trigger, die last_updated-Spalte zu aktualisieren, und die Fremdschlüsseleinschränkung führt dazu, dass die Aktualisierung fehlschlägt.

Verwandte Themen