PostgreSQL 사용자 및 역할 정보

이 페이지에서는 Cloud SQL에서 PostgreSQL 사용자 계정과 역할이 작동하는 방식을 설명합니다. PostgreSQL 역할을 사용하면 PostgreSQL 인스턴스에 액세스하는 사용자의 액세스와 권한을 제어할 수 있습니다.

PostgreSQL 역할에 관한 자세한 문서는 PostgreSQL 문서에서 데이터베이스 역할을 참조하세요. Cloud SQL 사용자 만들기 및 관리에 대한 자세한 내용은 사용자 만들기 및 관리를 참조하세요.

사용자 및 역할의 차이점

PostgreSQL 역할은 역할 하나일 수 있고 여러 역할로 구성된 역할 그룹으로 작동할 수 있습니다. 사용자는 로그인 권한이 있는 역할입니다(역할에 LOGIN 속성이 있음). Cloud SQL이 만드는 모든 역할에 LOGIN 속성이 포함되므로, Cloud SQL에서 역할사용자라는 용어는 서로 동일한 의미로 사용됩니다. 그러나 psql 클라이언트에 역할을 만들 경우 이 역할에 반드시 LOGIN 속성이 포함되지는 않습니다.

모든 PostgreSQL 사용자는 비밀번호가 있어야 합니다. 비밀번호가 없는 사용자로는 로그인할 수 없습니다.

수퍼유저 제한사항 및 권한

PostgreSQL용 Cloud SQL은 관리형 서비스이므로 고급 권한이 필요한 특정 시스템 프로시저와 테이블에 대한 액세스를 제한합니다. Cloud SQL에서 고객은 수퍼유저 속성이 있는 사용자를 만들거나 이 사용자로 액세스할 수 없습니다.

수퍼유저 권한이 있는 데이터베이스 사용자는 만들 수 없습니다. 하지만 다음과 같은 일부 수퍼유저 권한을 가진 cloudsqlsuperuser 역할을 사용하여 데이터베이스 사용자를 만들 수 있습니다.

  • 수퍼유저 권한이 필요한 확장 프로그램 만들기
  • 이벤트 트리거 만들기
  • 복제 사용자 만들기
  • 복제 게시 및 구독 만들기
  • cloudsqlsuperuser 역할이 있는 데이터베이스 사용자로 CREATE CASTDROP CAST 문 수행하기. 단, 이 사용자는 소스 및 대상 데이터 유형 모두에 대한 USAGE 권한이 있어야 합니다. 예를 들어 사용자는 소스 int 데이터 유형을 대상 boolean 데이터 유형으로 변환하는 cast 변환을 만들 수 있습니다.

  • pg_largeobject 카탈로그 테이블에 대한 전체 액세스 권한 부여받기

기본 PostgreSQL 사용자

새 PostgreSQL용 Cloud SQL 인스턴스를 만들면 기본 관리자 사용자 postgres가 생성되지만 비밀번호가 생성되지 않습니다. 로그인하려면 먼저 이 사용자의 비밀번호를 설정해야 합니다. Google Cloud 콘솔에서 또는 다음 gcloud 명령어를 사용하여 이를 수행할 수 있습니다.

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

postgres 사용자는 cloudsqlsuperuser 역할의 일부이며 CREATEROLE, CREATEDB, LOGIN과 같은 속성(권한)을 가집니다. SUPERUSER 또는 REPLICATION 속성은 없습니다.

기본 cloudsqlimportexport 사용자는 CSV 가져오기/내보내기 작업에 필요한 최소한의 권한으로 생성됩니다. 이러한 작업을 수행할 사용자를 자체적으로 만들 수 있습니다. 하지만 만들지 않을 경우 기본 cloudsqlimportexport 사용자가 사용됩니다. cloudsqlimportexport 사용자는 시스템 사용자이므로 고객이 직접 이 사용자를 사용할 수 없습니다.

IAM 인증을 위한 Cloud SQL IAM 사용자

Identity and Access Management (IAM)는 IAM 인증이라는 기능으로 Cloud SQL에 통합됩니다. 이 기능을 사용하여 인스턴스를 만들면 IAM 사용자가 자신의 IAM 사용자 이름 및 비밀번호를 사용하여 인스턴스에 로그인할 수 있습니다. IAM 인증을 사용하면 데이터베이스 액세스 권한을 부여할 때 사용자의 기존 IAM 사용자 인증 정보를 사용할 수 있다는 것입니다. 사용자가 조직을 나가면 IAM 계정이 정지되고 액세스가 자동으로 삭제됩니다.

