SHOW GRANTS

SHOW GRANTS

SHOW GRANTS 명령은 역할, 사용자, 공유(share)에 명시적으로 부여된 모든 접근 제어 권한(privilege) 목록을 보여주는 명령이에요. 권한과 역할에 대한 자세한 내용은 Access Control 개요를, 공유에 대해서는 Secure Data Sharing을 참고해요.

출처: 문서

본문

참고: SHOW GRANTS는 다른 모든 SHOW <objects> 명령과 다른 구문을 사용하는 특수한 변형이에요.

구문 (Syntax)

SHOW GRANTS [ LIMIT <rows> ]

SHOW GRANTS ON ACCOUNT [ LIMIT <rows> ]

SHOW GRANTS ON <object_type> <object_name> [ LIMIT <rows> ]

SHOW GRANTS TO {
  APPLICATION <app_name>
  | APPLICATION ROLE [ <app_name>. ]<app_role_name>
  | SERVICE ROLE <service_name>!<service_role_name>
  | <class_name> ROLE <instance_name>!<instance_role_name>
  | ROLE <role_name>
  | SHARE <share_name> [ IN APPLICATION PACKAGE <app_package_name> ]
  | USER <user_name>
} [ LIMIT <rows> ]

SHOW GRANTS OF {
  APPLICATION ROLE <app_role_name>
  | SERVICE ROLE <service_name>!<service_role_name>
  | ROLE <role_name>
} [ LIMIT <rows> ]

SHOW GRANTS OF SHARE <share_name> [ LIMIT <rows> ]

SHOW FUTURE GRANTS IN SCHEMA { <schema_name> } [ LIMIT <rows> ]

SHOW FUTURE GRANTS IN DATABASE { <database_name> } [ LIMIT <rows> ]

SHOW FUTURE GRANTS TO ROLE <role_name> [ LIMIT <rows> ]

SHOW FUTURE GRANTS TO DATABASE ROLE <database_role_name>

