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:
Sichere Funktionen (einschließlich sicherer Tabellenfunktionen)
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;
Löschen Sie die in der Abfrage der Ansicht verwendete Tabelle:
DROP TABLE mytable;
Führen Sie eine Abfrage in der Ansicht aus:
SELECT * FROM myview;
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';
Führen Sie eine Abfrage aus, welche die sichere Funktion aufruft:
SELECT myfunction1(1, 0);
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';
Löschen Sie die in der Funktion verwendete Tabelle:
DROP TABLE mytable;
Führen Sie eine Abfrage aus, welche die sichere Funktion aufruft:
SELECT * FROM TABLE(myfunction2());
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;
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;
Löschen Sie die in der Maskierungsrichtlinie verwendete Tabelle:
DROP TABLE allowed_roles;
Führen Sie eine Abfrage in der Ansicht als Benutzer aus, der keine Berechtigung für die Maskierungsrichtlinie hat:
SELECT * FROM myview_mp;
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());
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);
Löschen Sie die Tabelle, die in der Zeilenzugriffsrichtlinie verwendet wird:
DROP TABLE allowed_roles;
Fragen Sie die Ansicht als Benutzer ab, der nicht über OWNERSHIP-Berechtigungen für die Zeilenzugriffsrichtlinie verfügt:
SELECT * FROM myview_rap;
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