PostgreSQL 데이터베이스에 대한 사용자 액세스 제어
PostgreSQL의 새 데이터베이스는 항상 모든 데이터베이스 사용자와 역할이 객체를 만들 수 있도록 허용하는 데이터베이스 public 스키마의 기본 권한 집합으로 생성됩니다. 이러한 권한을 통해 데이터베이스 사용자는 데이터베이스에 연결하고, 가령 연결된 동안 임시 테이블을 만들 수 있습니다.
Aurora PostgreSQL DB 클러스터 프라이머리 노드에 생성한 데이터베이스 인스턴스에 액세스할 수 있는 사용자 권한을 보다 효과적으로 제어하려면 이러한 기본 public 권한을 회수하는 것이 좋습니다. 이렇게 하고 나서 다음 절차에 표시된 것처럼 데이터베이스 사용자에게 보다 세분화된 구체적인 권한을 부여하면 됩니다.
새 데이터베이스 인스턴스에 대한 역할 및 권한을 설정하는 방법
새로 생성한 Aurora PostgreSQL DB 클러스터에 데이터베이스를 설정하여 여러 연구자가 사용할 수 있도록 하고, 이들 모두 데이터베이스에 대한 읽기-쓰기 액세스 권한이 필요하다고 가정합니다.
-
다음과 같이
psql또는 pgAdmin을 사용하여 Aurora PostgreSQL DB 클러스터의 프라이머리 DB 인스턴스 에 연결합니다.psql --host=your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password메시지가 표시되면 암호를 입력합니다.
psql클라이언트는 기본 관리 연결 데이터베이스인postgres=>를 연결하고 프롬프트로 표시합니다. -
데이터베이스 사용자가
public스키마에서 객체를 생성하지 못하도록 하려면 다음을 수행합니다.postgres=>REVOKE CREATE ON SCHEMA public FROM PUBLIC;REVOKE -
다음으로 새 데이터베이스 인스턴스를 생성합니다.
postgres=>CREATE DATABASElab_db;CREATE DATABASE -
새 데이터베이스의
PUBLIC스키마에서 모든 권한을 회수합니다.postgres=>REVOKE ALL ON DATABASElab_dbFROM public;REVOKE -
데이터베이스 사용자를 위한 역할을 생성합니다.
postgres=>CREATE ROLElab_tech;CREATE ROLE -
이 역할이 있는 데이터베이스 사용자에게 데이터베이스 연결 기능을 제공합니다.
postgres=>GRANT CONNECT ON DATABASElab_dbTOlab_tech;GRANT -
lab_tech역할이 있는 모든 사용자에게 이 데이터베이스에 대한 모든 권한을 부여합니다.postgres=>GRANT ALL PRIVILEGES ON DATABASElab_dbTOlab_tech;GRANT -
다음과 같이 데이터베이스 사용자를 생성합니다.
postgres=>CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';CREATE ROLEpostgres=>CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';CREATE ROLE -
다음과 같이 두 사용자에게 lab_tech 역할과 관련된 권한을 부여합니다.
postgres=>GRANT lab_tech TO lab_user1;GRANT ROLEpostgres=>GRANT lab_tech TO lab_user2;GRANT ROLE
이 시점에서 lab_user1과 lab_user2는 lab_db 데이터베이스에 연결할 수 있습니다. 이 예제에서는 여러 데이터베이스 인스턴스와 다양한 스키마 생성, 제한된 권한 부여를 포함할 수 있는 엔터프라이즈 사용에 대한 모범 사례를 따르지 않습니다. 전체 정보 및 추가 시나리오를 알아보려면 PostgreSQL 사용자 및 역할 관리
PostgreSQL 데이터베이스의 권한에 대한 자세한 내용은 PostgreSQL 설명서에서 GRANT