카테고리:

시스템 함수 (시스템 정보)

EXPLAIN_PRIVILEGES

SQL 문을 실행하는 데 필요한 권한을 설명하는 JSON 문자열을 반환합니다. 이 함수는 주어진 SQL 문에 대한 권한 부여 요구 사항을 분석하며, 필수 권한, 오브젝트 유형 및 오브젝트 이름을 보여주는 정형 형식으로 반환합니다.

참고 항목:

GRANT <privileges> … TO ROLE, SHOW GRANTS

구문

EXPLAIN_PRIVILEGES(
  statement => '<sql_statement>'
  [, missing_only => <boolean> ]
  [, for_role => '<role_name>' ])

인자

statement => 'sql_statement'

분석할 SQL 문이 포함된 문자열입니다. 문을 분석하여 문을 실행하는 데 필요한 권한을 결정합니다.

missing_only => boolean

출력 모드를 제어하는 부울 값:

  • false - 현재 사용자 또는 지정된 역할에 이러한 권한이 있는지 여부에 관계없이 문을 실행하는 데 필요한 모든 권한을 반환합니다.

  • true — 누락된 권한(현재 사용자 또는 지정된 역할이 현재 보유하지 않은 권한)만 반환합니다. 필요한 모든 권한이 있는 경우 ``{“authorized”: true}``를 반환합니다.

기본값: false

for_role => 'role_name'

권한을 확인할 역할의 이름입니다. 이 인자는 ``missing_only => true``인 경우에만 사용됩니다. 문을 실행하기 위해 역할(및 부여된 역할)에 누락된 모든 권한을 반환합니다.

반환

함수는 계층 구조에서 필요한 권한을 설명하는 JSON 오브젝트가 포함된 VARCHAR 값을 반환합니다. JSON에는 다음 노드 유형이 포함될 수 있습니다.

권한 노드 — 단일 권한 요구 사항을 나타냅니다.

{
  "privilege": "<privilege_name>",
  "objectType": "<object_type>",
  "objectName": "<fully_qualified_object_name>"
}
  • privilege — 필수 권한의 이름(예: USAGE, SELECT, OWNERSHIP)입니다. 오브젝트에 대한 권한이 충분함을 나타내는 특수 값 ``<ANY>``입니다.

  • objectType — 오브젝트 유형(예: DATABASE, TABLE, SCHEMA, ACCOUNT)입니다.

  • objectName — 오브젝트의 정규화된 이름입니다.

AND 노드 — 포함된 모든 권한이 필요합니다.

{
  "allOf": [
    /* ... permissions or nodes */
  ]
}

OR 노드 — 포함된 권한 중 하나 이상이 필요합니다.

{
  "oneOf": [
    /* ... permissions or nodes */
  ]
}

의사결정 노드 — 인증 상태를 나타냅니다.

{
  "authorized": true
}
  • authorized: true — 모든 필수 권한이 있습니다.

  • authorized: false — 권한 부여로 문에 권한을 부여할 수 없습니다.

액세스 제어 요구 사항

SQL 문에서 이름으로 오브젝트를 참조할 수 있는 권한이 있어야 합니다. 가장 일반적으로, 이 요구 사항은 오브젝트에 대해 하나 이상의 권한이 있으면 충족됩니다. RESOLVE ALL ON ACCOUNT 권한도 이 요구 사항을 충족합니다.

사용법 노트

  • statement 인자는 상수 식이어야 합니다. 열 값 또는 상수가 아닌 기타 식을 전달할 수 없습니다.

  • 다중 문 SQL은 지원되지 않습니다. 함수는 단일 SQL 문만 허용합니다.

  • 일부 SQL 문은 권한 분석에 지원되지 않습니다(예: GRANT, REVOKE, USE ROLE, USE SECONDARY ROLES).

  • 일부 SQL 문에는 권한 분석에 지원되지 않는 권한 확인이 있습니다. 이러한 확인은 출력에서 생략됩니다.

  • 권한 분석에는 일부 간접 권한 확인이 지원되지 않습니다. 이러한 확인은 출력에서 생략됩니다. 예를 들어 RESOLVE ALL ON ACCOUNT는 데이터베이스를 확인하기 위한 옵션으로 포함되지 않습니다.

  • 오브젝트를 확인할 수 없는 경우 함수는 문에 모든 오브젝트에 대한 액세스가 필요하다는 오류를 반환합니다.

  • <ANY> 권한은 오브젝트에 대한 모든 권한이 충분함을 의미합니다(예: OWNERSHIP으로도 충분한 USAGE 확인의 경우).

다음 예제에서는 EXPLAIN_GRANTABLE_PRIVILEGES 함수를 호출합니다.

DESC 명령에 대한 권한 설명

스키마를 설명하는 데 필요한 모든 권한을 표시합니다.

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 권한이 필요함을 나타냅니다.

누락된 권한만 확인

현재 사용자에게 누락된 권한을 확인합니다.

CALL EXPLAIN_PRIVILEGES(
  statement => 'DROP TABLE mydb.myschema.mytable',
  missing_only => true);

필요한 모든 권한이 있는 경우 다음을 반환합니다.

{
  "authorized": true
}

권한이 누락된 경우 누락된 권한만 반환합니다.

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

특정 역할에 대해 누락된 권한 확인

특정 역할에 어떤 권한이 있는지 확인합니다.

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

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