제한된 호출자의 권한¶
저장 프로시저 또는 Snowpark Container Services 서비스와 같은 실행 파일은 실행 파일의 소유자(소유자 권한) 또는 실행 파일의 호출자(호출자 권한)의 권한으로 실행할 수 있습니다. 실행 파일이 호출자의 권한으로 실행되는 경우, 실행 파일은 호출자가 실행 파일의 컨텍스트 외부에서 해당 작업을 수행할 수 있는 권한이 있는 경우에만 작업을 수행할 수 있습니다.
호출자 권한 제한은 실행 파일을 호출자의 권한으로 실행할 수 있도록 허용하지만, 실행 파일이 어떤 호출자의 권한으로 실행되는지 제한합니다. 호출자의 권한이 제한된 경우 관리자가 명시적으로 허용하지 않는 한 실행 파일은 특정 권한으로 실행될 수 없습니다.
호출자 권한 부여 정보¶
관리자는 호출자 권한 부여 를 사용하여 실행 파일이 어떤 호출자의 권한으로 실행될 수 있는지 정의합니다. 예를 들어 호출자가 테이블에 대해 SELECT 및 INSERT 권한을 가지고 있지만 실행 파일을 INSERT 권한으로 실행할 수 있는 호출자 권한 부여가 없는 경우, 호출자의 권한이 제한된 실행 파일은 테이블에 대해 작업할 때 INSERT 권한으로 실행할 수 없습니다.
호출자 권한 부여는 권한을 부여하는 것이 아니라 실행 파일을 실행할 때 호출자의 기존 권한 중 어떤 권한이 사용되는지 제한하는 것입니다. 예를 들어 호출자가 테이블에서 선택하기 위해 저장 프로시저를 실행하는 경우 호출자는 및 테이블에 대한 SELECT 권한이 이미 있어야 하며, SELECT 권한으로 저장 프로시저를 실행하려면 호출자 권한 부여가 허용되어야 합니다.
호출자 권한은 관리자가 실행 파일을 소유한 역할에 부여합니다. 호출자 권한은 실행 파일이 액세스하는 테이블 및 웨어하우스와 같은 오브젝트에:emph:
부여됩니다. 실행 파일이 오브젝트에 액세스하려고 시도하면 실행 파일의 소유자와 관련된 호출자 권한을 사용하여 작업에 사용할 수 있는 호출자의 권한을 결정합니다.
제한된 호출자 권한으로 실행되는 실행 파일¶
실행 파일을 만드는 사용자는 실행 파일이 소유자 권한, 호출자 권한 또는 제한된 호출자 권한으로 실행될지 여부를 정의합니다. 제한된 호출자 권한을 선택하는 경우 실행 파일에 필요한 모든 권한은 실행 파일의 소유자에게 부여되는 하나 이상의 호출자 권한 부여에 지정되어야 합니다.
저장 프로시저의 경우 EXECUTE AS
매개 변수는 프로시저가 소유자 권한, 호출자 권한 또는 제한된 호출자 권한으로 실행되는지 여부를 정의합니다. 다음은 제한된 호출자 권한으로 실행할 프로시저를 정의하는 예입니다.
CREATE OR REPLACE PROCEDURE sp_pi()
RETURNS FLOAT NOT NULL
LANGUAGE JAVASCRIPT
EXECUTE AS RESTRICTED CALLER
AS
$$
RETURN 3.1415926;
$$
;
제한된 호출자 권한으로 실행되는 실행 파일에 대한 제한 목록은 호출자 권한이 제한된 실행 파일의 제한 사항 섹션을 참조하십시오.
호출자 권한 부여하기¶
호출자 권한은 실행 파일이 액세스하는 테이블 및 데이터베이스와 같은 오브젝트에 부여됩니다. 호출자 권한은 실행 파일을 소유한 역할 또는 데이터베이스 역할에 부여됩니다.
관리자가 호출자 권한을 부여하는 데 사용하는 GRANT 문은 호출자 권한을 부여하는 방식에 따라 다양한 변형이 있습니다. 변형은 다음과 같습니다.
GRANTCALLER — 특정 오브젝트에 대한 호출자 권한을 부여합니다. 문에 의해 생성된 각 호출자 권한은 실행 파일을 지정된 권한으로 실행할 수 있도록 허용합니다.
GRANT ALL CALLER PRIVILEGES — 특정 오브젝트에 대한 호출자 권한을 부여합니다. 문에 의해 생성된 호출자 권한은 실행 파일이 호출자의 모든 권한으로 실행되도록 허용합니다.
GRANT INHERITED CALLER — 공통 스키마, 데이터베이스 또는 계정을 공유하는 경우 동일한 유형의 현재 및 향후 모든 오브젝트에 대해 호출자 권한을 부여합니다. 문에 의해 생성된 각 호출자 권한은 실행 파일을 지정된 권한으로 실행할 수 있도록 허용합니다.
GRANT ALL INHERITED CALLER PRIVILEGES — 공통 스키마, 데이터베이스 또는 계정을 공유하는 경우 동일한 유형의 현재 및 향후 모든 오브젝트에 대해 호출자 권한을 부여합니다. 문에 의해 생성된 호출자 권한은 실행 파일이 호출자의 모든 권한으로 실행되도록 허용합니다.
단일 GRANT 문으로 여러 개의 호출자 권한이 실행 파일 소유자에게 부여될 수 있습니다. 예를 들어, GRANT CALLER INSERT, SELECT …로 인해 두 개의 호출자 권한이 생기는데, 하나는 INSERT 권한에 대한 것이고 다른 하나는 SELECT 권한에 대한 것입니다. 마찬가지로, GRANT ALL INHERITED CALLER PRIVILEGES 문은 지정된 오브젝트 유형에 대해 부여될 수 있는 모든 권한에 대한 호출자 권한을 부여합니다.
호출자 권한을 부여하기 위한 매개 변수를 포함한 전체 구문은 GRANT CALLER 섹션을 참조하십시오.
예¶
다음은 관리자가 호출자 권한을 사용하여 실행 파일을 실행할 수 있는 호출자의 권한을 제어하는 방법의 예입니다.
v1
뷰에 액세스하는 owner_role
소유의 실행 파일은 해당 뷰에 대한 SELECT 권한으로 실행할 수 있습니다.
GRANT CALLER SELECT ON VIEW v1 TO owner_role;
db.sch
스키마의 모든 테이블에 액세스하는 owner_role
소유의 실행 파일은 호출자의 SELECT 및 INSERT 권한으로 실행할 수 있습니다.
GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
현재 계정의 스키마에 액세스하는 owner_role
소유의 실행 파일은 스키마에 대한 호출자의 모든 권한으로 실행할 수 있습니다.
GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
db.sch1.t1
테이블에 액세스하는 db.r
데이터베이스 역할이 소유한 실행 파일은 테이블에 대한 SELECT 권한으로 실행할 수 있습니다.
GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
my_db
데이터베이스에 액세스하는 owner_role
소유의 실행 파일은 데이터베이스에 대한 호출자의 모든 권한으로 실행할 수 있습니다.
GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;
호출자 권한 취소하기¶
관리자는 REVOKE 문을 사용하여 이전에 호출자 부여를 통해 실행 파일 소유자에게 부여된 권한을 취소할 수 있습니다. 이 문은 호출자 권한 부여를 취소하는 방법에 따라 다양한 변형이 있습니다.
REVOKE CALLER — 특정 오브젝트에 대한 특정 권한을 취소합니다.
REVOKE ALLCALLERPRIVILEGES — 모든 오브젝트에 대한 특정 권한을 취소합니다. 실행 파일은 오브젝트에 액세스하려고 할 때 호출자의 권한으로 실행할 수 없습니다.
REVOKE INHERITED CALLER — 공통 스키마, 데이터베이스 또는 계정을 공유하는 경우 동일한 유형의 현재 및 향후 모든 오브젝트에 대한 호출자 권한을 취소합니다. 지정된 목록에 있는 권한만 취소됩니다.
REVOKE ALL INHERITED CALLER PRIVILEGES — 공통 스키마, 데이터베이스 또는 계정을 공유하는 경우 동일한 유형의 현재 및 향후 모든 오브젝트에 대한 호출자 권한을 취소합니다. 모든 권한이 취소되며, 실행 파일은 호출자의 권한으로 실행할 수 없게 됩니다.
REVOKE INHERITED CALLER 또는 REVOKE ALL INHERITED CALLER PRIVILEGES 명령을 실행해도 GRANT CALLER 문을 사용하여 계정, 데이터베이스 또는 스키마 내의 특정 오브젝트에 부여된 호출자 권한은 취소되지 않습니다. 예를 들어 테이블 my_db.sch1.t1
에 직접 호출자 권한을 부여한 경우 REVOKE INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db ...
를 실행해도 t1
의 호출자 권한은 취소되지 않습니다.
매개 변수를 포함한 호출자 권한 부여 취소의 전체 구문은 REVOKE CALLER 섹션을 참조하십시오.
예¶
owner_role
소유의 실행 파일은 현재 계정의 뷰에 액세스할 때 더 이상 호출자의 권한으로 실행할 수 없습니다.
REVOKE ALL INHERITED CALLER PRIVILEGES ON ALL VIEWS IN ACCOUNT FROM ROLE owner_role;
owner_role
소유의 실행 파일은 db.sch1
스키마에 액세스할 때 더 이상 USAGE 권한으로 실행할 수 없습니다.
REVOKE CALLER USAGE ON SCHEMA db.sch1 FROM ROLE owner_role;
호출자에 부여된 권한 나열하기¶
사용자는 SHOW CALLER GRANTS 명령을 사용하여 호출자에 부여된 권한을 나열할 수 있습니다. 이 명령을 사용하여 특정 소유자에게 부여된 모든 호출자 권한(SHOW CALLER GRANTS TO …)을 나열하거나 특정 오브젝트에 대한 모든 호출자 권한(SHOW CALLER GRANTS ON …)을 나열할 수 있습니다.
특정 오브젝트에 대해 SHOW CALLER GRANTS ON … 명령을 실행하는 경우 각 행은 다음 중 하나를 나타낼 수 있습니다.
호출자 권한이 오브젝트에 직접 부여되었습니다.
예를 들어, 관리자가
GRANT CALLER SELECT ON TABLE db.sch.t1
을 실행한 경우SHOW CALLER GRANTS ON TABLE db.sch.t1
의 출력에는 행이 포함됩니다.오브젝트가 호출자 권한을 상속받았습니다.
예를 들어, 관리자가
GRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db1.sch
를 실행한 경우SHOW CALLER GRANTS ON TABLE db1.sch.t1
의 출력에는 행이 포함됩니다.이 오브젝트는 IN 절로 지정되었으므로 이 오브젝트에 포함된 다른 오브젝트는 상속된 호출자 권한을 부여받습니다.
예를 들어, 관리자가
GRANT INHERITED CALLER SELECT ON ALL TABLES IN ACCOUNT
를 실행한 경우SHOW CALLER GRANTS ON ACCOUNT
의 출력에는 행이 포함됩니다.오브젝트는 상속된 호출자 권한을 가진 오브젝트의 상위 항목이자 상속을 초래한 IN 절로 지정된 오브젝트의 하위 항목입니다.
예를 들어 관리자가
GRANT INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db
를 실행한 경우SHOW CALLER GRANTS ON SCHEMA my_db.sch1
에는 행이 포함됩니다.
조건부 출력¶
SHOW CALLER GRANTS 명령의 출력은 실행하는 역할의 권한에 따라 달라집니다. 사용자가 SHOW CALLER GRANTS 를 실행하면 결과에는 적어도 하나의 권한이 있는 오브젝트만 포함되며, 호출자 권한이 있더라도 액세스 권한이 없으면 오브젝트의 존재를 알 수 없습니다.
예를 들어, 데이터베이스 DB1
과 DB2
에 호출자 권한이 있다고 가정해 보겠습니다. 이제 역할 R2
가 DB1
에 대한 USAGE 권한을 가지고 있지만 DB2
에 대한 권한은 없다고 가정해 보겠습니다. R2
가 SHOW CALLER GRANTS 를 실행할 때 출력은 DB1
에 대한 호출자 권한이 있음을 보여주지만 DB2
를 나열하지 않습니다. R2
에 두 데이터베이스에 대한 권한이 있는 경우 출력에는 호출자 권한이 두 데이터베이스에 모두 있는 것으로 표시됩니다.
예¶
테이블 t1
에 부여된 호출자 권한을 목록으로 표시합니다.
SHOW CALLER GRANTS ON TABLE t1;
현재 계정에 대해 부여된 모든 호출자 권한을 목록으로 표시합니다. 여기에는 계정에 직접 부여되는 권한(GRANT CALLER … ON ACCOUNT)과 계정의 모든 오브젝트에 대한 권한(GRANT INHERITED CALLER … IN ACCOUNT)이 포함됩니다.
SHOW CALLER GRANTS ON ACCOUNT;
데이터베이스 역할 db.owner_role
에 대해 부여된 모든 호출자 권한을 목록으로 표시합니다.
SHOW CALLER GRANTS TO DATABASE ROLE db.owner_role;
호출자 권한 부여에 대한 제한 사항¶
호출자 권한은 복제되거나 복제본이 생성되지 않습니다.
호출자 권한이 제한된 실행 파일의 제한 사항¶
실행 파일이 제한된 호출자 권한으로 실행되는 경우 다음과 같은 제한이 적용됩니다.
외부 스테이지
실행 파일은 저장소 통합을 지정하지 않으면 외부 스테이지를 생성할 수 없습니다.
실행 파일은 외부 스테이지에 복사할 수 없습니다.
저장소 통합을 지정하지 않으면 실행 파일을 외부 URL 로 복사할 수 없습니다.
저장 프로시저
실행 파일은 소유자 권한, 호출자 권한 또는 제한된 호출자 권한으로 실행되는 Snowflake 오브젝트를 만들 수 없습니다. 예를 들어 저장 프로시저를 만들 수 없습니다.
실행 파일은 저장 프로시저가 실행되는 권한을 변경할 수 없습니다. 예를 들어 실행 파일은 저장 프로시저를 소유자 권한에서 호출자 권한으로 변경할 수 없습니다.
역할 및 권한
실행 파일은 USE ROLE 및 USE SECONDARY ROLES 명령을 실행할 수 없습니다.
실행 파일은 GRANT 문을 사용하여 권한 및 호출자 권한을 부여할 수 없습니다.
실행 파일은 REVOKE 문을 사용하여 권한 및 호출자 권한을 호출할 수 없습니다.
참조
실행 파일은 일시적이고 영구적인 참조 를 만들 수 없습니다.
세션 관련 작업