Schutz vor dem Ablegen von Schemaobjekten

Auf dieser Seite wird beschrieben, wie Sie Schemaobjekte wie Tabellen, Indexe und Spalten vor versehentlichem Löschen schützen.

Sicherheit beim Löschen von Schemaobjekten

Der Schutz vor dem Löschen von Schemaobjekten in Spanner basiert auf Zugriffsstatistiken für Schemaobjekte, um zu ermitteln, ob ein Objekt sicher gelöscht werden kann. Wenn das System feststellt, dass das Objekt nicht sicher ist, wird die Anfrage des Nutzers zum Löschen des Schemaobjekts abgelehnt. Wenn Sie ein solches Objekt löschen, können Client-Jobs, die noch darauf zugreifen, fehlschlagen. Außerdem ist es sehr schwierig oder unmöglich, ein gelöschtes Objekt wiederherzustellen, ohne dass Daten verloren gehen.

Dazu erfasst Spanner Zugriffsstatistiken für jedes Schemaobjekt. Dieser Zugriff umfasst DML-Einfügungen, ‑Aktualisierungen oder ‑Löschungen, SQL-Abfragen, API-Schreibvorgänge und API-Lesevorgänge. Anhand dieser Zugriffsstatistiken ermittelt Spanner, ob ein Schemaobjekt möglicherweise noch verwendet wird. Wenn auf ein Objekt vor Kurzem zugegriffen wurde, wird es wahrscheinlich noch verwendet.

Löschschutz für Schemaobjekte aktivieren

Um den Schutz vor dem Löschen zu aktivieren, legen Sie für die Inaktivitätsdauer einen Wert ungleich null fest, z. B. „24h“ oder „2d“. Die Mindestdauer beträgt „0s“ und die maximale Dauer „7d“. Sie sollten die Inaktivitätsdauer auf „24 Stunden“ oder länger festlegen.

Wenn Sie die Inaktivitätsdauer auf „24 h“ festlegen, können Sie ein Schemaobjekt nur löschen, wenn in den letzten 24 Stunden nicht darauf zugegriffen wurde.

GoogleSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period="DURATION" )'

Ersetzen Sie Folgendes:

  • DATABASE_NAME: der Name Ihrer Datenbank
  • INSTANCE_ID: die Kennung Ihrer Datenbankinstanz.
  • DURATION: zwischen „0s“ (einschließlich) und „7d“ (einschließlich). Empfohlen: „24h“.

PostgreSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME" SET spanner.schema_drop_protection_inactivity_period="DURATION" '

Ersetzen Sie Folgendes:

  • DATABASE_NAME: der Name Ihrer Datenbank
  • INSTANCE_ID: die Kennung Ihrer Datenbankinstanz.
  • DURATION: zwischen „0s“ (einschließlich) und „7d“ (einschließlich). Empfohlen: „24h“.

Löschschutz für Schemaobjekte deaktivieren

Wenn Sie den Schutz vor dem Herunterfallen deaktivieren möchten, legen Sie die Inaktivitätsdauer auf den Wert „0s“ fest oder setzen Sie den Optionswert auf „null“.

GoogleSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period=null )'

Ersetzen Sie Folgendes:

  • DATABASE_NAME: der Name Ihrer Datenbank
  • INSTANCE_ID: die Kennung Ihrer Datenbankinstanz.

PostgreSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_inactivity_period=null'

Ersetzen Sie Folgendes:

  • DATABASE_NAME: der Name Ihrer Datenbank
  • INSTANCE_ID: die Kennung Ihrer Datenbankinstanz.

Vorsichtsmaßnahmen

Der Schutz vor dem Löschen von Schemaobjekten ist in den folgenden Fällen nicht aktiviert:

  1. Sie haben die Datenbank in der letzten Stunde erstellt.
  2. Auf das Objekt wird nur selten zugegriffen (weniger als 10 Lesevorgänge pro Stunde).
  3. Sie haben das Schemaobjekt innerhalb des Inaktivitätszeitraums erstellt. Das bedeutet, dass ein Schemaobjekt, das vor weniger als dem in schema_drop_protection_inactivity_period angegebenen Zeitraum erstellt wurde, nicht vor dem Löschen geschützt ist. Wenn schema_drop_protection_inactivity_period beispielsweise 7d ist, kann jede Tabelle, die in den letzten 7 Tagen erstellt wurde, gelöscht werden, auch wenn vor Kurzem darauf zugegriffen wurde.

    Dieses Verhalten erleichtert das Testen: Wenn der Schutz auf neu erstellte Objekte angewendet würde, könnten Sie keine temporäre Tabelle erstellen, testen und sofort löschen. Stattdessen müssten Sie sieben Tage warten, bis der Inaktivitätszeitraum abgelaufen ist, bevor eine Bereinigung möglich wäre.

Der Standard-Schwellenwert für den Lesezugriff liegt bei 10 Zugriffen pro Stunde. Sie können den Standardwert jedoch mit der folgenden Datenbankoption überschreiben:

GoogleSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_usage_lowerbound=<threshold> )'

PostgreSQL

Weitere Informationen finden Sie unter ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_usage_lowerbound=<threshold> '

In den folgenden Fällen werden keine Zugriffsstatistiken erhoben:

  1. Fehlgeschlagene Zugriffe (Abfragen, DML usw.) werden nicht auf den Nutzerzugriff angerechnet.
  2. Systemzugriffe werden nicht gezählt.
  3. Schreibzugriffe (einschließlich DML-Einfügungen und -Aktualisierungen) werden für Indexe ignoriert.
  4. Schreibzugriffe werden für gespeicherte generierte Spalten ignoriert.

Fehlerbehebung

Wenn ein Schemaobjekt nicht gelöscht werden kann und Sie nicht ermitteln können, wer darauf zugreift, gehen Sie so vor:

Nächste Schritte

Informationen zum Verhindern des Löschens von Datenbanken