PostgreSQL 데이터베이스에 대한 사용자 액세스 제어
PostgreSQL의 새 데이터베이스는 항상 모든 데이터베이스 사용자와 역할이 객체를 만들 수 있도록 허용하는 데이터베이스 public
스키마의 기본 권한 집합으로 생성됩니다. 이러한 권한을 통해 데이터베이스 사용자는 데이터베이스에 연결하고, 가령 연결된 동안 임시 테이블을 만들 수 있습니다.
RDS for PostgreSQL DB 인스턴스 에 생성한 데이터베이스 인스턴스에 액세스할 수 있는 사용자 권한을 보다 효과적으로 제어하려면 이러한 기본 public
권한을 회수하는 것이 좋습니다. 이렇게 하고 나서 다음 절차에 표시된 것처럼 데이터베이스 사용자에게 보다 세분화된 구체적인 권한을 부여하면 됩니다.
새 데이터베이스 인스턴스에 대한 역할 및 권한을 설정하는 방법
새로 생성한 RDS for PostgreSQL DB 인스턴스에 데이터베이스를 설정하여 여러 연구자가 사용할 수 있도록 하고, 이들 모두 데이터베이스에 대한 읽기-쓰기 액세스 권한이 필요하다고 가정합니다.
다음과 같이
psql
또는 pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.psql --host=
your-db-instance.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 DATABASE
lab_db
;CREATE DATABASE
새 데이터베이스의
PUBLIC
스키마에서 모든 권한을 회수합니다.postgres=>
REVOKE ALL ON DATABASE
lab_db
FROM public;REVOKE
데이터베이스 사용자를 위한 역할을 생성합니다.
postgres=>
CREATE ROLE
lab_tech
;CREATE ROLE
이 역할이 있는 데이터베이스 사용자에게 데이터베이스 연결 기능을 제공합니다.
postgres=>
GRANT CONNECT ON DATABASE
lab_db
TOlab_tech
;GRANT
lab_tech
역할이 있는 모든 사용자에게 이 데이터베이스에 대한 모든 권한을 부여합니다.postgres=>
GRANT ALL PRIVILEGES ON DATABASE
lab_db
TOlab_tech
;GRANT
다음과 같이 데이터베이스 사용자를 생성합니다.
postgres=>
CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';
CREATE ROLE
postgres=>
CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';
CREATE ROLE
-
다음과 같이 두 사용자에게 lab_tech 역할과 관련된 권한을 부여합니다.
postgres=>
GRANT lab_tech TO lab_user1;
GRANT ROLE
postgres=>
GRANT lab_tech TO lab_user2;
GRANT ROLE
이 시점에서 lab_user1
과 lab_user2
는 lab_db
데이터베이스에 연결할 수 있습니다. 이 예제에서는 여러 데이터베이스 인스턴스와 다양한 스키마 생성, 제한된 권한 부여를 포함할 수 있는 엔터프라이즈 사용에 대한 모범 사례를 따르지 않습니다. 전체 정보 및 추가 시나리오를 알아보려면 PostgreSQL 사용자 및 역할 관리
PostgreSQL 데이터베이스의 권한에 대한 자세한 내용은 PostgreSQL 설명서에서 GRANT