액세스 제어 문제 해결하기

쿼리를 실행하는 데 사용되는 역할에 필요한 액세스 제어 권한이 부족하여 SQL 문이 실패하는 경우 EXPLAIN_PRIVILEGES 함수를 사용하여 누락된 권한을 정확히 확인할 수 있습니다.

관리자로 문제 해결하기

Snowflake의 모든 오브젝트에 대한 권한이 있는 관리자는 SQL 문에 대한 EXPLAIN_PRIVILEGES 함수를 호출할 수 있습니다.

오브젝트에 대한 권한이 없는 사용자가 EXPLAIN_PRIVILEGES를 사용하여 액세스 제어 문제를 진단할 수 있도록 하려면 RESOLVE ALL ON ACCOUNT 권한을 부여합니다.

예: SQL 문을 실행하는 데 필요한 모든 권한 나열

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

출력 예:

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

이 출력은 데이터베이스에 대한 MYDB AND 권한 및 스키마 MYDB.MYSCHEMA``에 대한 ``MONITOR 권한이 필요함을 나타냅니다.

예: 특정 역할에 대해 누락된 권한 나열

다음 호출은 ``analyst_role``(부여된 역할의 권한 포함)에 SELECT 문을 실행하는 데 필요한 권한이 있는지 여부를 확인하며, 없는 경우 누락된 권한을 반환합니다.

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

자체 쿼리 문제 해결하기

EXPLAIN_PRIVILEGES 함수를 호출하려면 쿼리에서 참조되는 오브젝트에 대해 하나 이상의 권한이 있어야 합니다. 오브젝트에 대한 이러한 권한이 쿼리를 성공적으로 실행하기에 충분하지 않은 경우 missing_only 인자를 ``true``로 설정하여 EXPLAIN_PRIVILEGES 함수를 호출해 필요한 추가 권한을 결정합니다.

예를 들어 mydb, myschema, mytable 오브젝트에 대한 권한이 있지만 액세스 제어 문제로 인해 쿼리가 계속 실패하는 경우 다음 명령을 실행합니다.

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

현재 역할에 권한이 없는 경우 함수는 필요한 특정 권한을 반환합니다. 예:

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