EXPLAIN_GRANTABLE_PRIVILEGES
EXPLAIN_GRANTABLE_PRIVILEGES
EXPLAIN_GRANTABLE_PRIVILEGES()는 Snowflake의 각 객체 타입에 대한 모든 부여 가능한(grantable) 권한을 나타내는 JSON 문자열을 반환해요. 이 함수는 서로 다른 객체 타입에 어떤 권한을 부여할 수 있는지, 각 권한에 사용할 수 있는 부여 타입을 포함한 종합적인 정보를 제공해요.
함께 보기:
GRANT … TO ROLE , GRANT CALLER
본문
문법
EXPLAIN_GRANTABLE_PRIVILEGES(
[ grantee => '<grantee_type>' ]
[, object_type => '<object_type_name>' ]
[, grant_type => '<grant_type_name>' ])
인자
모든 인자는 선택 사항이며 명명된 매개변수 문법을 사용해요.
grantee => 'grantee_type'
grantee 타입으로 결과를 필터링해요. 유효한 값: ROLE, APPLICATION. 기본값: ROLE. grantee 타입은 사용할 수 있는 권한을 결정해요. 예를 들어 애플리케이션은 객체를 개별 소유할 수 없어요.
object_type => 'object_type_name'
결과를 단일 객체 타입으로 필터링해요. 객체 타입 이름의 단수형(예: 'DATABASE', 'TABLE', 'SCHEMA')을 허용해요. 텍스트는 대소문자를 구분하지 않아요.
grant_type => 'grant_type_name'
특정 부여 타입을 지원하는 권한으로 결과를 필터링해요. 유효한 값: 'INDIVIDUAL' — 개별 객체에 대한 부여. GRANT … TO ROLE 참조. 'ALL' — 현재 모든 객체에 대한 일괄 부여(예: GRANT ... ON ALL TABLES IN SCHEMA). GRANT … TO ROLE 참조. 'FUTURE' — 미래 객체에 대한 일괄 부여(예: GRANT ... ON FUTURE TABLES IN SCHEMA). 데이터베이스 또는 스키마 객체에 대한 미래 부여(Future grants) 참조. 'INHERITED' — 컨테이너의 현재 및 미래 객체 모두에 대한 일괄 부여(ALL과 FUTURE 결합). GRANT … TO ROLE 참조. 'CALLER' — 개별 객체에 대한 호출자 부여. GRANT CALLER 참조. 'INHERITED_CALLER' — 컨테이너의 모든 현재 및 미래 객체에 대한 일괄 호출자 부여(예: GRANT INHERITED CALLER ... ON ALL TABLES IN SCHEMA). GRANT CALLER 참조. 텍스트는 대소문자를 구분하지 않아요.
반환
이 함수는 JSON 배열을 포함하는 VARCHAR를 반환해요. 배열의 각 요소는 객체 타입을 나타내는 JSON 객체이며 다음 구조를 가져요.
{
"parent": "<parent_object_type>",
"singular": "<singular_name>",
"plural": "<plural_name>",
"privileges": {
"<privilege_name>": ["<grant_type>", /* ... additional grant types */],
/* ... additional privileges */
}
}
JSON 필드:
-
parent— 객체 계층 구조에서의 부모 객체 타입(예: SCHEMA는 TABLE의 부모). ACCOUNT 같은 최상위 객체의 경우 문자열은 비어 있어요. -
singular— 객체 타입 이름의 단수형(예: DATABASE). 개별 부여에 사용돼요. -
plural— 객체 타입 이름의 복수형(예: DATABASES). 일괄 부여에 사용돼요. -
privileges— 각 키가 권한 이름이고 각 값이 해당 권한을 부여할 수 있는 방법을 나타내는 부여 타입 이름 배열인 맵.
사용 지침
-
모든 인자는 상수 표현식이어야 해요. 열 값이나 다른 비상수 표현식은 전달할 수 없어요.
-
인자가 제공되지 않으면 함수는 모든 객체 타입에 걸친 역할에 대한 모든 부여 가능한 권한을 반환해요.
예제
다음 예제들은 EXPLAIN_GRANTABLE_PRIVILEGES 함수를 호출해요.
역할에 대한 모든 부여 가능한 권한 가져오기
역할에 대한 모든 객체 타입과 부여 가능한 권한 반환:
CALL EXPLAIN_GRANTABLE_PRIVILEGES();
특정 객체 타입에 대한 권한 가져오기
'DATABASE' 객체 타입에 대한 권한만 반환:
CALL EXPLAIN_GRANTABLE_PRIVILEGES(object_type => 'DATABASE');
예제 출력:
[
{
"parent": "ACCOUNT",
"singular": "DATABASE",
"plural": "DATABASES",
"privileges": {
"APPLYBUDGET": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
"CREATE SCHEMA": ["INDIVIDUAL"],
"IMPORTED PRIVILEGES": ["INDIVIDUAL"],
"MODIFY": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
"MONITOR": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
"OWNERSHIP": ["INDIVIDUAL"],
"REFERENCE_USAGE": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"],
"USAGE": ["ALL", "FUTURE", "INDIVIDUAL", "INHERITED"]
}
}
]
grantee 타입으로 필터링
애플리케이션에 사용할 수 있는 권한 반환:
CALL EXPLAIN_GRANTABLE_PRIVILEGES(grantee => 'APPLICATION');
애플리케이션은 개별 소유를 할 수 없으므로 OWNERSHIP은 'ALL', 'FUTURE', 'INHERITED' 같은 부여 타입만 표시해요.