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 역할을 사용하여 데이터베이스 사용자를 만들 수 있습니다.

  • 수퍼유저 권한이 필요한 확장 프로그램 만들기
  • 이벤트 트리거 만들기
  • 복제 사용자 만들기
  • 복제 게시 및 구독 만들기
  • pg_largeobject 카탈로그 테이블 전체 액세스

기본 PostgreSQL 사용자

새 PostgreSQL용 Cloud SQL 인스턴스를 만들면 기본 관리자 사용자 postgres가 생성되지만 비밀번호가 생성되지 않습니다. 로그인하려면 먼저 이 사용자의 비밀번호를 설정해야 합니다. Google Cloud Console에서 또는 다음 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 사용자

IAM은 IAM 데이터베이스 인증이라고 부르는 기능으로 Cloud SQL에 통합됩니다. 이 기능을 사용하여 인스턴스를 만들면 IAM 사용자가 자신의 IAM 사용자 이름 및 비밀번호를 사용하여 인스턴스에 로그인할 수 있습니다. IAM 데이터베이스 인증을 사용하면 데이터베이스 액세스 권한을 부여할 때 사용자의 기존 IAM 사용자 인증 정보를 사용할 수 있다는 것입니다. 사용자가 조직을 나가면 IAM 계정이 정지되고 액세스가 자동으로 삭제됩니다. IAM 데이터베이스 인증에 대한 자세한 내용은 Cloud SQL 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 문서에서 다음을 참조하세요.

다음 단계