Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

CREATE ROW ACCESS POLICY

Erstellt eine neue Zeilenzugriffsrichtlinie im aktuellen/angegebenen Schema oder ersetzt eine bestehende Zeilenzugriffsrichtlinie.

Siehe auch:

DDL für Tabellen, Ansichten und Sequenzen

Unter diesem Thema:

Syntax

Snowflake unterstützt die folgende Syntax zum Erstellen einer Zeilenzugriffsrichtlinie.

CREATE [ OR REPLACE ] ROW ACCESS POLICY [ IF NOT EXISTS ] <name> AS
(<arg name> <arg type> [ , ... ]) RETURNS BOOLEAN -> <expression>
[ COMMENT = '<string_literal>' ]

Erforderliche Parameter

Name

Bezeichner für die Zeilenzugriffsrichtlinie, der für Ihr Schema eindeutig sein muss.

Der Bezeichnerwert muss mit einem alphabetischen Zeichen beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. „Mein Objekt“). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner

AS ( <Argumentname> <Argumentdatentyp> [ , ] )

Die Signatur für die Zeilenzugriffsrichtlinie.

Eine Signatur gibt einen Satz von Attributen an, die berücksichtigt werden müssen, um festzustellen, ob Zugriff auf die Zeile erlaubt ist. Die Attributwerte stammen aus dem Datenbankobjekt (z. B. Tabelle oder Ansicht), das durch die Zeilenzugriffsrichtlinie geschützt werden soll.

RETURNS BOOLEAN -> <Ausdruck>

Legt die Anwendung der Zeilenzugriffsrichtlinie fest.

Der zurückgegebene Wert bestimmt, ob der Benutzer Zugriff auf eine bestimmte Zeile des Datenbankobjekts hat, zu dem die Zeilenzugriffsrichtlinie hinzugefügt wurde.

Der Ausdruck kann ein beliebiger SQL-Ausdruck mit booleschem Wert sein. Snowflake unterstützt Ausdrücke, die UDFs (Benutzerdefinierte Funktionen), Externe Funktionen und Ausdrücke mit Unterabfragen aufrufen.

Optionale Parameter

COMMENT = 'Zeichenfolgenliteral'

Gibt einen Kommentar für die Zeilenzugriffsrichtlinie an.

Standard: Kein Wert

Nutzungshinweise

  • Das Erstellen einer Zeilenzugriffsrichtlinie erfordert die Berechtigung für CREATE ROW ACCESS POLICY für das aktuelle oder angegebene Schema.

  • Das Einfügen einer oder mehrerer Unterabfragen in den Richtlinientext kann zu Fehlern führen. Wenn möglich, begrenzen Sie die Anzahl der Unterabfragen, begrenzen Sie die Anzahl der JOIN-Operationen, und vereinfachen Sie die Bedingungen der WHERE-Klausel.

  • Wenn ein Datenbankobjekt sowohl eine Zeilenzugriffsrichtlinie als auch eine oder mehrere Sicherheit auf Spaltenebene-Maskierungsrichtlinien hat, wird die Zeilenzugriffsrichtlinie zuerst ausgewertet.

    Weitere Informationen zu Zeilenzugriffsrichtlinien während der Laufzeit von Abfragen finden Sie unter Grundlegendes zur Sicherheit auf Zeilenebene.

  • Sie können die Richtliniensignatur (d. h. den Argumentnamen oder den Eingangs-/Ausgangsdatentyp) nicht mit CREATE OR REPLACE ROW ACCESS POLICY ändern, wenn die Richtlinie an eine Tabelle oder Ansicht angehängt ist, und auch nicht mit ALTER ROW ACCESS POLICY. Wenn Sie die Signatur ändern müssen, führen Sie eine DROP ROW ACCESS POLICY-Anweisung für die Richtlinie aus, und erstellen Sie dann eine neue Zeilenzugriffsrichtlinie.

Beispiele