변형 (Variants)

  • SHOW GRANTSSHOW GRANTS TO USER current_user와 구문상 동일해요. 현재 사용자에게 부여된 모든 역할을 나열해요.

  • LIMIT <rows> — 반환되는 최대 행 수를 선택적으로 제한해요. 기본값: 없음.

  • SHOW GRANTS ON ... — 역할에 부여된 계정 수준(전역) 권한을 모두 나열해요.

    • ACCOUNT — 역할에 부여된 모든 계정 수준(전역) 권한을 나열해요.
    • object_type object_name — 객체에 부여된 모든 권한을 나열해요. 데이터베이스 역할에 대해서는 완전 정규화된 이름(database_name.database_role_name)이나 상대 이름(database_role_name)을 사용할 수 있어요. 상대 이름을 사용하면 Snowflake가 세션의 데이터베이스를 사용해 해석해요.
  • SHOW GRANTS TO ... — 지정한 대상에 부여된 권한·역할을 나열해요.

    • APPLICATION app_name — 앱에 부여된 모든 권한·역할을 나열해요.
    • APPLICATION ROLE [ app_name. ]app_role_name — 앱 역할에 부여된 모든 권한·역할을 나열해요. app_name은 선택 사항이며, 지정하지 않으면 Snowflake가 현재 앱을 사용해요. 앱이 데이터베이스가 아니면 결과를 반환하지 않아요.
    • SERVICE ROLE service_name!service_role_name — 서비스 역할에 USAGE 권한이 부여된 서비스 엔드포인트를 나열해요.
    • class_name ROLE instance_name!instance_role_name — 인스턴스 역할에 부여된 모든 권한·역할을 나열해요. class_name을 포함하는 데이터베이스·스키마가 사용 중이거나 검색 경로에 없으면 클래스의 완전 정규화된 이름을 지정해요(예: SNOWFLAKE.CORE.BUDGET).
    • ROLE role_name — 역할에 부여된 모든 권한·역할을 나열해요. 역할이 임시 객체에 부여를 가지면 그 부여는 임시 객체가 만들어진 세션에만 존재해요. SHOW GRANTS TO ROLE PUBLIC은 PUBLIC 역할에 부여된 다음 취소 불가능한 데이터베이스 역할들을 노출해요: ALERT_VIEWER, CLASSIFICATION_VIEWER, CORE_VIEWER, DATA_PRIVACY_VIEWER, ML_USER, MONITORING_VIEWER, NOTIFICATION_VIEWER, SNOWFLAKE_TEMPLATE_SNOWGIT_VIEWER, SPCS_REGISTRY_VIEWER.
    • SHARE share_name — 공유에 부여된 모든 권한을 나열해요.
    • SHARE share_name IN APPLICATION PACKAGE app_package_name — 애플리케이션 패키지의 공유에 부여된 모든 권한·역할을 나열해요.
    • USER user_name — 사용자에게 부여된 모든 역할을 나열해요. 모든 사용자에게 자동 제공되는 PUBLIC 역할은 나열되지 않아요.
  • SHOW GRANTS OF ... — 지정한 객체가 부여된 모든 사용자·역할을 나열해요.

    • APPLICATION ROLE [ app_name. ]app_role — 앱 역할이 부여된 모든 사용자·역할을 나열해요.
    • SERVICE ROLE service_name!service_role_name — 서비스 역할이 부여된 모든 사용자·역할을 나열해요.
    • ROLE role_name — 역할이 부여된 모든 사용자·역할을 나열해요.
    • SHARE share_name — 공유를 소비 중인 모든 계정을 나열해요. 아직 소비하지 않은 계정은 제외돼요. 추가된 모든 계정을 보려면 SNOWFLAKE.ACCOUNT_USAGE.SHARES 뷰를 조회해요.
  • SHOW FUTURE GRANTS IN ... — 지정한 유형의 새(미래) 객체에 대해 역할에 부여된 모든 권한을 나열해요.

    • SCHEMA database_name.schema_name — 스키마의 새 객체에 부여된 권한을 나열해요. database_name.은 선택 사항이에요 (현재 데이터베이스의 스키마를 조회할 때).
    • DATABASE database_name — 데이터베이스의 새 객체에 부여된 권한을 나열해요.
    • SHOW FUTURE GRANTS TO ROLE role_name — 역할에 부여된 데이터베이스·스키마의 새 객체 권한을 나열해요.
    • SHOW FUTURE GRANTS TO DATABASE ROLE database_role_name — 데이터베이스 역할에 부여된 데이터베이스·스키마의 새 객체 권한을 나열해요. 공유된 데이터베이스 역할은 미래 부여(future grants)를 지원하지 않아요. 자세한 내용은 GRANT DATABASE ROLE … TO SHARE 명령의 사용 참고 사항을 참고해요.

