GRANT <privileges> … TO SHARE

GRANT <privileges> … TO SHARE

데이터베이스 및 기타 지원되는 데이터베이스 객체(스키마, UDF, 테이블, 뷰)에 대한 접근 권한을 공유(share)에 부여하는 명령이에요. 이 객체들에 대한 권한을 부여하면 객체가 공유에 효과적으로 추가되며, 이 공유를 하나 이상의 소비자 계정과 공유할 수 있어요.

출처: 문서

본문

구문 (Syntax)

GRANT <objectPrivilege> ON
     { <name>  DATABASE
      | <name>  SCHEMA
      | <name>  FUNCTION
      | <name>  SEMANTIC VIEW
      | { <name>  TABLE  | ALL TABLES IN SCHEMA <schema_name>  }
      | { <name>  EXTERNAL TABLE  | ALL EXTERNAL TABLES IN SCHEMA <schema_name>  }
      | { <name>  ICEBERG TABLE  | ALL ICEBERG TABLES IN SCHEMA <schema_name>  }
      | { <name>  DYNAMIC TABLE  | ALL DYNAMIC TABLES IN SCHEMA <schema_name>  }
      | <name>  TAG
      | <name>  VIEW   }
  TO SHARE <share_name>

여기서:

objectPrivilege ::=
-- For DATABASE
   REFERENCE_USAGE [ , ... ]
-- For DATABASE, FUNCTION, or SCHEMA
   USAGE [ , ... ]
-- For SEMANTIC VIEW
   { REFERENCES | SELECT } [ , ... ]
-- For TABLE
   EVOLVE SCHEMA [ , ... ]
-- For EXTERNAL TABLE, ICEBERG TABLE, TABLE, or VIEW
   SELECT [ , ... ]
-- For TAG
   READ

파라미터

  • name — 지정된 권한이 부여되는 객체의 식별자를 지정해요.
  • schema_name — 모든 테이블에 대해 지정된 권한이 부여되는 스키마의 식별자를 지정해요.
  • share_name — 지정된 권한이 부여되는 공유의 식별자를 지정해요.

사용 메모 (Usage notes)

  • 공유에는 단일 데이터베이스에 대한 USAGE 권한만 부여할 수 있어요. 그러나 그 데이터베이스 내에서 여러 스키마, UDF, 테이블, 뷰에 대한 권한을 공유에 부여할 수 있어요.
  • 개별 객체에 대한 권한은 별도의 GRANT 문장으로 공유에 부여해야 해요. 유일한 예외는 테이블(Apache Iceberg™ 테이블 포함)과 뷰에 대한 SELECT 권한이에요. ALL 절을 사용하여 지정된 스키마의 모든 테이블에 대한 SELECT를 공유에 부여할 수 있어요. 또한 공유가 SECURE_OBJECTS_ONLY=FALSE이면 지정된 스키마의 모든 뷰에 대한 SELECT를 공유에 부여할 수 있어요.
  • 기본적으로 뷰에 대한 SELECT 권한은 보안 뷰(secure views)에만 부여할 수 있어요. 비보안 뷰를 공유하려면 별도 지침을 참조해요.
  • USAGE 권한은 보안 UDF에만 부여할 수 있어요. 비보안 UDF에 대한 USAGE 권한을 공유에 부여하려고 하면 오류가 반환돼요.
  • 현재 다른 데이터베이스의 객체를 참조하는 UDF를 공유하는 것은 지원되지 않아요. 예를 들어 다른 데이터베이스의 보안 뷰를 참조하는 UDF에 USAGE를 부여하려고 하면 오류가 반환돼요.
  • 여러 데이터베이스에 속한 객체를 참조하는 보안 뷰를 공유할 때는 REFERENCE_USAGE 권한을 다음과 같이 사용해요:
    • REFERENCE_USAGE 권한은 각 데이터베이스에 개별적으로 부여해야 해요.
    • 공유에 보안 뷰에 대한 SELECT 권한을 부여하기 전에 데이터베이스에 REFERENCE_USAGE 권한을 부여해야 해요.
  • Secure Data Sharing: 데이터 제공자는 future grants로 새 객체를 공유에 자동 추가할 수 없어요. 즉 데이터 제공자는 GRANT <privilege> … TO SHARE 문장으로 미래 객체에 대한 권한을 공유에 부여할 수 없어요.
  • 공유에서 만든 데이터베이스나 데이터베이스 객체를 재공유할 수 없어요. 공유에서 만든 데이터베이스나 데이터베이스 객체에 대한 USAGE 권한을 다른 공유에 부여하려고 하면 오류가 반환돼요.
  • TABLE 객체가 Iceberg 테이블이면 명령은 그 Iceberg 테이블에 권한을 부여해요.

예시 (Examples)

단일 데이터베이스에서 객체를 공유하는 예시:

GRANT USAGE ON DATABASE mydb TO SHARE share1;

GRANT USAGE ON SCHEMA mydb.public TO SHARE share1;

GRANT USAGE ON FUNCTION mydb.shared_schema.function1 TO SHARE share1;

GRANT USAGE ON FUNCTION mydb.shared_schema.function2 TO SHARE share1;

GRANT SELECT ON ALL TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON ALL ICEBERG TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT USAGE ON SCHEMA mydb.shared_schema TO SHARE share1;

GRANT SELECT ON VIEW mydb.shared_schema.view1 TO SHARE share1;

GRANT SELECT ON VIEW mydb.shared_schema.view3 TO SHARE share1;

GRANT SELECT ON ICEBERG TABLE mydb.shared_schema.iceberg_table_1 TO SHARE share1;

GRANT SELECT ON DYNAMIC TABLE mydb.public TO SHARE share1;

다른 데이터베이스의 객체를 참조하는 보안 뷰를 공유하는 예시:

CREATE SECURE VIEW view2 AS SELECT * FROM database2.public.sampletable;

GRANT USAGE ON DATABASE database1 TO SHARE share1;

GRANT USAGE ON SCHEMA database1.schema1 TO SHARE share1;

GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1;

GRANT SELECT ON VIEW view2 TO SHARE share1;

더 알아보기 (Learn more)