이 페이지에서는 세분화된 액세스 제어를 위해 데이터베이스 역할에 부여할 수 있는 권한을 설명합니다.
데이터베이스 역할 및 세분화된 액세스 제어에 대한 자세한 내용은 세분화된 액세스 제어 정보를 참조하세요.
다음 표에서는 세분화된 액세스 제어 권한과 이러한 권한이 부여될 수 있는 데이터베이스 객체를 보여줍니다.
선택 | INSERT | UPDATE | 삭제 | 실행 | 사용량 | |
---|---|---|---|---|---|---|
스키마 | ✓ | |||||
테이블 | ✓ | ✓ | ✓ | ✓ | ||
열 | ✓ | ✓ | ✓ | ✓ | ||
뷰 | ✓ | |||||
변경 내역 | ✓ | |||||
변경 내역 읽기 함수 | ✓ | |||||
시퀀스 | ✓ | ✓ | ||||
모델 | ✓ |
다음 섹션에서는 각 권한에 대한 세부정보를 제공합니다.
SELECT
테이블, 뷰, 변경 내역, 시퀀스, 모델에서 역할을 읽거나 쿼리할 수 있습니다.
테이블에 열 목록이 지정된 경우 해당 열에서만 권한이 유효합니다. 열 목록을 지정하지 않으면 나중에 추가되는 열을 포함하여 테이블의 모든 열에서 권한이 유효합니다. 열 목록은 뷰에 허용되지 않습니다.
Spanner는 호출자의 권한 뷰와 정의자의 권한 뷰를 모두 지원합니다. 자세한 내용은 보기 정보를 참고하세요.
호출자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할 또는 사용자에게 해당 뷰에 대한
SELECT
권한과 뷰에서 참조된 기본 객체에 대한SELECT
권한이 필요합니다. 예를 들어Singers
테이블에SingerNames
뷰가 만들어졌다고 가정합시다.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
데이터베이스 역할
SELECT * FROM SingerNames
가myRole
쿼리를 수행한다고 합시다. 역할은 뷰에 대한SELECT
권한이 있어야 하며 참조된 세 열 또는 전체Singers
테이블에 대해SELECT
권한이 있어야 합니다.정의자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할이나 사용자에게 뷰에 대한
SELECT
권한만 필요합니다. 예를 들어Albums
테이블에AlbumsBudget
뷰가 생성되었다고 가정합시다.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
데이터베이스 역할
SELECT * FROM AlbumsBudget
가Analyst
쿼리를 수행한다고 가정합니다. 이 역할에는 뷰에 대한SELECT
권한만 필요합니다. 참조된 세 열 또는Albums
테이블에 대한SELECT
권한은 필요하지 않습니다.테이블의 열 하위 집합에
SELECT
를 부여하면 FGAC 사용자는 더 이상 해당 테이블에SELECT *
를 사용할 수 없습니다. 해당 테이블의 쿼리는 포함할 모든 열의 이름을 지정해야 합니다.생성된 열에 부여된
SELECT
는 기본 열에SELECT
를 부여하지 않습니다.인터리브 처리된 테이블의 경우 상위 테이블에 부여된
SELECT
가 하위 테이블에 전파되지 않습니다.변경 내역에 대한
SELECT
를 부여할 때는 변경 내역의 테이블 값 함수에 대한EXECUTE
도 부여해야 합니다. 자세한 내용은 EXECUTE를 참조하세요.특정 열(예:
SUM(col_a)
)에 집계 함수와 함께SELECT
를 사용하는 경우 역할에는 해당 열에 대한SELECT
권한이 있어야 합니다. 집계 함수가 열(예:COUNT(*)
)을 지정하지 않는 경우 역할에는 테이블에 있는 하나 이상의 열에 대한SELECT
권한이 있어야 합니다.시퀀스와 함께
SELECT
를 사용하는 경우, 보기 권한이 있는 시퀀스만 볼 수 있습니다.
예시
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep; GRANT SELECT ON VIEW orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
역할이 지정된 테이블에 행을 삽입할 수 있습니다. 열 목록이 지정된 경우 권한은 해당 열에서만 유효합니다. 열 목록을 지정하지 않으면 테이블의 모든 열에서 권한이 유효합니다.
열 이름을 지정하면 포함되지 않은 열은 삽입 시 기본값을 가져옵니다.
생성된 열에는
INSERT
를 부여할 수 없습니다.
예시
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
역할이 지정된 테이블의 행을 업데이트할 수 있습니다. 업데이트는 테이블 열의 하위 집합으로 제한할 수 있습니다. 이를 시퀀스와 함께 사용하면 역할이 시퀀스에서 get-next-sequence-value
함수를 호출할 수 있습니다.
역할에는 UPDATE
권한 외에 모든 키 열 및 쿼리된 모든 열에 대한 SELECT
권한이 필요합니다. 쿼리된 열에는 WHERE
절의 열과 업데이트된 열 및 생성된 열의 새 값을 계산하는 데 사용되는 열이 포함됩니다.
생성된 열에는 UPDATE
를 부여할 수 없습니다.
예시
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
역할이 지정된 테이블에서 행을 삭제할 수 있습니다.
열 수준에서
DELETE
를 부여할 수 없습니다.이 역할에는 모든 키 열 및 쿼리
WHERE
절에 포함될 수 있는 모든 열에 대한SELECT
도 필요합니다.GoogleSQL 언어 데이터베이스의 인터리브 테이블의 경우 상위 테이블에 대해서만
DELETE
권한이 필요합니다. 하위 테이블이ON DELETE CASCADE
를 지정하면 하위 테이블의DELETE
권한이 없어도 하위 테이블의 행이 삭제됩니다.
예
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
변경 내역에 대한 SELECT
를 부여할 때는 변경 내역의 읽기 함수에 대한 EXECUTE
도 부여해야 합니다. 자세한 내용은 변경 스트림 읽기 함수 및 쿼리 문법을 참조하세요.
이를 모델과 함께 모델을 사용하면 해당 역할이 머신러닝 함수에서 모델을 사용할 수 있습니다.
예
다음 예시에서는 my_change_stream
이라는 변경 내역에 대한 읽기 함수에서 EXECUTE
를 부여하는 방법을 보여줍니다.
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
사용량
이름이 지정된 스키마에 USAGE
를 부여하면 이름이 지정된 스키마에 포함된 객체에 액세스할 수 있는 권한이 제공됩니다. USAGE
권한은 기본적으로 기본 스키마에 부여됩니다.
다음 단계
자세한 내용은 다음을 참고하세요.
- 세분화된 액세스 제어 구성
- 세분화된 액세스 제어 정보
- GRANT 및 REVOKE 문(GoogleSQL 언어 데이터베이스)
- GRANT 및 REVOKE 문(PostgreSQL 언어 데이터베이스)