이 튜토리얼에서는 PostgreSQL용 Cloud SQL에서 파라미터화된 보안 뷰를 사용하여 Cloud SQL Studio 또는 psql을 사용하여 파라미터화된 뷰에 대한 사용자 액세스를 제한하는 방법을 설명합니다.
목표
- 이름이 지정된 뷰 파라미터를 사용하여 파라미터화된 보안 뷰 만들기
- 애플리케이션이 데이터베이스에 연결하고 파라미터화된 보안 뷰에 액세스할 때 사용할 데이터베이스 역할 만들기
- 새 역할에 보안 뷰에 대한 권한을 부여하고 기본 테이블에 대한 액세스 권한 취소하기
- 새 역할을 사용해 연결한 후 제한된 테이블에 액세스할 수 없는지 확인하기
execute_parameterized_query함수를 사용하여 파라미터화된 보안 뷰에서 쿼리 실행하기
개발 환경 준비
Cloud SQL 인스턴스에
cloudsql.enable_parameterized_views데이터베이스 플래그를 사용 설정합니다. 이 플래그를 변경하려면 데이터베이스를 다시 시작해야 합니다.postgres사용자로 데이터베이스에 연결합니다.psql -U postgres데이터베이스에
parameterized_views확장 프로그램을 만듭니다.CREATE EXTENSION parameterized_views;쿼리를 실행하기 위한 새 데이터베이스 역할을 만듭니다.
CREATE ROLE psv_user WITH LOGIN PASSWORD 'PASSWORD';애플리케이션 데이터의 스키마와 테이블을 만듭니다.
CREATE SCHEMA app_schema; CREATE TABLE app_schema.items(item_id INT, item_name TEXT, description TEXT, owner_id INT); INSERT INTO app_schema.items (item_id, item_name, description, owner_id) VALUES (1, 'Book', 'A great read', 123), (2, 'Laptop', 'Work machine', 456), (3, 'Pencil', 'For writing', 123);
파라미터화된 보안 뷰 만들기 및 액세스 권한 설정
파라미터화된 보안 뷰를 만듭니다.
CREATE VIEW app_schema.user_items_view WITH (security_barrier) AS SELECT item_id, item_name, description FROM app_schema.items WHERE owner_id = $@current_user_id;애플리케이션 역할에 뷰 및 스키마에 대한 액세스 권한을 부여합니다.
GRANT USAGE ON SCHEMA app_schema TO psv_user; GRANT SELECT ON app_schema.user_items_view TO psv_user;기본 테이블에 대한 직접 액세스 권한을 취소합니다.
REVOKE ALL PRIVILEGES ON app_schema.items FROM psv_user;
데이터 보안 확인
psv_user로 연결합니다.psql -U psv_user -d postgres기본 테이블에 액세스할 수 없는지 확인합니다.
SELECT * FROM app_schema.items; -- ERROR: permission denied for table itemsexecute_parameterized_query함수를 사용하여 파라미터화된 보안 뷰에 액세스합니다.SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from app_schema.user_items_view', param_names => ARRAY ['current_user_id'], param_values => ARRAY ['123'] );결과에는
owner_id가123인 항목만 포함되어야 합니다.
다음 단계
- 파라미터화된 보안 뷰 개요 알아보기
- 파라미터화된 보안 뷰를 사용하여 애플리케이션 데이터 보안 관리 방법 알아보기.