Problembehandlung bei der Zugriffssteuerung

Wenn eine SQL-Anweisung fehlschlägt, weil die Rolle, die zum Ausführen der Abfrage verwendet wird, nicht über die erforderlichen Zugriffssteuerungsrechte verfügt, können Sie die EXPLAIN_PRIVILEGES-Funktion verwenden, um genau festzustellen, welche Berechtigungen fehlen.

Problembehandlung als Admin

Eine Person mit Administratorrechten, die über Berechtigungen für alle Objekte in Snowflake verfügt, kann die EXPLAIN_PRIVILEGES-Funktion für eine beliebige SQL-Anweisung aufrufen.

Tipp

Wenn Sie möchten, dass jemand, der keine Berechtigung für Objekte hat, Zugriffssteuerungsprobleme mit EXPLAIN_PRIVILEGES diagnostizieren kann, gewähren Sie dieser Person die RESOLVE ALL ON ACCOUNT-Berechtigung.

Beispiel: Auflisten aller Berechtigungen, die zum Ausführen einer SQL-Anweisung erforderlich sind

CALL EXPLAIN_PRIVILEGES(statement => 'DESC SCHEMA mydb.myschema');

Beispielausgabe:

{
  "allOf": [
    {
      "privilege": "<ANY>",
      "objectType": "DATABASE",
      "objectName": "MYDB"
    },
    {
      "privilege": "MONITOR",
      "objectType": "SCHEMA",
      "objectName": "MYDB.MYSCHEMA"
    }
  ]
}

Diese Ausgabe zeigt an, dass Sie eine beliebige Berechtigung für die Datenbank MYDB sowie die MONITOR-Berechtigung für das Schema MYDB.MYSCHEMA benötigen.

Beispiel: Auflisten fehlender Berechtigungen für eine bestimmte Rolle

Der folgende Aufruf legt fest, ob die analyst_role (einschließlich der Berechtigungen aus den ihr zugewiesenen Rollen) über die erforderlichen Berechtigungen zum Ausführen der SELECT-Anweisung verfügt, und, wenn nicht, die fehlenden Berechtigungen zurückgibt.

CALL EXPLAIN_PRIVILEGES(
  statement => 'SELECT * FROM mydb.myschema.mytable',
  missing_only => true,
  for_role => 'analyst_role');

Problembehandlung bei Ihrer eigenen Abfrage

Sie müssen mindestens eine Berechtigung für die Objekte haben, auf die in Ihrer Abfrage verwiesen wird, um die EXPLAIN_PRIVILEGES-Funktion aufrufen zu können. Wenn diese Berechtigungen für das Objekt nicht ausreichen, um Ihre Abfrage erfolgreich auszuführen, rufen Sie die EXPLAIN_PRIVILEGES-Funktion auf, wobei das missing_only-Argument auf true gesetzt ist, um die erforderlichen zusätzlichen Berechtigungen zu bestimmen.

Wenn Sie beispielsweise über Berechtigungen für die mydb-,``myschema``- und mytable-Objekte verfügen, aber Ihre Abfrage aufgrund von Problemen mit der Zugriffssteuerung immer noch fehlschlägt, führen Sie den folgenden Befehl aus:

CALL EXPLAIN_PRIVILEGES(
  statement => 'SELECT * FROM mydb.myschema.mytable',
  missing_only => true);

Wenn Ihrer aktuellen Rolle Berechtigungen fehlen, gibt die Funktion die spezifischen Berechtigungen zurück, die Sie benötigen. Beispiel:

{
  "allOf": [
    {
      "privilege": "SELECT",
      "objectType": "TABLE",
      "objectName": "MYDB.MYSCHEMA.MYTABLE"
    }
  ]
}