PostgreSQL | 역할(사용자) ROLE 생성 | 지정한 역할이 소유하는 객체의 소유권을 다른 역할로 변경 (REASSIGN OWNED)


REASSIGN OWNED 명령을 사용하여 지정한 역할이 소유하는 데이터베이스 객체의 소유권을 다른 역할로 변경하는 방법에 대해 설명한다. 역할을 삭제하기 전에 다른 역할에 소유권을 변경하는 경우 등에 사용된다.

객체의 소유권을 다른 역할로 변경

REASSIGN OWNED 명령을 사용하면, 지정한 역할이 데이터베이스에 소유하고 있는 모든 데이터베이스 객체를 다른 역할에 소유권을 변경할수 있다. 형식을 다음과 같다.

REASSIGN OWNED BY old_role [, ...] TO new_role

지정한 역할(old_role)이 소유하는 개체의 소유권을 다른 열할(new_role)로 변경한다.

직접 해보도록 하자. 현재 devkuma 데이터베이스에는 mykuma 역할 소유자 mykuma 스키마가 작성되어 있다.

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+----------
 mykuma   | mykuma
 myschema | postgres
 public   | postgres
(3개 행)


devkuma=#

그리고 public 스키마에는 book 테이블이 생성되어 있다.

devkuma=# \dt
      릴레이션(relation) 목록
 스키마 | 이름 |  종류  |  소유주
--------+------+--------+----------
 public | blog | 테이블 | postgres
 public | book | 테이블 | mykuma
 public | memo | 테이블 | postgres
(3개 행)


devkuma=#

public 스키마 중의 blog 테이블에 mykuma 역할에 SELECT 권한이 추가되어 있다.

devkuma=# \dp
                                액세스 권한
 스키마 | 이름 |  종류  |        액세스 권한        | 칼럼 접근권한 | 정책
--------+------+--------+---------------------------+---------------+------
 public | blog | 테이블 | postgres=arwdDxt/postgres+|               |
        |      |        | mykuma=r/postgres         |               |
 public | book | 테이블 |                           |               |
 public | memo | 테이블 | postgres=arwdDxt/postgres |               |
(3개 행)


devkuma=#

그럼 devkuma 데이터베이스에서 mykuma 역할이 소유하는 객체의 소유권을 superkuma 역할로 변경하려고 한다. 다음과 같이 실행해 보자.

devkuma=# reassign owned by mykuma to superkuma;
REASSIGN OWNED
devkuma=#

개체의 소유권이 superkuma 역할로 변경되었습니다.

그러면 mykuma 스키마의 소유권을 확인하여 보자.

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+-----------
 mykuma   | superkuma
 myschema | postgres
 public   | postgres
(3개 행)


devkuma=#

mykuma 스키마의 소유권이 superkuma 역할로 변경되는 것을 확인할 수 있다.

다음은 public 스키마에 생성된 book 테이블의 소유권을 확인해합니다.

devkuma=# \dt
      릴레이션(relation) 목록
 스키마 | 이름 |  종류  |  소유주
--------+------+--------+-----------
 public | blog | 테이블 | postgres
 public | book | 테이블 | superkuma
 public | memo | 테이블 | postgres
(3개 행)


devkuma=#

book 테이블의 소유권이 superkuma 역할로 변경되는 것을 확인할 수 있다.

마지막으로 public 스키마 중의 blog 테이블에 mykuma 역할에 추가된 권한을 확인하려고 한다.

devkuma=# \dp
                                액세스 권한
 스키마 | 이름 |  종류  |        액세스 권한        | 칼럼 접근권한 | 정책
--------+------+--------+---------------------------+---------------+------
 public | blog | 테이블 | postgres=arwdDxt/postgres+|               |
        |      |        | mykuma=r/postgres         |               |
 public | book | 테이블 |                           |               |
 public | memo | 테이블 | postgres=arwdDxt/postgres |               |
(3개 행)


devkuma=#

mykuma 롤에 부여된 권한은 그대로 이다. REASSIGN OWNED 명령은 권한까지 변경되지 않는다.

REASSIGN OWNED 명령을 사용하여 지정된 역할이 소유하고있는 데이터베이스 개체의 소유권을 다른 역할로 변경하는 방법에 대해 알아보았다.