SNOWFLAKE 데이터베이스 역할

SNOWFLAKE 데이터베이스 역할 (SNOWFLAKE Database Roles)

계정이 프로비저닝되면 SNOWFLAKE 데이터베이스가 자동으로 임포트돼요. 이 데이터베이스는 Snowflake가 Secure Data Sharing을 사용해 조직과 계정에 대한 객체 메타데이터와 기타 사용량 지표를 제공하는 예시죠. SNOWFLAKE 데이터베이스의 스키마 객체에 대한 접근은 여러 데이터베이스 역할(database role)로 제어됩니다.

출처: Snowflake SQL Reference

본문

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_POLICIES
  • CONTACT_REFERENCES, CONTACTS
  • DATA_CLASSIFICATION_HISTORY, DATA_CLASSIFICATION_LATEST
  • JOIN_POLICIES, MASKING_POLICIES, POLICY_REFERENCES
  • PRIVACY_BUDGETS, PRIVACY_POLICIES, PROJECTION_POLICIES
  • QUERY_ACCELERATION_ELIGIBLE, QUERY_HISTORY, QUERY_INSIGHTS
  • ROW_ACCESS_POLICIES, STORAGE_LIFECYCLE_POLICIES, STORAGE_LIFECYCLE_POLICY_HISTORY
  • TAG_REFERENCES, TAGS

USAGE_VIEWER (과거 사용량 관련 뷰):

  • ANOMALIES_DAILY, APPLICATION_DAILY_USAGE_HISTORY
  • ARCHIVE_STORAGE_DATA_RETRIEVAL_USAGE_HISTORY, AUTOMATIC_CLUSTERING_HISTORY, BLOCK_STORAGE_HISTORY
  • CATALOG_LINKED_DATABASE_USAGE_HISTORY, CLASS_INSTANCES, CLASSES
  • COLUMN_QUERY_PRUNING_HISTORY, COPY_FILES_HISTORY, COPY_HISTORY
  • CORTEX_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_HISTORY
  • DATA_METRIC_FUNCTION_EXPECTATIONS (또는 GOVERNANCE_VIEWER), DATA_METRIC_FUNCTION_REFERENCES (또는 GOVERNANCE_VIEWER), DATA_QUALITY_MONITORING_USAGE_HISTORY, DATA_TRANSFER_HISTORY, DATABASE_STORAGE_USAGE_HISTORY
  • DOCUMENT_AI_USAGE_HISTORY, DYNAMIC_TABLE_REFRESH_HISTORY, EVENT_USAGE_HISTORY, EXTERNAL_ACCESS_HISTORY
  • HYBRID_TABLE_USAGE_HISTORY, ICEBERG_STORAGE_OPTIMIZATION_HISTORY, INTERNAL_DATA_TRANSFER_HISTORY
  • LOAD_HISTORY, MATERIALIZED_VIEW_REFRESH_HISTORY, METERING_DAILY_HISTORY, METERING_HISTORY, MODEL_SERVING_USAGE_HISTORY
  • NOTEBOOKS_CONTAINER_RUNTIME_HISTORY, ONLINE_FEATURE_TABLE_REFRESH_HISTORY, OPENFLOW_USAGE_HISTORY
  • PIPE_USAGE_HISTORY, POSTGRES_COMPUTE_USAGE_HISTORY, POSTGRES_STORAGE_USAGE_HISTORY
  • QUERY_ATTRIBUTION_HISTORY (또는 GOVERNANCE_VIEWER), QUERY_METERING_HISTORY (또는 GOVERNANCE_VIEWER)
  • REPLICATION_GROUP_REFRESH_HISTORY, REPLICATION_GROUP_USAGE_HISTORY, REPLICATION_USAGE_HISTORY
  • SEARCH_OPTIMIZATION_BENEFITS, SEARCH_OPTIMIZATION_HISTORY, SERVERLESS_ALERT_HISTORY, SERVERLESS_TASK_HISTORY
  • SNOWFLAKE_COCO_USAGE_HISTORY, SNOWFLAKE_COWORK_USAGE_HISTORY, SNOWPARK_CONTAINER_SERVICES_HISTORY, SNOWPIPE_STREAMING_CHANNEL_HISTORY
  • STAGE_STORAGE_USAGE_HISTORY, STORAGE_REQUEST_HISTORY, STORAGE_USAGE
  • TABLE_DML_HISTORY, TABLE_PRUNING_HISTORY, TABLE_QUERY_PRUNING_HISTORY, TABLE_STORAGE_METRICS, TASK_HISTORY
  • WAREHOUSE_EVENTS_HISTORY, WAREHOUSE_LOAD_HISTORY, WAREHOUSE_METERING_HISTORY

OBJECT_VIEWER (객체 메타데이터 관련 뷰):

  • BLOCK_STORAGE_SNAPSHOTS, COLUMNS, COMPLETE_TASK_GRAPHS
  • DATABASES, ELEMENT_TYPES, FIELDS, FILE_FORMATS, FUNCTIONS
  • HYBRID_TABLES, INDEX_COLUMNS, INDEXES
  • OBJECT_ACCESS_REQUEST_HISTORY, OBJECT_DEPENDENCIES
  • PIPES, PROCEDURES
  • REFERENTIAL_CONSTRAINTS, REPLICATION_GROUPS, RESOURCE_MONITORS
  • SCHEMATA, SEMANTIC_DIMENSIONS, SEMANTIC_FACTS, SEMANTIC_METRICS, SEMANTIC_RELATIONSHIPS, SEMANTIC_TABLES, SEMANTIC_VIEWS, SEQUENCES, SERVICES, STAGES
  • TABLE_CONSTRAINTS, TABLES, TASKS
  • VIEWS

SECURITY_VIEWER (보안 관련 뷰):

  • APPLICATION_CALLBACK_HISTORY, APPLICATION_CONFIGURATIONS, APPLICATION_CONFIGURATION_VALUE_HISTORY, APPLICATION_SPECIFICATION_STATUS_HISTORY, APPLICATION_SPECIFICATIONS
  • CREDENTIALS
  • GRANTS_TO_ROLES, GRANTS_TO_SHARES, GRANTS_TO_USERS
  • INGRESS_NETWORK_ACCESS_HISTORY, INTERNAL_STAGE_NETWORK_ACCESS_HISTORY
  • LISTINGS, LOGIN_HISTORY
  • NETWORK_POLICIES, NETWORK_RULE_REFERENCES, NETWORK_RULES
  • OUTBOUND_PRIVATELINK_ENDPOINTS
  • PASSWORD_POLICIES
  • ROLES
  • SECRETS, SESSION_POLICIES, SESSIONS, SHARES
  • TRUST_CENTER_FINDINGS
  • USERS

일부 뷰는 두 역할 모두로 접근할 수 있어요. 예를 들어 POLICY_REFERENCESGOVERNANCE_VIEWER 또는 SECURITY_VIEWER, DATA_METRIC_FUNCTION_*USAGE_VIEWER 또는 GOVERNANCE_VIEWER, TAGSOBJECT_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_CATEGORYSNOWFLAKE.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_USERPUBLIC에 부여되므로, 세밀한 제어를 원하면 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 역할을 가진 사용자뿐입니다.

더 알아보기 (Learn more)