다른 PostgreSQL 사용자

다른 PostgreSQL 사용자나 역할을 만들 수 있습니다. Cloud SQL을 사용하여 만든 모든 사용자는 cloudsqlsuperuser 역할의 일부로 생성되며 postgres 사용자와 동일한 속성 집합(CREATEROLE, CREATEDB, LOGIN)을 가집니다. ALTER ROLE 명령어를 사용하여 사용자 속성을 변경할 수 있습니다.

psql 클라이언트에 새 사용자를 만들 경우 해당 사용자에 다른 역할을 연결하거나 다른 속성을 부여할 수 있습니다.

pg_shadow 뷰 및 pg_authid 테이블에 대한 액세스

pg_shadow 뷰를 사용하여 pg_authid 카탈로그 테이블에서 rolcanlogin으로 표시된 역할의 속성으로 작업할 수 있습니다.

pg_shadow 뷰에는 해시된 비밀번호와 클러스터에 로그인이 허용되는 역할(사용자)의 기타 속성이 포함되어 있습니다. pg_authid 카탈로그 테이블에는 모든 데이터베이스 역할의 해시된 비밀번호와 기타 속성이 포함되어 있습니다.

Cloud SQL에서는 고객이 기본 권한을 사용하여 pg_shadow 뷰 또는 pg_authid 테이블에 액세스할 수 없습니다. 하지만 역할 이름 및 해시된 비밀번호에 대한 액세스는 다음과 같은 특정 상황에서 유용합니다.

  • 기존 사용자 및 비밀번호로 프록시 또는 부하 분산 설정
  • 비밀번호 변경 없이 사용자 마이그레이션
  • 비밀번호 정책 관리를 위한 커스텀 솔루션 구현

pg_shadow 뷰 및 pg_authid 테이블에 대한 플래그 설정

pg_shadow 뷰에 액세스하려면 cloudsql.pg_shadow_select_role 플래그를 PostgreSQL 역할 이름으로 설정합니다. pg_authid 테이블에 액세스하려면 cloudsql.pg_authid_select_role 플래그를 PostgreSQL 역할 이름으로 설정합니다.

cloudsql.pg_shadow_select_role이 있는 경우 pg_shadow 뷰에 대한 읽기 전용(SELECT) 액세스 권한이 있습니다. cloudsql.pg_authid_select_role이 있는 경우 pg_authid 테이블에 대한 SELECT 액세스 권한이 있습니다.

두 역할 중 하나가 없으면 설정이 적용되지 않고 오류가 발생하지 않습니다. 하지만 사용자가 뷰나 테이블에 액세스하려고 시도할 때 오류가 기록됩니다. 이 오류는 PostgreSQL 데이터베이스 로그인 cloudsql.googleapis.com/postgres.log에 기록됩니다. 이 로그 보기에 대한 자세한 내용은 인스턴스 로그 보기를 참조하세요.

구성된 역할이 있고 cloudsql.pg_shadow_select_role 플래그 또는 cloudsql.pg_authid_select_role 플래그 값에 오타가 없는지 확인합니다. 또한 pg_has_role 함수를 사용하여 사용자가 이러한 역할의 구성원인지 확인할 수 있습니다. 이 함수에 대한 자세한 내용은 시스템 정보 함수 및 연산자 페이지를 참조하세요.

cloudsql.pg_shadow_select_role 플래그 또는 cloudsql.pg_authid_select_role 플래그를 PostgreSQL 역할 멤버십과 함께 사용하여 여러 사용자의 pg_shadow 또는 pg_authid 액세스를 관리할 수 있습니다.

두 플래그 중 어느 하나를 변경해도 데이터베이스를 다시 시작할 필요가 없습니다.

지원되는 플래그에 대한 자세한 내용은 데이터베이스 플래그 구성을 참조하세요.

비밀번호 스토리지 형식 선택

PostgreSQL용 Cloud SQL은 사용자 비밀번호를 해시된 형식으로 저장합니다. password_encryption 플래그를 사용하여 암호화 알고리즘을 md5 또는 scram-sha-256으로 설정할 수 있습니다. md5 알고리즘은 가장 광범위한 호환성을 제공하고 scram-sha-256은 이전 클라이언트와 호환되지 않을 수 있습니다.

Cloud SQL 인스턴스에서 역할 속성을 내보내도록 pg_shadow 액세스를 사용 설정할 때는 클라이언트에서 지원되는 가장 안전한 알고리즘을 사용해야 합니다.

또한 PostgreSQL 문서에서 다음을 참조하세요.

다음 단계