Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] ROLE

[OpenSQL] ROLE

Database Role

PostgreSQL 은 Role 개념을 사용하여 데이터베이스 액세스 권한을 관리합니다.

Role 은 데이터베이스 오브젝트 ( ex. Table / Function ) 를 소유할 수 있으며 해당 오브젝트에 대한 권한을 다른 Role 에 할당하여 누가 어떤 오브젝트에 액세스할 수 있는지 제어할 수 있습니다. 또한, Role 의 구성원 자격을 다른 Role 에 부여할 수 있으므로 구성원 Role 이 다른 Role 에 할당된 권한을 사용할 수 있습니다.

Role 의 개념은 “사용자” 및 “그룹” 의 개념을 포함합니다.
PostgreSQL 8.1 이전 버전에서는 사용자와 그룹이 별개의 엔터티였지만 현재는 Role 만 있습니다.
모든 Role 은 사용자 및 그룹 또는 둘 다의 역할을 할 수 있습니다.

이 장에서는 Role 을 만들고 관리하는 방법에 대해 설명합니다.
데이터베이스 Role 은 개념적으로 운영 체제 사용자와 완전히 별개입니다.
Role 을 생성하려면 CREATE ROLE SQL 명령을 사용합니다.

CREATE ROLE hans;

Role 이름은 SQL identifier에 대한 규칙을 따릅니다. 특수 문자 없이 작성되지 않고 큰따옴표로 묶입니다.
기존 Role 을 제거하려면 유사한 DROP ROLE 명령을 사용합니다.

DROP ROLE hans;

편의상 createuser 및 dropuser 프로그램은 셸 명령줄에서 호출할 수 있는 이러한 SQL 명령에 대한 래퍼로 제공됩니다.

$ createuser hans
$ dropuser hans

Role 전체를 확인하려면 pg_roles 라는 이름의 시스템 카탈로그를 조회합니다.

SELECT * FROM pg_role;

psql 프로그램의 du 메타 조회 명령은 기존 Role 을 나열하는 데에도 유용합니다.
데이터베이스 시스템을 부트스트랩하기 위해 새로 초기화된 시스템에는 항상 하나의 Role 이 포함됩니다.
해당 Role 은 항상 “SUPERUSER” 미여 기본적으로 initdb를 실행할 때 변경되지 않는한 데이터베이스 클러스터를 초기화한 운영 체제 사용자와 동일한 이름을 갖습니다.
일반적으로 해당 Role 의 이름은 postgres 입니다.

postgres=# du
List of roles
Role name | Attributes | Member of
———–+————————————————————+———–
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

더 많은 Role 을 만들려면 먼저 해당 Role 로 연결해야 합니다.
데이터베이스 서버에 대한 모든 연결은 특정 Role 의 이름을 사용하여 이루어지며 이 Role 은 해당 연결에서 실행된 명령에 대한 초기 액세스 권한을 결정합니다.

특정 데이터베이스 연결에 사용할 Role 이름은 응용 프로그램별 방식으로 연결 요청을 시작하는 클라이언트에 의해 표시됩니다.
예를 들어, psql 프로그램은 -U 명령 옵션을 사용하여 연결할 Role 을 나타냅니다.

많은 응용 프로그램은 기본적으로 현재 운영 체제 사용자의 이름을 데이터베이스 연결에 사용할 이름으로 가정합니다.
따라서 Role 과 운영 체제 사용자 간에 명명 일치를 유지하는 것이 편리한 경우가 많습니다.

Role Attributes

데이터베이스 Role 에는 해당 권한을 정의하고 클라이언트 인증 시스템과 상호 작용하는 여러 특성이 있습니다. Role 을 생성할 때 또는 생성되어 있는 Role 을 변경하여 특성을 부여할 수 있습니다.

속성설명
Login PrivilegeLOGIN 특성이 있는 Role 만 데이터베이스 연결의 초기 Role 이름으로 사용할 수 있습니다.
새로운 Role 에 LOGIN 특성을 넣으려면 아래 명령어로 생성하십시오.