사용 참고 사항 (Usage notes)

  • granted_by 컬럼은 수신자(grantee)에게 권한 부여를 승인한 역할(승인자, grantor)을 나타내요. GRANT … TO ROLE로 권한을 부여할 때 다음 승인 규칙이 적용돼요:
    • 활성 역할이 객체 소유자(OWNERSHIP 보유)이면 그 역할이 grantor예요.
    • 활성 역할이 승인된 부여 옵션(GRANT OPTION)으로 지정 권한을 보유하면 (여러 활성 역할이 이 기준을 충족하면 어떤 역할이 grantor가 될지 비결정적이에요), grant option을 보유한 역할이 grantor예요.
    • 활성 역할이 전역 MANAGE GRANTS 권한을 보유하면, grantor 역할은 객체 소유자이지 MANAGE GRANTS를 보유한 역할이 아니에요. 즉 MANAGE GRANTS 권한은 역할이 그 객체에 대한 권한 부여를 위해 객체 소유자를 가장(impersonate)할 수 있게 해줘요.
    • granted_by 컬럼이 비어 있으면 권한이 Snowflake SYSTEM 역할에 의해 부여된 것. 일부 내부 작업은 이 역할로 수행돼요. SYSTEM 역할이 승인한 권한 부여는 고객이 수정할 수 없어요.
  • SHOW GRANTS … TO SHARE IN APPLICATION PACKAGE 구문 사용 시:
    • granted_by 컬럼은 애플리케이션 패키지 이름을 지정해요.
    • grantee_name 컬럼은 granted_toAPPLICATION PACKAGE SHARE임을 지정해요.
    • granted_by_role_type 컬럼은 부여를 수행한 grantor 역할 유형(ROLE 또는 DATABASE_ROLE)을 지정해요. 이 컬럼은 SHOW GRANTS ON 구문 사용 시에만 출력에 나타나요.
  • 데이터 공유 소비자는 공유에 부여된 객체의 권한(예: 테이블 SELECT)만 볼 수 있어요. 부여 설정에 따라 소비자가 실행한 SHOW GRANTS 출력은 공유 객체에 대해 granted_to, grantee_name, granted_by, granted_by_role_type 컬럼에 빈 값을 표시할 수 있어요. 예를 들어 계정 역할이 공유 객체를 소유하면 소비자는 공유 객체의 OWNERSHIP 권한을 볼 수 없어요 (계정 역할은 공유되지 않으므로 소유 역할을 확인할 수 없기 때문). 데이터베이스 역할이 공유 객체를 소유하고 제공자가 데이터베이스 역할을 공유하면 소비자는 공유된 데이터베이스 역할을 확인할 수 있으므로 OWNERSHIP 권한을 볼 수 있어요.
  • grant_options 컬럼은 관리 접근 스키마(managed access schema)의 객체에 대해 SHOW GRANTS ON <object_type> <object_name> 명령을 실행하면 FALSE를 반환해요.
  • SHOW GRANTS ON SCHEMA <managed_access_schema> 명령을 실행하면 관리 접근 스키마를 소유한 역할의 OWNERSHIP과 MANAGE GRANTS 권한이 포함돼요.
  • 데이터베이스 역할과 SHOW FUTURE GRANTS TO DATABASE ROLE 구문을 사용하면, 이 명령은 공유에 부여되지 않은 데이터베이스 역할에 대해서도 결과를 반환해요. 데이터 공유 소비자 계정에서 공유된 데이터베이스 역할에 미래 권한이 부여되면 이 명령은 어떤 행도 반환하지 않아요. 다만 계정과 이 명령의 미래 권한 지원 시점에 따라 다음과 같은 오류 메시지가 보일 수 있어요: Invalid state of the shared database role. Please revoke the future grants to the shared database role. 소비자로서 제공자에게 공유된 데이터베이스 역할에서 미래 부여를 취소하도록 요청해요.
  • 실행에 실행 중인 웨어하우스를 요구하지 않아요.
  • 현재 역할에 하나 이상의 접근 권한이 부여된 객체만 반환해요.
  • MANAGE GRANTS 권한은 보유자가 계정의 모든 객체를 볼 수 있게 해줘요. 기본적으로 ACCOUNTADMIN과 SECURITYADMIN 역할만 이 권한을 가져요.
  • 출력을 후처리하려면 파이프 연산자(|>) 또는 RESULT_SCAN 함수를 사용할 수 있어요. 출력 컬럼을 참조할 때는 컬럼 이름을 큰따옴표로 감싸서 사용해요.

예제 (Examples)

sales 데이터베이스에 부여된 모든 권한을 나열해요:

SHOW GRANTS ON DATABASE sales;

analyst 역할에 부여된 모든 권한을 나열해요:

SHOW GRANTS TO ROLE analyst;

PUBLIC 역할에 부여된 (취소 불가능한 데이터베이스 역할만 표시하도록 자른) 권한을 나열해요:

SHOW GRANTS TO ROLE public;

user1 사용자에게 부여된 모든 역할을 나열해요:

SHOW GRANTS TO USER user1;

인터랙티브 테이블에 부여된 모든 권한을 표시해요:

SHOW GRANTS ON TABLE my_interactive_tbl;

analyst 역할이 부여된 모든 역할·사용자를 나열해요:

SHOW GRANTS OF ROLE analyst;

sales.public 스키마의 미래 객체에 부여된 모든 권한을 나열해요:

SHOW FUTURE GRANTS IN SCHEMA sales.public;

cost.budgets.my_budget!ADMIN이라는 인스턴스 역할에 부여된 모든 역할 권한을 나열해요:

SHOW GRANTS TO SNOWFLAKE.CORE.BUDGET ROLE cost.budgets.my_budget!ADMIN;

더 알아보기 (Learn more)