이 페이지에서는 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 CAST
및DROP CAST
문 수행하기. 하지만 이 사용자는 소스 및 대상 데이터 유형 모두에 대한USAGE
권한이 있어야 합니다. 예를 들어 사용자는 소스int
데이터 유형을 대상boolean
데이터 유형으로 변환하는 cast 변환을 만들 수 있습니다.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 문서에서 다음을 참조하세요.