GRANT <권한> … TO SHARE¶
데이터베이스와 지원되는 다른 데이터베이스 오브젝트(스키마, UDFs, 테이블, 뷰)에 대한 액세스 권한을 공유에 부여합니다. 이러한 오브젝트에 대한 권한을 부여하면 오브젝트가 공유에 효과적으로 추가된 다음 하나 이상의 컨슈머 계정과 공유될 수 있습니다.
자세한 내용은 Secure Data Sharing 소개 및 공유 관련 작업하기 섹션을 참조하십시오.
구문¶
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>
여기서
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
매개 변수¶
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