이 페이지에서는 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 콘솔에서 또는 다음 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 문서에서 다음을 참조하세요.