GRANT <권한> … TO SHARE

데이터베이스와 지원되는 다른 데이터베이스 오브젝트(스키마, UDFs, 테이블, 뷰)에 대한 액세스 권한을 공유에 부여합니다. 이러한 오브젝트에 대한 권한을 부여하면 오브젝트가 공유에 효과적으로 추가된 다음 하나 이상의 컨슈머 계정과 공유될 수 있습니다.

자세한 내용은 Secure Data Sharing 소개공유 관련 작업하기 섹션을 참조하십시오.

참고 항목:

REVOKE <권한> … FROM SHARE

GRANT <권한>

구문

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

여기서

objectPrivilege ::=
-- For DATABASE
   REFERENCE_USAGE [ , ... ]
-- For DATABASE, FUNCTION, or SCHEMA
   USAGE [ , ... ]
-- For TABLE
   EVOLVE SCHEMA [ , ... ]
-- For ICEBERG TABLE, TABLE, or VIEW
   SELECT [ , ... ]
-- For TAG
   READ
Copy

매개 변수

name

지정된 권한이 부여된 오브젝트의 식별자를 지정합니다.

schema_name

모든 테이블에 대해 지정된 권한이 부여된 스키마의 식별자를 지정합니다.

share_name

지정된 권한이 부여된 원본 공유의 식별자를 지정합니다.

사용법 노트

  • 단일 데이터베이스에 대해서만 USAGE 권한을 공유에 부여할 수 있지만, 그 데이터베이스 내에서 여러 스키마, UDFs, 테이블, 뷰에 대한 권한을 공유에 부여할 수 있습니다.

  • 개별 오브젝트에 대한 권한은 별도의 GRANT 문에서 공유에 부여해야 합니다. 유일한 예외는 테이블(Iceberg 테이블 포함)에 대한 SELECT 권한입니다. ALL 절을 사용하여 지정된 스키마의 모든 테이블에서 공유에 SELECT 권한을 부여할 수 있습니다.

  • 뷰에 대한 SELECT 권한은 보안 뷰에만 부여할 수 있습니다. 공유에 비보안 뷰에 대한 SELECT 권한을 부여하려고 하면 오류가 반환됩니다.

  • USAGE 권한은 보안 UDFs에만 부여할 수 있습니다. 공유에 비보안 UDF에 대한 USAGE 권한을 부여하려고 하면 오류가 반환됩니다.

  • 현재, 다른 데이터베이스의 오브젝트를 참조하는 UDF의 공유는 지원되지 않습니다. 예를 들어, 다른 데이터베이스에서 보안 뷰를 참조하는 UDF에 USAGE 권한을 부여하려고 하면 오류가 반환됩니다.

  • 다음과 같이 여러 데이터베이스에 속한 오브젝트를 참조하는 보안 뷰를 공유할 때 REFERENCE_USAGE 권한을 사용합니다.

    • REFERENCE_USAGE 권한은 각 데이터베이스에 개별적으로 부여해야 합니다.

    • REFERENCE_USAGE 권한은 먼저 데이터베이스에 부여한 후에 보안 뷰에 대한 SELECT 권한을 공유에 부여해야 합니다.

    자세한 내용은 여러 데이터베이스에서 데이터 공유하기 섹션을 참조하십시오.

  • Secure Data Sharing: 데이터 공급자는 향후 권한 부여를 사용하여 공유에 새 오브젝트를 자동으로 추가할 수 없습니다. 즉, 데이터 공급자는 GRANT <privilege> … TO SHARE 문을 사용하여 공유에 향후 오브젝트에 대한 권한을 부여할 수 없습니다.

  • 공유에서 생성된 데이터베이스 또는 데이터베이스 오브젝트는 다시 공유할 수 없습니다. 공유에서 생성된 데이터베이스 또는 데이터베이스 오브젝트에 대한 USAGE 권한을 다른 공유에 부여하려고 하면 오류가 반환됩니다.

  • Iceberg 테이블인 TABLE 오브젝트를 지정하는 경우 이 명령은 해당 Iceberg 테이블에 대한 권한을 부여합니다.

다음은 단일 데이터베이스에서 오브젝트를 공유하는 예입니다.

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 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;
Copy

다음은 다른 데이터베이스에서 오브젝트를 참조하는 보안 뷰를 공유하는 예입니다.

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;
Copy