SNOWFLAKE 데이터베이스 역할
SNOWFLAKE 데이터베이스 역할 (SNOWFLAKE Database Roles)
계정이 프로비저닝되면 SNOWFLAKE 데이터베이스가 자동으로 임포트돼요. 이 데이터베이스는 Snowflake가 Secure Data Sharing을 사용해 조직과 계정에 대한 객체 메타데이터와 기타 사용량 지표를 제공하는 예시죠. SNOWFLAKE 데이터베이스의 스키마 객체에 대한 접근은 여러 데이터베이스 역할(database role)로 제어됩니다.
본문
ACCOUNT_USAGE 스키마
ACCOUNT_USAGE 스키마에는 각각 특정 뷰에 대해 SELECT 권한이 부여된 네 개의 SNOWFLAKE 데이터베이스 역할이 정의되어 있어요.
| 역할 | 목적과 설명 |
|---|---|
OBJECT_VIEWER |
객체 메타데이터에 대한 가시성을 제공. |
USAGE_VIEWER |
과거 사용량 정보에 대한 가시성을 제공. |
GOVERNANCE_VIEWER |
데이터 거버넌스 관련 정보에 대한 가시성을 제공. |
SECURITY_VIEWER |
보안 기반 정보에 대한 가시성을 제공. |
ACCOUNT_USAGE 뷰에 접근하는 데 필요한 데이터베이스 역할
OBJECT_VIEWER, USAGE_VIEWER, GOVERNANCE_VIEWER, SECURITY_VIEWER 역할은 공유 SNOWFLAKE 데이터베이스의 Account Usage 뷰를 조회할 수 있는 SELECT 권한을 가져요. 뷰별 접근 역할은 다음과 같습니다.
GOVERNANCE_VIEWER (데이터 거버넌스 관련 뷰):
ACCESS_HISTORY,AGGREGATE_ACCESS_HISTORY,AGGREGATE_QUERY_HISTORY,AGGREGATION_POLICIESCONTACT_REFERENCES,CONTACTSDATA_CLASSIFICATION_HISTORY,DATA_CLASSIFICATION_LATESTJOIN_POLICIES,MASKING_POLICIES,POLICY_REFERENCESPRIVACY_BUDGETS,PRIVACY_POLICIES,PROJECTION_POLICIESQUERY_ACCELERATION_ELIGIBLE,QUERY_HISTORY,QUERY_INSIGHTSROW_ACCESS_POLICIES,STORAGE_LIFECYCLE_POLICIES,STORAGE_LIFECYCLE_POLICY_HISTORYTAG_REFERENCES,TAGS
USAGE_VIEWER (과거 사용량 관련 뷰):
ANOMALIES_DAILY,APPLICATION_DAILY_USAGE_HISTORYARCHIVE_STORAGE_DATA_RETRIEVAL_USAGE_HISTORY,AUTOMATIC_CLUSTERING_HISTORY,BLOCK_STORAGE_HISTORYCATALOG_LINKED_DATABASE_USAGE_HISTORY,CLASS_INSTANCES,CLASSESCOLUMN_QUERY_PRUNING_HISTORY,COPY_FILES_HISTORY,COPY_HISTORYCORTEX_AGENT_USAGE_HISTORY,CORTEX_AI_FUNCTIONS_USAGE_HISTORY,CORTEX_AI_GUARDRAILS_USAGE_HISTORY,CORTEX_AISQL_USAGE_HISTORY,CORTEX_ANALYST_USAGE_HISTORY,CORTEX_DOCUMENT_PROCESSING_USAGE_HISTORY,CORTEX_FINE_TUNING_USAGE_HISTORY,CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY,CORTEX_FUNCTIONS_USAGE_HISTORY,CORTEX_PROVISIONED_THROUGHPUT_USAGE_HISTORY,CORTEX_REST_API_USAGE_HISTORY,CORTEX_SEARCH_BATCH_QUERY_USAGE_HISTORY,CORTEX_SEARCH_DAILY_USAGE_HISTORY,CORTEX_SEARCH_SERVING_USAGE_HISTORYDATA_METRIC_FUNCTION_EXPECTATIONS(또는GOVERNANCE_VIEWER),DATA_METRIC_FUNCTION_REFERENCES(또는GOVERNANCE_VIEWER),DATA_QUALITY_MONITORING_USAGE_HISTORY,DATA_TRANSFER_HISTORY,DATABASE_STORAGE_USAGE_HISTORYDOCUMENT_AI_USAGE_HISTORY,DYNAMIC_TABLE_REFRESH_HISTORY,EVENT_USAGE_HISTORY,EXTERNAL_ACCESS_HISTORYHYBRID_TABLE_USAGE_HISTORY,ICEBERG_STORAGE_OPTIMIZATION_HISTORY,INTERNAL_DATA_TRANSFER_HISTORYLOAD_HISTORY,MATERIALIZED_VIEW_REFRESH_HISTORY,METERING_DAILY_HISTORY,METERING_HISTORY,MODEL_SERVING_USAGE_HISTORYNOTEBOOKS_CONTAINER_RUNTIME_HISTORY,ONLINE_FEATURE_TABLE_REFRESH_HISTORY,OPENFLOW_USAGE_HISTORYPIPE_USAGE_HISTORY,POSTGRES_COMPUTE_USAGE_HISTORY,POSTGRES_STORAGE_USAGE_HISTORYQUERY_ATTRIBUTION_HISTORY(또는GOVERNANCE_VIEWER),QUERY_METERING_HISTORY(또는GOVERNANCE_VIEWER)REPLICATION_GROUP_REFRESH_HISTORY,REPLICATION_GROUP_USAGE_HISTORY,REPLICATION_USAGE_HISTORYSEARCH_OPTIMIZATION_BENEFITS,SEARCH_OPTIMIZATION_HISTORY,SERVERLESS_ALERT_HISTORY,SERVERLESS_TASK_HISTORYSNOWFLAKE_COCO_USAGE_HISTORY,SNOWFLAKE_COWORK_USAGE_HISTORY,SNOWPARK_CONTAINER_SERVICES_HISTORY,SNOWPIPE_STREAMING_CHANNEL_HISTORYSTAGE_STORAGE_USAGE_HISTORY,STORAGE_REQUEST_HISTORY,STORAGE_USAGETABLE_DML_HISTORY,TABLE_PRUNING_HISTORY,TABLE_QUERY_PRUNING_HISTORY,TABLE_STORAGE_METRICS,TASK_HISTORYWAREHOUSE_EVENTS_HISTORY,WAREHOUSE_LOAD_HISTORY,WAREHOUSE_METERING_HISTORY
OBJECT_VIEWER (객체 메타데이터 관련 뷰):
BLOCK_STORAGE_SNAPSHOTS,COLUMNS,COMPLETE_TASK_GRAPHSDATABASES,ELEMENT_TYPES,FIELDS,FILE_FORMATS,FUNCTIONSHYBRID_TABLES,INDEX_COLUMNS,INDEXESOBJECT_ACCESS_REQUEST_HISTORY,OBJECT_DEPENDENCIESPIPES,PROCEDURESREFERENTIAL_CONSTRAINTS,REPLICATION_GROUPS,RESOURCE_MONITORSSCHEMATA,SEMANTIC_DIMENSIONS,SEMANTIC_FACTS,SEMANTIC_METRICS,SEMANTIC_RELATIONSHIPS,SEMANTIC_TABLES,SEMANTIC_VIEWS,SEQUENCES,SERVICES,STAGESTABLE_CONSTRAINTS,TABLES,TASKSVIEWS
SECURITY_VIEWER (보안 관련 뷰):
APPLICATION_CALLBACK_HISTORY,APPLICATION_CONFIGURATIONS,APPLICATION_CONFIGURATION_VALUE_HISTORY,APPLICATION_SPECIFICATION_STATUS_HISTORY,APPLICATION_SPECIFICATIONSCREDENTIALSGRANTS_TO_ROLES,GRANTS_TO_SHARES,GRANTS_TO_USERSINGRESS_NETWORK_ACCESS_HISTORY,INTERNAL_STAGE_NETWORK_ACCESS_HISTORYLISTINGS,LOGIN_HISTORYNETWORK_POLICIES,NETWORK_RULE_REFERENCES,NETWORK_RULESOUTBOUND_PRIVATELINK_ENDPOINTSPASSWORD_POLICIESROLESSECRETS,SESSION_POLICIES,SESSIONS,SHARESTRUST_CENTER_FINDINGSUSERS
일부 뷰는 두 역할 모두로 접근할 수 있어요. 예를 들어 POLICY_REFERENCES는 GOVERNANCE_VIEWER 또는 SECURITY_VIEWER, DATA_METRIC_FUNCTION_*는 USAGE_VIEWER 또는 GOVERNANCE_VIEWER, TAGS는 OBJECT_VIEWER 또는 GOVERNANCE_VIEWER로 접근 가능합니다. SNAPSHOT_OPERATION_HISTORY, SNAPSHOT_POLICIES, SNAPSHOT_SETS, SNAPSHOT_STORAGE_USAGE, SNAPSHOTS 뷰는 사용 중지(deprecated)되었으며 OBJECT_VIEWER로 접근할 수 있어요.
READER_ACCOUNT_USAGE 스키마
READER_USAGE_VIEWER SNOWFLAKE 데이터베이스 역할은 모든 READER_ACCOUNT_USAGE 뷰에 대해 SELECT 권한이 부여돼요. 리더 계정은 클라이언트가 만들기 때문에, READER_USAGE_VIEWER 역할은 리더 계정 사용을 모니터링하는 데 쓰이는 역할들에 부여되는 것이 일반적이에요. 관련 뷰: LOGIN_HISTORY, QUERY_HISTORY, RESOURCE_MONITORS, STORAGE_USAGE, WAREHOUSE_METERING_HISTORY.
ORGANIZATION_USAGE 스키마
ORGANIZATION_USAGE_VIEWER, ORGANIZATION_BILLING_VIEWER, ORGANIZATION_ACCOUNTS_VIEWER SNOWFLAKE 데이터베이스 역할은 공유 SNOWFLAKE 데이터베이스의 Organization Usage 뷰에 대해 SELECT 권한이 부여돼요.
- ORGANIZATION_BILLING_VIEWER: 청구/비용 관련 뷰 —
ANOMALIES_IN_CURRENCY_DAILY,CONTRACT_ITEMS,LISTING_AUTO_FULFILLMENT_USAGE_HISTORY,RATE_SHEET_DAILY,REMAINING_BALANCE_DAILY,USAGE_IN_CURRENCY_DAILY,MARKETPLACE_DISBURSEMENT_REPORT,DATA_TRANSFER_DAILY_HISTORY,DATA_TRANSFER_HISTORY,DATABASE_STORAGE_USAGE_HISTORY,AUTOMATIC_CLUSTERING_HISTORY,MARKETPLACE_PAID_USAGE_DAILY,MATERIALIZED_VIEW_REFRESH_HISTORY,METERING_DAILY_HISTORY,MONETIZED_USAGE_DAILY,PIPE_USAGE_HISTORY,QUERY_ACCELERATION_HISTORY,REPLICATION_GROUP_USAGE_HISTORY,REPLICATION_USAGE_HISTORY,SEARCH_OPTIMIZATION_HISTORY,STAGE_STORAGE_USAGE_HISTORY,STORAGE_DAILY_HISTORY,WAREHOUSE_METERING_HISTORY. - ORGANIZATION_USAGE_VIEWER:
ACCOUNTS,DATA_TRANSFER_DAILY_HISTORY,DATABASE_STORAGE_USAGE_HISTORY,AUTOMATIC_CLUSTERING_HISTORY,MATERIALIZED_VIEW_REFRESH_HISTORY,METERING_DAILY_HISTORY,PIPE_USAGE_HISTORY,QUERY_ACCELERATION_HISTORY,REPLICATION_GROUP_USAGE_HISTORY,REPLICATION_USAGE_HISTORY,SEARCH_OPTIMIZATION_HISTORY,STAGE_STORAGE_USAGE_HISTORY,STORAGE_DAILY_HISTORY,WAREHOUSE_METERING_HISTORY. - ORGANIZATION_ACCOUNTS_VIEWER:
ACCOUNTS.
(뷰별 정확한 역할 매핑은 위 문서 표를 참고해요. 일부 뷰는 한 역할에만, 일부는 두 역할 이상에 속할 수 있어요.)
CORE 스키마
CORE_VIEWER SNOWFLAKE 데이터베이스 역할은 공유 SNOWFLAKE 데이터베이스를 포함하는 모든 Snowflake 계정의 PUBLIC 역할에 부여돼요. CORE 스키마의 모든 Snowflake 정의 함수와 번들에는 USAGE 권한이 부여됩니다.
- Budget 클래스:
BUDGET_CREATOR데이터베이스 역할은SNOWFLAKE.CORE스키마와 그 안의BUDGET클래스에 대한USAGE권한이 부여돼요. 이 부여 덕분에BUDGET_CREATOR역할을 가진 사용자는BUDGET클래스의 인스턴스를 만들 수 있습니다. - 태그 객체:
CORE_VIEWER데이터베이스 역할은 분류 시스템 태그SNOWFLAKE.CORE.PRIVACY_CATEGORY와SNOWFLAKE.CORE.SEMANTIC_CATEGORY에 대한APPLY권한이 부여돼요. 이를 통해CORE_VIEWER데이터베이스 역할이 부여된 역할을 가진 사용자는 이 시스템 태그를 컬럼에 할당할 수 있습니다.
ALERT 스키마
ALERT_VIEWER SNOWFLAKE 데이터베이스 역할은 이 스키마에 정의된 함수에 대한 USAGE 권한이 부여돼요.
ML 스키마
ML_USER SNOWFLAKE 데이터베이스 역할은 공유 SNOWFLAKE 데이터베이스를 포함하는 모든 Snowflake 계정의 PUBLIC 역할에 부여되며, 고객이 ML 함수에 접근하고 사용할 수 있게 해줘요. 이 함수들을 호출하려면 사용자는 ML 스키마에 대한 USAGE 권한도 있어야 합니다.
MONITORING 스키마
MONITORING_VIEWER 데이터베이스 역할은 MONITORING 스키마의 모든 뷰에 대한 SELECT 권한이 있어요. 이 역할은 공유 SNOWFLAKE 데이터베이스를 포함하는 모든 Snowflake 계정의 PUBLIC 역할에 부여됩니다.
기타 SNOWFLAKE 데이터베이스 역할
SNOWFLAKE.CLASSIFICATION_ADMIN: 데이터 엔지니어나 스튜어드가CLASSIFICATION_PROFILE클래스의 인스턴스를 만들 수 있게 해줘요. 분류 프로필은 민감 데이터 분류를 구현하는 데 사용돼요.SNOWFLAKE.CORTEX_AGENT_USER: 다른 Cortex 기능에 대한 접근을 부여하지 않고 Cortex Agents API에 대한 접근을 부여해요. Cortex Agents API를 쓰려면SNOWFLAKE.CORTEX_USER또는SNOWFLAKE.CORTEX_AGENT_USER역할이 필요해요. 기본적으로CORTEX_USER가PUBLIC에 부여되므로, 세밀한 제어를 원하면PUBLIC에서 해지하고 특정 역할에 부여하세요.SNOWFLAKE.AI_FUNCTIONS_USER: 집계 함수AI_AGG,AI_SUMMARIZE_AGG를 제외한 Cortex 스칼라 AI 함수에 대한 접근을 부여해요. 기본적으로 어떤 역할에도 부여되지 않습니다.SNOWFLAKE.CORTEX_EMBED_USER: 임베딩 함수AI_EMBED,AI_MULTI_EMBED,SNOWFLAKE.CORTEX.EMBED_768,SNOWFLAKE.CORTEX_EMBED_TEXT_1024에 대한 접근을 부여해요. 기본적으로 어떤 역할에도 부여되지 않습니다.SNOWFLAKE.CORTEX_REST_API_USER: 다른 Cortex 기능 없이 Cortex REST API에 대한 접근을 부여해요. 기본적으로 어떤 역할에도 부여되지 않습니다.SNOWFLAKE.CORTEX_USER: Snowflake Cortex 기능에 대한 접근을 부여해요. 기본적으로PUBLIC역할에 부여됩니다.SNOWFLAKE.COPILOT_USER: Snowsight의 Cortex Code 기능에 대한 접근을 허용해요. 기본적으로PUBLIC역할에 부여됩니다.
SNOWFLAKE 데이터베이스 역할 사용하기
관리자는 GRANT DATABASE ROLE을 사용해 SNOWFLAKE 데이터베이스 역할을 다른 역할에 할당하고, 그 역할을 다시 사용자에게 부여할 수 있어요. 이렇게 하면 사용자가 SNOWFLAKE 데이터베이스의 특정 뷰 하위 집합에 접근할 수 있게 됩니다.
다음 예제는 SNOWFLAKE 데이터베이스 객체 메타데이터를 볼 수 있는 역할을 만드는 과정을 보여줘요.
CREATE ROLE CAN_VIEWMD COMMENT = 'This role can view metadata per SNOWFLAKE database role definitions';
GRANT DATABASE ROLE OBJECT_VIEWER TO ROLE CAN_VIEWMD;
GRANT ROLE CAN_VIEWMD TO USER smith;
역할을 만들 수 있는 사용자는 USERADMIN 시스템 역할 이상, 또는 계정에서 CREATE ROLE 권한을 가진 역할뿐이에요. SNOWFLAKE 데이터베이스 역할을 부여할 수 있는 사용자는 OWNERSHIP 역할을 가진 사용자뿐이며, 역할을 사용자에게 부여할 수 있는 사용자는 SECURITYADMIN 역할을 가진 사용자뿐입니다.