세분화된 액세스 제어 권한

이 페이지에서는 세분화된 액세스 제어를 위해 데이터베이스 역할에 부여할 수 있는 권한을 설명합니다.

데이터베이스 역할 및 세분화된 액세스 제어에 대한 자세한 내용은 세분화된 액세스 제어 정보를 참조하세요.

다음 표에서는 세분화된 액세스 제어 권한과 이러한 권한이 부여될 수 있는 데이터베이스 객체를 보여줍니다.

SELECT INSERT 업데이트 삭제 실행 USAGE
스키마
테이블
변경 내역
변경 내역 읽기 함수
시퀀스
모델

다음 섹션에서는 각 권한에 대한 세부정보를 제공합니다.

SELECT

테이블, 뷰, 변경 내역, 시퀀스, 모델에서 역할을 읽거나 쿼리할 수 있습니다.

  • 테이블에 열 목록이 지정된 경우 해당 열에서만 권한이 유효합니다. 열 목록을 지정하지 않으면 나중에 추가되는 열을 포함하여 테이블의 모든 열에서 권한이 유효합니다. 열 목록은 뷰에 허용되지 않습니다.

  • Spanner는 호출자의 권한 뷰와 정의자의 권한 뷰를 모두 지원합니다. 자세한 내용은 보기 정보를 참고하세요.

    호출자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할 또는 사용자에게 해당 뷰에 대한 SELECT 권한과 뷰에서 참조된 기본 객체에 대한 SELECT 권한이 필요합니다. 예를 들어 Singers 테이블에 SingerNames 뷰가 만들어졌다고 가정합시다.

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
      SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    데이터베이스 역할 SELECT * FROM SingerNamesmyRole 쿼리를 수행한다고 합시다. 역할은 뷰에 대한 SELECT 권한이 있어야 하며 참조된 세 열 또는 전체 Singers 테이블에 대해 SELECT 권한이 있어야 합니다.

    정의자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할이나 사용자에게 뷰에 대한 SELECT 권한만 필요합니다. 예를 들어 Albums 테이블에 AlbumsBudget 뷰가 생성되었다고 가정합시다.

    CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS
      SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
    

    데이터베이스 역할 SELECT * FROM AlbumsBudgetAnalyst 쿼리를 수행한다고 가정합니다. 이 역할에는 뷰에 대한 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를 부여하면 이름이 지정된 스키마에 포함된 객체에 액세스할 수 있는 권한이 제공됩니다. USAGE 권한은 기본적으로 기본 스키마에 부여됩니다.

다음 단계

자세한 내용은 다음을 참고하세요.