Die folgende Zeilenzugriffsrichtlinie erlaubt Benutzern, deren CURRENT_ROLE die benutzerdefinierte Rolle it_admin ist, die Mitarbeiter-ID-Nummer (d. h. empl_id) im Abfrageergebnis zu sehen.

create or replace row access policy rap_it as (empl_id varchar) returns boolean ->
  case
      when 'it_admin' = current_role() then true
      else false
  end
;

Die folgende Zeilenzugriffsrichtlinie erlaubt Benutzern, Daten anzuzeigen, wenn die Abfrage eine der beiden folgenden Bedingungen erfüllt:

  1. Die aktuelle Rolle ist die benutzerdefinierte Rolle sales_executive_role. Fragt die Funktion CURRENT_ROLE ab, um die aktuelle Rolle zu ermitteln.

  2. Die aktuelle Rolle ist die benutzerdefinierte Rolle sales_manager, und die Abfrage gibt eine sales_region an, die der Zuordnungstabelle salesmanageregions entspricht.

use role securityadmin;

create or replace row access policy rap_sales_manager_regions_1 as (sales_region varchar) returns boolean ->
  'sales_executive_role' = current_role()
      or exists (
            select 1 from salesmanagerregions
              where sales_manager = current_role()
                and region = sales_region
          )
;

Wobei:

rap_sales_manager_regions_1

Der Name der Zeilenzugriffsrichtlinie.

as (sales_region varchar)

Die Signatur für die Zeilenzugriffsrichtlinie.

Eine Signatur gibt einen Satz von Attributen an, die berücksichtigt werden müssen, um festzustellen, ob Zugriff auf die Zeile erlaubt ist. Die Attributwerte stammen aus der Tabelle, die durch die Zeilenzugriffsrichtlinie geschützt werden soll.

returns boolean ->

Gibt die Anwendung der Zeilenzugriffsrichtlinie an.

Beachten Sie, dass der <expression> der Zeilenzugriffsrichtlinie unmittelbar auf den rechten Pfeil (d. h. ->) folgt.

Der Ausdruck kann ein beliebiger SQL-Ausdruck mit booleschem Wert sein. Snowflake unterstützt Ausdrücke, die UDFs, externe Funktionen und Ausdrücke mit Unterabfragen aufrufen.

'sales_executive_role' = current_role()

Die erste Bedingung des Ausdrucks der Zeilenzugriffsrichtlinie, die es Benutzern mit der benutzerdefinierten Rolle „sales_executive_role“ erlaubt, Daten anzuzeigen.

or exists (select 1 from salesmanagerregions where sales_manager = current_role() and region = sales_region)

Die zweite Bedingung des Ausdrucks der Zeilenzugriffsrichtlinie, in dem eine Unterabfrage verwendet wird.

Die Unterabfrage erfordert, dass CURRENT_ROLE die benutzerdefinierte Rolle „sales_manager“ ist, wobei die ausgeführte Abfrage auf den Daten eine Region angibt, die in der Zuordnungstabelle salesmanagerregions aufgeführt ist.

Die folgende Zeilenzugriffsrichtlinie legt zwei Attribute in der Richtliniensignatur fest:

create or replace row access policy rap_test2 as (n number, v varchar)
  returns boolean -> true;

Wobei:

rap_test2

Der Name der Zeilenzugriffsrichtlinie.

(n number, v varchar)

Die Signatur für die Zeilenzugriffsrichtlinie.

Wenn diese Richtlinie zu einem Datenbankobjekt hinzugefügt wird und eine der angegebenen Spalten in der Abfrage auf das Datenbankobjekt enthalten ist, gibt Snowflake die Zeile nicht im Abfrageergebnis zurück.

returns boolean -> true

Legt die Anwendung der Zeilenzugriffsrichtlinie fest.

Der zurückgegebene Wert bestimmt, ob der Benutzer Zugriff auf eine bestimmte Zeile des Datenbankobjekts hat, zu dem die Zeilenzugriffsrichtlinie hinzugefügt wurde.