– CREATE ROLE hans LOGIN
– CREATE USER hans
Superuser Status데이터베이스 슈퍼유저는 로그인 권한을 제외하고 모든 권한 검사를 우회합니다. 이는 위험한 권한이며 부주의하게 사용해서는 안됩니다. 슈퍼유저가 아닌 역할로 대부분의 작업을 수행하는 것이 가장 좋습니다. 새로운 데이터베이스 슈퍼유저를 생성하려면 아래 명령어를 사용하십시오. 이 작업은 이미 슈퍼유저인 역할로 수행해야 합니다.
– CREATE ROLE hans SUPERUSER
Database Creation슈퍼유저를 제외하고는 Role 이 명시적으로 데이터베이스를 생성할 특성을 부여받아야 합니다. 이를 위해 아래 명령어를 사용하여 Role 을 생성하십시오.
– CREATE ROLE name CREATEDB
Role Creation슈퍼유저를 제외하고는 Role 이 명시적으로 추가 Role 을 생성할 특성을 부여받아야 합니다. 이를 위해 CREATE ROLE name CREATEROLE 를 사용하여 Role 을 생성하십시오.

CREATEROLE 권한이 있는 Role 은 다른 Role 을 변경하거나 삭제할 수 있으며, Role 의 멤버십을 부여하거나 취소할 수도 있습니다. Role 변경에는 ALTER ROLE을 사용하여 변경할 수 있는 대부분의 변경 사항이 포함됩니다. 예를 들어, 암호를 변경하는 것도 가능합니다. 또한 COMMENT 및 SECURITY LABEL 명령을 사용하여 Role 을 수정하는 것도 가능합니다.
그러나 CREATEROLE 권한은 SUPERUSER Role 을 생성하는 능력을 전달하지 않으며 이미 존재하는 SUPERUSER Role 에 대한 권한도 전달하지 않습니다. 또한 CREATEROLE 권한은 REPLICATION 사용자를 생성하거나 REPLICATION 권한을 부여하거나 취소하거나 해당 사용자의 Role 속성을 수정할 수 있는 능력도 전달하지 않습니다.
그러나 ALTER ROLE … SET 및 ALTER ROLE … RENAME을 REPLICATION 역할에 대해서는 사용할 수 있으며, COMMENT ON ROLE, SECURITY LABEL ON ROLE 및 DROP ROLE을 사용할 수도 있습니다.

마지막으로, CREATEROLE 권한은 BYPASSRLS 권한을 부여하거나 취소하는 능력을 전달하지 않습니다. CREATEROLE 권한을 통해 사용자는 (아직) 액세스 권한이 없는 Role 의 기능에 액세스할 수 있습니다. 이는 pg_execute_server_program 및 pg_write_server_files와 같은 매우 권한이 있는 역할을 포함하여 시스템 내의 모든 미리 정의된 역할의 기능에 액세스할 수 있다는 것을 의미합니다.
Initiating Replication스트리밍 복제를 시작할 수 있는 특성이 Role 에 명시적으로 부여되어야 합니다. (모든 권한 검사를 우회하는 수퍼유저 제외) 스트리밍 복제에 사용되는 Role 은 LOGIN 특성도 있어야 합니다.
– CREATE ROLE hans REPLICATION LOGIN
Password암호는 클라이언트 인증 방법에서 사용자가 데이터베이스에 연결할 때 암호를 제공해야 하는 경우에만 중요합니다.  데이터베이스 암호는 운영 체제 암호와 별개입니다.  Role 생성 시 암호를 지정합니다 .
– CREATE ROLE hans LOGIN PASSWORD ‘4656’
Inheritance of PrivilegesRole 에는 기본적으로 구성원인 Role 의 권한을 상속할 수 있는 특성이 부여됩니다. 단, 상속 권한 없이 Role 을 생성하려면 아래 명령어를 사용합니다.
– CREATE ROLE hans NOINHERIT
Bypassing Row-Level SecurityRole 에는 모든 RLS(행 수준 보안) 정책을 우회할 수 있는 권한이 명시적으로 부여되어야 합니다.(모든 권한 검사를 우회하는 수퍼유저 제외) 이러한 Role 을 생성하려면 수퍼유저로 사용하십시오.
– CREATE ROLE hans BYPASSRLS
Connection Limit연결 제한은 Role 이 만들 수 있는 동시 연결 수를 지정할 수 있습니다.  
-1 (기본값 )은 제한이 없음을 의미합니다. 
– CREATE ROLE hans CONNECTION LIMIT ‘integer’

지금까지 ‘PostgreSQL Role’에 관해 알아보았습니다

‘PostgreSQL Privilege’을 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •