이 페이지에서는 세분화된 액세스 제어를 위해 데이터베이스 역할에 부여할 수 있는 권한을 설명합니다. 이 정보는 GoogleSQL 언어 데이터베이스와 PostgreSQL 언어 데이터베이스 모두에 적용됩니다.
데이터베이스 역할 및 세분화된 액세스 제어에 대한 자세한 내용은 세분화된 액세스 제어 개요를 참조하세요.
다음 표에는 세분화된 액세스 제어 권한과 이러한 권한을 부여할 수 있는 데이터베이스 객체가 나와 있습니다.
| SELECT | INSERT | 업데이트 | 삭제 | 실행 | 사용량 | |
|---|---|---|---|---|---|---|
| 스키마 | ✓ | |||||
| 테이블 | ✓ | ✓ | ✓ | ✓ | ||
| 열 | ✓ | ✓ | ✓ | ✓ | ||
| 뷰 | ✓ | |||||
| 변경 내역 | ✓ | |||||
| 변경 내역 읽기 함수 | ✓ | |||||
| 시퀀스 | ✓ | ✓ | ||||
| 모델 | ✓ | 
다음 섹션에서는 각 권한에 대한 세부정보를 제공합니다.
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를 사용하는 경우, 보기 권한이 있는 시퀀스만 볼 수 있습니다.
GRANT 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를 부여할 수 없습니다.
GRANT 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를 부여할 수 없습니다.
GRANT 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권한이 없어도 하위 테이블의 행이 삭제됩니다.
GRANT 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도 부여해야 합니다. 자세한 내용은 변경 스트림 읽기 함수 및 쿼리 문법을 참조하세요.
이를 모델과 함께 모델을 사용하면 해당 역할이 머신러닝 함수에서 모델을 사용할 수 있습니다.
GRANT 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 언어 데이터베이스)