Sichere Objekte: Ausblendung von Informationen in Fehlermeldungen (Ausstehend)

Fehlermeldungen im Zusammenhang mit sicheren Objekten verhalten sich wie folgt:

Vor der Änderung:

Fehlermeldungen, die sich auf sichere Objekte beziehen, zeigen die vollständige Meldung an.

Nach der Änderung:

Fehlermeldungen, die sich auf sichere Objekte beziehen, können Ausblendungen enthalten.

Die Änderung gilt für Fehlermeldungen, die sich auf die folgenden Arten von Objekten beziehen:

Weitere Informationen über sichere Objekte finden Sie unter Sichere Objekte zur Kontrolle des Datenzugriffs verwenden.

Wenn bei der Expansion oder Auswertung eines sicheren Objekts ein Fehler festgestellt wird, wird die Fehlermeldung für die Ausblendung berücksichtigt. Wenn eine Fehlermeldung ausgeblendet wird, bleibt der Fehlercode unverändert.

Es sind zwei Arten von Änderungen an Fehlermeldungen möglich: Ausblendung während der Ausführung und Ausblendung in den Metadaten nach der Ausführung. Diese Arten von Änderungen werden in den folgenden Abschnitten beschrieben.

Ausblendung während der Ausführung

Eine ganze Fehlermeldung oder ein Teil einer Fehlermeldung kann ausgeblendet werden, wenn der Fehler während einer Operation zurückgegeben wird. Im Allgemeinen tritt diese Art von Fehlermeldung auf, wenn ein Benutzer versucht, ein sicheres Objekt zu verwenden, ohne die Berechtigung OWNERSHIP für das sichere Objekt zu besitzen.

Ausblendung in Metadaten nach der Ausführung

Benutzer können nach dem Auftreten von Fehlern Metadaten zu diesen Fehlern einsehen, einschließlich der Fehlermeldungen. Benutzer können diese Metadaten z. B. auf der Seite Query History in Snowsight oder durch Abfragen von Ansichten und Aufrufen von Funktionen in Snowflake Information Schema einsehen. Wenn eine Fehlermeldung während der Ausführung ausgeblendet wird, wird die Fehlermeldung in den Metadaten nach der Ausführung für alle Benutzer immer ausgeblendet.

Wenn eine Fehlermeldung während der Ausführung nicht ausgeblendet wird, erscheint die Meldung für einige Benutzer unverändert in den Metadaten und für andere Benutzer wird sie ausgeblendet. Die Fehlermeldung bleibt in den Metadaten in den folgenden Fällen jeweils unverändert:

  • Der Benutzer, der die Metadaten betrachtet, hat die Berechtigung AUDIT.

  • Der Benutzer, der die Metadaten betrachtet, hat die Anweisung ausgeführt, die den Fehler verursacht hat.

In allen anderen Fällen wird die Fehlermeldung in den Metadaten ausgeblendet. Die ausgeblendeten Fehlermeldungen enthalten den Text: Error in secure object.

Beispiele für die Ausblendung von Fehlermeldungen

Die folgenden Beispiele zeigen Fehlermeldungen, die ausgeblendet dargestellt sind. Die Ausblendung kann während der Ausführung oder in den Metadaten nach der Ausführung erfolgen.

Beispiel 1: Abfrage einer sicheren Ansicht

Im folgenden Beispiel führt ein Benutzer mit der Berechtigung SELECT für eine sichere Ansicht eine Abfrage für die Ansicht aus, die einen Fehler liefert.

Erstellen Sie die sichere Ansicht:

CREATE SECURE VIEW myview
  AS SELECT a FROM mytable;
Copy

Löschen Sie die in der Abfrage der Ansicht verwendete Tabelle:

DROP TABLE mytable;
Copy

Führen Sie eine Abfrage in der Ansicht aus:

SELECT * FROM myview;
Copy

Fehlermeldung, die allen Benutzern vor der Änderung angezeigt wird

002037 (42601): SQL compilation error:
Failure during expansion of view 'MYVIEW': SQL compilation error:
Object 'DB.SC.MYTABLE' does not exist or not authorized.

Ausgeblendete Fehlermeldung, die bei einigen Benutzern nach der Änderung angezeigt wird

002037 (42601): SQL compilation error:
Failure during expansion of view 'MYVIEW': Error in secure object

Beispiel 2: Ausführen einer Abfrage, die eine sichere Funktion aufruft

In den folgenden Beispielen führt ein Benutzer mit der Berechtigung USAGE für eine sichere Funktion eine Abfrage aus, welche die sichere Funktion aufruft, aber die sichere Funktion gibt einen Fehler zurück.

Beispiel 2a: Die Funktionsargumente führen zu einem Fehler

Erstellen Sie die sichere Funktion:

CREATE SECURE FUNCTION myfunction1(x FLOAT, y FLOAT)
  RETURNS FLOAT
  LANGUAGE SQL
AS
  'SELECT x / y';
Copy

Führen Sie eine Abfrage aus, welche die sichere Funktion aufruft:

SELECT myfunction1(1, 0);
Copy
Fehlermeldung, die allen Benutzern vor der Änderung angezeigt wird
100051 (22012): Division by zero
Ausgeblendete Fehlermeldung, die bei einigen Benutzern nach der Änderung angezeigt wird
100051 (22012): Error in secure object

Beispiel 2b: Ein Objekt, von dem die Funktion abhängt, wird gelöscht

Erstellen Sie die sichere Funktion:

CREATE SECURE FUNCTION myfunction2()
  RETURNS TABLE (a NUMBER)
  LANGUAGE SQL
AS
  'SELECT * FROM mytable';
Copy

Löschen Sie die in der Funktion verwendete Tabelle:

DROP TABLE mytable;
Copy

Führen Sie eine Abfrage aus, welche die sichere Funktion aufruft:

SELECT * FROM TABLE(myfunction2());
Copy
Fehlermeldung, die allen Benutzern vor der Änderung angezeigt wird
002003 (42S02): SQL compilation error:
Object 'DB.SC.MYTABLE' does not exist or not authorized
Ausgeblendete Fehlermeldung, die bei einigen Benutzern nach der Änderung angezeigt wird
002003 (42S02): Error in secure object

Beispiel 3: Eine Maskierungsrichtlinie gibt einen Fehler zurück

Im folgenden Beispiel führt ein Benutzer eine Abfrage in einer Ansicht mit einer Maskierungsrichtlinie aus, die auf einen Fehler stößt.

Erstellen Sie eine Maskierungsrichtlinie:

CREATE MASKING POLICY allowed_role_names_mp as (val NUMBER) RETURNS NUMBER ->
  CASE
    WHEN EXISTS
      (SELECT role FROM allowed_roles WHERE role = CURRENT_ROLE()) THEN val
    ELSE '********'
  END;
Copy

Erstellen Sie eine Ansicht und legen Sie die Maskierungsrichtlinie für eine Spalte in der Ansicht fest:

CREATE TABLE test_masking_policy(x NUMBER) AS
  SELECT * FROM VALUES (1), (2), (3);

CREATE VIEW myview_mp
  AS SELECT * FROM test_masking_policy;

ALTER VIEW myview_mp
  MODIFY COLUMN x SET MASKING POLICY allowed_role_names_mp;
Copy

Löschen Sie die in der Maskierungsrichtlinie verwendete Tabelle:

DROP TABLE allowed_roles;
Copy

Führen Sie eine Abfrage in der Ansicht als Benutzer aus, der keine Berechtigung für die Maskierungsrichtlinie hat:

SELECT * FROM myview_mp;
Copy

Fehlermeldung, die allen Benutzern vor der Änderung angezeigt wird

002003 (42S02): SQL compilation error:
Object 'DB.SC.ALLOWED_ROLES' does not exist or not authorized.

Ausgeblendete Fehlermeldung, die bei einigen Benutzern nach der Änderung angezeigt wird

002003 (42S02): Error in secure object

Beispiel 4: Eine Zeilenzugriffsrichtlinie gibt einen Fehler zurück

Im folgenden Beispiel führt ein Benutzer eine Abfrage in einer Ansicht mit einer Zeilenzugriffsrichtlinie aus und stößt auf einen Fehler.

Erstellen Sie eine Zeilenzugriffsrichtlinie:

CREATE OR REPLACE ROW ACCESS POLICY myrap AS (role NUMBER) RETURNS BOOLEAN ->
  EXISTS (
    SELECT 1 FROM allowed_roles
      WHERE role::STRING = CURRENT_ROLE());
Copy

Erstellen Sie eine Ansicht und fügen Sie der Ansicht die Zeilenzugriffsrichtlinie hinzu:

CREATE TABLE test_row_access_policy(x NUMBER) AS
  SELECT * FROM VALUES (1), (2), (3);

CREATE VIEW myview_rap
  AS SELECT * FROM test_row_access_policy;

ALTER VIEW myview_rap
  ADD ROW ACCESS POLICY myrap ON (x);
Copy

Löschen Sie die Tabelle, die in der Zeilenzugriffsrichtlinie verwendet wird:

DROP TABLE allowed_roles;
Copy

Fragen Sie die Ansicht als Benutzer ab, der nicht über OWNERSHIP-Berechtigungen für die Zeilenzugriffsrichtlinie verfügt:

SELECT * FROM myview_rap;
Copy

Fehlermeldung, die allen Benutzern vor der Änderung angezeigt wird

002003 (42S02): SQL compilation error:
Object 'DB.SC.ALLOWED_ROLES' does not exist or not authorized.

Ausgeblendete Fehlermeldung, die bei einigen Benutzern nach der Änderung angezeigt wird

002003 (42S02): Error in secure object

Ref: 1858