컨테이너 수준 MANAGE GRANTS 사용하기
컨테이너 수준 MANAGE GRANTS 사용하기
이 항목에서는 컨테이너 수준 MANAGE GRANTS를 부여하고, 위임하고, 회수하고, 감사하는 방법을 다뤄요.
본문
시작하기
컨테이너 수준 MANAGE GRANTS를 사용하면 계정 전체의 권한 부여 관리 권한을 부여하지 않고도 데이터베이스나 스키마에 대한 권한 부여 관리를 위임할 수 있어요.
MANAGE GRANTS를 위임하기 전에, 역할이 실제로 독립적인 인가 결정을 내려야 하는지 판단하세요. 접근 요구 사항을 직접 표현할 수 있다면(예: 역할이 데이터베이스의 현재·미래 모든 테이블에 대해 SELECT가 필요하다면) 상속된 권한을 우선 사용하세요. 자세한 지침은 컨테이너 수준 MANAGE GRANTS를 쓰는 시점 문서를 참고하세요.
일반적인 워크플로는 다음과 같아요.
- 관리 경계와 위임할 역할을 식별해요. 의도한 신뢰 경계에 맞는 가장 좁은 데이터베이스나 스키마를 선택해요.
- 해당 컨테이너에
MANAGE GRANTS를 부여해요.SECURITYADMIN(또는 이미 계정 수준MANAGE GRANTS WITH GRANT OPTION을 가진 역할)을 사용해 위임 역할에 권한을 부여해요. - 관리자가
MANAGE GRANTS를 더 위임해야 할 때만WITH GRANT OPTION을 추가해요. - 위임된 관리 권한과 위임 범위 안에서 생성된 권한 부여를 모두 감사해요.
- 더 이상 필요하지 않으면 권한 부여 관리 권한을 회수하고, 관리자가 이전에 설정한 접근은 별도로 검토해요.
구문
GRANT MANAGE GRANTS ON { ACCOUNT | DATABASE <name> | SCHEMA <name> }
TO { ROLE <role_name> | DATABASE ROLE <db_role_name> }
[ WITH GRANT OPTION ]
REVOKE MANAGE GRANTS ON { ACCOUNT | DATABASE <name> | SCHEMA <name> }
FROM { ROLE <role_name> | DATABASE ROLE <db_role_name> }
[ RESTRICT | CASCADE ]
RESTRICT(기본값)는 종속 MANAGE GRANTS 권한이 존재하면 회수를 실패시켜요. CASCADE는 해당 종속 MANAGE GRANTS 권한도 함께 회수해요.
컨테이너에 MANAGE GRANTS를 얻는 방법
역할이 데이터베이스나 스키마에 대한 MANAGE GRANTS를 얻는 방법은 두 가지예요.
-
MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION을 가진 계정 관리자로부터 받는 방법:USE ROLE SECURITYADMIN; GRANT MANAGE GRANTS ON DATABASE sales_db TO ROLE sales_admin;sales_admin이sales_db안에서만 권한을 관리하고 다른 역할에게MANAGE GRANTS를 위임할 필요가 없다면WITH GRANT OPTION은 필요하지 않아요. -
같은 컨테이너 또는 더 높은 컨테이너에
WITH GRANT OPTION과 함께 컨테이너 수준MANAGE GRANTS를 가진 기존 역할로부터 받는 방법. 종단 간 예시는 추가 위임 허용을 참고하세요.
추가 위임 허용
위임 관리자가 다른 역할에게 MANAGE GRANTS를 위임해야 할 때만 WITH GRANT OPTION을 추가하세요.
위임 역할에 MANAGE GRANTS WITH GRANT OPTION을 부여해요.
USE ROLE SECURITYADMIN;
GRANT MANAGE GRANTS ON DATABASE sales_db
TO ROLE sales_admin
WITH GRANT OPTION;
그러면 위임 역할이 같은 컨테이너나 더 낮은 수준의 컨테이너에 MANAGE GRANTS를 부여할 수 있어요.
USE ROLE sales_admin;
GRANT MANAGE GRANTS ON SCHEMA sales_db.us_west
TO ROLE us_west_lead;
WITH GRANT OPTION은 관리자가 추가 권한 부여 관리 권한을 만들 수 있는 능력을 확대해요. 추가 위임이 필요하지 않을 때는 포함하지 마세요.
이 위임을 통해 생성된 하위 수준 MANAGE GRANTS 권한을 정기적으로 검토하세요.
예시
데이터베이스에 대한 권한 부여 관리 위임하기
USE ROLE SECURITYADMIN;
GRANT MANAGE GRANTS ON DATABASE sales_db
TO ROLE sales_admin;
결과: sales_admin은 sales_db 내부에서 지원되는 권한을 관리할 수 있지만, 별도로 WITH GRANT OPTION으로 인가받지 않는 한 MANAGE GRANTS를 더 위임할 수 없어요.
추가 위임을 허용하는 예시는 추가 위임 허용을 참고하세요.
건너뛰기 수준 위임(skip-level delegation)
USE ROLE SECURITYADMIN;
GRANT MANAGE GRANTS ON SCHEMA sales_db.us_west TO ROLE us_west_lead;
결과: us_west_lead가 sales_db.us_west에 대한 MANAGE GRANTS를 보유하는 역할이 돼요. sales_db에 중간 부여가 필요하지 않아요.
위임된 권한 부여 관리 권한 줄이기
위임 관리자의 반복 작업이 상속된 권한으로 직접 표현될 수 있다면 더 이상 MANAGE GRANTS가 필요하지 않을 수 있어요. 예를 들어 analyst가 sales_db의 현재·미래 모든 테이블에 대해 항상 SELECT를 가져야 하고, sales_admin이 현재 그 접근을 수동으로 유지한다고 가정해 보세요.
위임된 권한 부여 관리 권한을 줄이려면:
- 관리자의 반복적이고 균일한 권한 부여 패턴을 상속된 권한으로 마이그레이션해요. 단계별 마이그레이션 지침은 상속된 권한 사용하기 문서를 참고하세요.
- 관리자가 여전히 독립적인 인가 결정을 내려야 하는지 판단해요.
- 그렇지 않다면 컨테이너 수준
MANAGE GRANTS를 회수해요.
관리자가 객체별 권한 부여든, 새로운 상속된 권한 패턴이든, 다른 권한 결정을 통해서든 계속 독립적인 인가 결정을 내려야 한다면 MANAGE GRANTS를 제거하지 마세요.
MANAGE GRANTS를 회수해도 관리자가 이전에 만든 권한 부여는 제거되지 않아요. 그 권한 부여를 별도로 검토하세요.
계단식(cascade) 회수로 역할에서 MANAGE GRANTS 회수하기
USE ROLE SECURITYADMIN;
REVOKE MANAGE GRANTS ON ACCOUNT FROM ROLE sales_admin CASCADE;
결과: sales_admin이 부여한 종속 MANAGE GRANTS(예: sales_db 데이터베이스나 sales_db 내부 스키마에 대한 MANAGE GRANTS)가 회수돼요. sales_admin이 만든 일반 권한과 MANAGE GRANTS가 아닌 상속된 권한은 보존돼요.
컨테이너 수준 MANAGE GRANTS 감사하기
Snowflake는 컨테이너 수준 MANAGE GRANTS 감사를 지원하는 다음 방법을 제공해요.
SHOW GRANTS ON DATABASE <name>과SHOW GRANTS ON SCHEMA <name>을 사용해 위임된 컨테이너 안의 모든 권한을 나열해요. 여기에는MANAGE GRANTS를 보유한 역할이 만든 권한도 포함돼요.ACCOUNT_USAGE의GRANTS_TO_ROLES뷰를 사용해MANAGE GRANTS위임의 이력(비널DELETED_ON값으로 나타나는 회수된 권한 포함)을 재구성해요.
계정에서 MANAGE GRANTS를 보유한 모든 역할 찾기:
SELECT grantee_name, granted_on, name AS container_name, granted_by, created_on
FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES
WHERE privilege = 'MANAGE GRANTS'
AND granted_on IN ('DATABASE', 'SCHEMA')
AND deleted_on IS NULL
ORDER BY granted_on, name;
특정 데이터베이스에 대해 MANAGE GRANTS를 보유한 모든 역할 찾기:
SHOW GRANTS ON DATABASE sales_db;
특정 역할이 MANAGE GRANTS를 보유한 모든 컨테이너 찾기:
SHOW GRANTS TO ROLE sales_admin;