

# RDS for Db2에 대한 권한 부여 및 취소
<a name="db2-granting-revoking-privileges"></a>

사용자는 데이터베이스에 연결된 그룹의 멤버십을 통해 데이터베이스에 액세스할 수 있습니다.

다음 프로시저를 사용하여 데이터베이스에 대한 액세스를 제어할 수 있는 권한을 부여하거나 취소할 수 있습니다.

이 프로시저는 로컬 머신에서 IBM Db2 CLP를 실행하여 RDS for Db2 DB 인스턴스에 연결합니다. 로컬 머신에서 실행되는 RDS for Db2 DB 인스턴스에 연결하려면 TCPIP 노드와 데이터베이스를 카탈로그화해야 합니다. 자세한 내용은 [IBM Db2 CLP을 사용하여 Amazon RDS for Db2 DB 인스턴스에 연결](db2-connecting-with-clp-client.md) 섹션을 참조하세요.

**Topics**
+ [사용자에게 데이터베이스 액세스 권한 부여](#db2-granting-user-access)
+ [사용자의 암호 변경](#db2-changing-user-password)
+ [사용자에게 그룹 추가](#db2-adding-group-to-user)
+ [사용자로부터 그룹 제거](#db2-removing-groups-from-user)
+ [사용자 제거](#db2-removing-user)
+ [사용자 표시](#db2-listing-users-database)
+ [역할 생성](#db2-creating-role)
+ [역할 부여](#db2-granting-role)
+ [역할 취소](#db2-revoking-role)
+ [역할 삭제](#db2-dropping-role)
+ [데이터베이스 권한 부여](#db2-granting-dbadmin-auth)
+ [데이터베이스 권한 취소](#db2-revoking-dbadmin-auth)

## 사용자에게 데이터베이스 액세스 권한 부여
<a name="db2-granting-user-access"></a>

**사용자에게 데이터베이스 액세스 권한을 부여하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

   다음 예제와 비슷한 출력이 생성됩니다.

   ```
   Database Connection Information
       
   Database server        = DB2/LINUXX8664 11.5.8.0
   SQL authorization ID   = ADMIN
   Local database alias   = RDSADMIN
   ```

1. `rdsadmin.add_user`를 호출하여 권한 부여 목록에 사용자를 추가합니다. 자세한 내용은 [rdsadmin.add\_user](db2-sp-granting-revoking-privileges.md#db2-sp-add-user) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.add_user(
       '{{username}}',
       '{{password}}',
       '{{group_name}},{{group_name}}')"
   ```

1. (선택 사항) `rdsadmin.add_groups`를 호출하여 사용자에게 그룹을 더 추가합니다. 자세한 내용은 [rdsadmin.add\_groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.add_groups(
       '{{username}}',
       '{{group_name}},{{group_name}}')"
   ```

1. 사용자가 사용할 수 있는 권한을 확인합니다. 다음 예제에서 {{rds\_database\_alias}}, {{master\_user}}, {{master\_password}}를 사용자 자체 정보로 바꿉니다. {{username}}도 사용자의 사용자 이름으로 대체합니다.

   ```
   db2 terminate
   db2 connect to {{rds_database_alias}} user {{master_user}} using {{master_password}}
   db2 "SELECT SUBSTR(AUTHORITY,1,20) AUTHORITY, D_USER, D_GROUP, D_PUBLIC
          FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('{{username}}', 'U') ) AS T
          ORDER BY AUTHORITY"
   ```

   다음 예제와 비슷한 출력이 생성됩니다.

   ```
   AUTHORITY            D_USER D_GROUP D_PUBLIC
   -------------------- ------ ------- --------
   ACCESSCTRL           N      N       N
   BINDADD              N      N       N
   CONNECT              N      N       N
   CREATETAB            N      N       N
   CREATE_EXTERNAL_ROUT N      N       N
   CREATE_NOT_FENCED_RO N      N       N
   CREATE_SECURE_OBJECT N      N       N
   DATAACCESS           N      N       N
   DBADM                N      N       N
   EXPLAIN              N      N       N
   IMPLICIT_SCHEMA      N      N       N
   LOAD                 N      N       N
   QUIESCE_CONNECT      N      N       N
   SECADM               N      N       N
   SQLADM               N      N       N
   SYSADM               *      N       *
   SYSCTRL              *      N       *
   SYSMAINT             *      N       *
   SYSMON               *      N       *
   WLMADM               N      N       N
   ```

1. 사용자를 추가한 그룹에 RDS for Db2 역할 `ROLE_NULLID_PACKAGES`, `ROLE_TABLESPACES`, `ROLE_PROCEDURES`를 부여합니다. 자세한 내용은 [Amazon RDS for Db2 기본 역할](db2-default-roles.md) 섹션을 참조하세요.
**참고**  
`RESTRICTIVE` 모드에서 RDS for Db2 DB 인스턴스를 생성합니다. 따라서 RDS for Db2 역할 `ROLE_NULLID_PACKAGES`, `ROLE_TABLESPACES`, `ROLE_PROCEDURES`는 IBM Db2 CLP 및 Dynamic SQL에 대해 `NULLID` 패키지에서 실행 권한을 부여합니다. 또한 이러한 역할은 테이블스페이스에 대한 사용자 권한을 부여합니다.

   1. Db2 데이터베이스에 연결합니다. 다음 예제에서 {{database\_name}}, {{master\_user}}, {{master\_password}}를 사용자 자체 정보로 바꿉니다.

      ```
      db2 connect to {{database_name}} user {{master_user}} using {{master_password}}
      ```

   1. 그룹에 `ROLE_NULLED_PACKAGES` 역할을 부여합니다. 다음 예제에서 {{group\_name}}을 역할을 추가하려는 그룹의 이름으로 바꿉니다.

      ```
      db2 "grant role ROLE_NULLID_PACKAGES to group {{group_name}}"
      ```

   1. 동일한 그룹에 `ROLE_TABLESPACES` 역할을 부여합니다. 다음 예제에서 {{group\_name}}을 역할을 추가하려는 그룹의 이름으로 바꿉니다.

      ```
      db2 "grant role ROLE_TABLESPACES to group {{group_name}}"
      ```

   1. 동일한 그룹에 `ROLE_PROCEDURES` 역할을 부여합니다. 다음 예제에서 {{group\_name}}을 역할을 추가하려는 그룹의 이름으로 바꿉니다.

      ```
      db2 "grant role ROLE_PROCEDURES to group {{group_name}}"
      ```

1. 사용자를 추가한 그룹에 `connect`, `bindadd`, `createtab`, `IMPLICIT_SCHEMA` 권한을 부여합니다. 다음 예제에서 {{group\_name}}을 사용자를 추가한 두 번째 그룹의 이름으로 대체합니다.

   ```
   db2 "grant usage on workload SYSDEFAULTUSERWORKLOAD to public"
   db2 "grant connect, bindadd, createtab, implicit_schema on database to group {{group_name}}"
   ```

1. 사용자를 추가한 각 추가 그룹에 대해 4\~6단계를 반복합니다.

1. 사용자로 연결하고, 표를 만들고, 표에 값을 넣고, 표에서 데이터를 반환하여 사용자의 액세스 권한을 테스트합니다. 다음 예제에서 {{rds\_database\_alias}}, {{username}}, {{password}}를 데이터베이스 이름과 사용자의 사용자 이름 및 암호로 바꿉니다.

   ```
   db2 connect to {{rds_database_alias}} user {{username}} using {{password}}
   db2 "create table t1(c1 int not null)"
   db2 "insert into t1 values (1),(2),(3),(4)"
   db2 "select * from t1"
   ```

## 사용자의 암호 변경
<a name="db2-changing-user-password"></a>

**사용자의 암호를 변경하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.change_password`를 호출하여 암호를 변경합니다. 자세한 내용은 [rdsadmin.change\_password](db2-sp-granting-revoking-privileges.md#db2-sp-change-password) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.change_password(
       '{{username}}',
       '{{new_password}}')"
   ```

## 사용자에게 그룹 추가
<a name="db2-adding-group-to-user"></a>

**사용자에게 그룹을 추가하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.add_groups`를 호출하여 사용자에게 그룹을 추가합니다. 자세한 내용은 [rdsadmin.add\_groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.add_groups(
       '{{username}}',
       '{{group_name}},{{group_name}}')"
   ```

## 사용자로부터 그룹 제거
<a name="db2-removing-groups-from-user"></a>

**사용자로부터 그룹을 제거하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.remove_groups`를 호출하여 그룹을 제거합니다. 자세한 내용은 [rdsadmin.remove\_groups](db2-sp-granting-revoking-privileges.md#db2-sp-remove-groups) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.remove_groups(
       '{{username}}',
       '{{group_name}},{{group_name}}')"
   ```

## 사용자 제거
<a name="db2-removing-user"></a>

**권한 부여 목록에서 사용자를 제거하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.remove_user`를 호출하여 권한 부여 목록에서 사용자를 제거합니다. 자세한 내용은 [rdsadmin.remove\_user](db2-sp-granting-revoking-privileges.md#db2-sp-remove-user) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.remove_user('{{username}}')"
   ```

## 사용자 표시
<a name="db2-listing-users-database"></a>

권한 부여 목록에 사용자를 표시하려면 `rdsadmin.list_users` 저장 프로시저를 호출하세요. 자세한 내용은 [rdsadmin.list\_users](db2-sp-granting-revoking-privileges.md#db2-sp-list-users) 섹션을 참조하세요.

```
db2 "call rdsadmin.list_users()"
```

## 역할 생성
<a name="db2-creating-role"></a>

[rdsadmin.create\_role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) 저장 프로시저를 사용하여 역할을 생성할 수 있습니다.

**역할을 생성하려면**

1. `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. 콘텐츠를 출력하도록 Db2를 설정합니다.

   ```
   db2 set serveroutput on 
   ```

1. 역할을 생성합니다. 자세한 내용은 [rdsadmin.create\_role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.create_role(
       '{{database_name}}',
       '{{role_name}}')"
   ```

1. 콘텐츠를 출력하지 않도록 Db2를 설정합니다.

   ```
   db2 set serveroutput off
   ```

## 역할 부여
<a name="db2-granting-role"></a>

[rdsadmin.grant\_role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) 저장 프로시저를 사용하여 역할, 사용자 또는 그룹에 역할을 할당할 수 있습니다.

**역할을 할당하려면**

1. `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. 콘텐츠를 출력하도록 Db2를 설정합니다.

   ```
   db2 set serveroutput on 
   ```

1. 역할을 할당합니다. 자세한 내용은 [rdsadmin.grant\_role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.grant_role(
       '{{database_name}}',
       '{{role_name}}',
       '{{grantee}}',
       '{{admin_option}}')"
   ```

1. 콘텐츠를 출력하지 않도록 Db2를 설정합니다.

   ```
   db2 set serveroutput off
   ```

## 역할 취소
<a name="db2-revoking-role"></a>

[rdsadmin.revoke\_role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role) 저장 프로시저를 사용하여 역할, 사용자 또는 그룹에서 역할을 취소할 수 있습니다.

**역할을 취소하려면 다음과 같이 하세요.**

1. `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. 역할을 취소합니다. 자세한 내용은 [rdsadmin.revoke\_role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.revoke_role(
       ?,
       '{{database_name}}',
       '{{role_name}}',
       '{{grantee}}')"
   ```

## 역할 삭제
<a name="db2-dropping-role"></a>

[rdsadmin.drop\_role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role) 저장 프로시저를 사용하여 역할을 삭제할 수 있습니다.

**역할을 삭제하는 방법**

1. `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. 역할을 삭제합니다. 자세한 내용은 [rdsadmin.drop\_role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.drop_role(
       ?,
       '{{database_name}}',
       '{{role_name}}')"
   ```

## 데이터베이스 권한 부여
<a name="db2-granting-dbadmin-auth"></a>

`DBADM` 권한을 가진 마스터 사용자는 역할, 사용자 또는 그룹에 `DBADM`, `ACCESSCTRL` 또는 `DATAACCESS` 권한을 부여할 수 있습니다.

**데이터베이스에 권한을 부여하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.dbadm_grant`를 호출하여 사용자에게 액세스 권한을 부여합니다. 자세한 내용은 [rdsadmin.dbadm\_grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       '{{database_name}},
       '{{authorization}}',
       '{{grantee}}')"
   ```

**사용 사례**

다음 절차는 역할 생성, 역할에 `DBADM` 권한 부여, 사용자에게 역할 할당 및 그룹에 역할 할당 과정을 안내합니다.

****

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `TESTDB` 데이터베이스에 대해 `PROD_ROLE` 역할을 생성합니다. 자세한 내용은 [rdsadmin.create\_role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.create_role(
       'TESTDB',
       'PROD_ROLE')"
   ```

1. `PROD_USER` 사용자에게 역할을 할당합니다. `PROD_USER`에 역할을 할당할 수 있는 관리자 권한이 부여됩니다. 자세한 내용은 [rdsadmin.grant\_role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.grant_role(
       ?,
       'TESTDB',
       'PROD_ROLE',
       'USER PROD_USER',
       'Y')"
   ```

1. (선택 사항) 추가 권한을 제공합니다. 다음 예제에서는 `FUNDPROD` 데이터베이스에 대해 `PROD_ROLE` 역할에 `DBADM` 권한을 부여합니다. 자세한 내용은 [rdsadmin.dbadm\_grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       'FUNDPROD',
       'DBADM',
       'ROLE PROD_ROLE')"
   ```

1. 세션을 종료합니다.

   ```
   db2 terminate
   ```

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `TESTDB` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to TESTDB user {{master_username}} using {{master_password}}
   ```

1. 역할에 더 많은 권한을 추가합니다.

   ```
   db2 "grant connect, implicit_schema on database to role PROD_ROLE"
   ```

1. 그룹에 `PROD_ROLE` 역할을 부여합니다.

   ```
   db2 "grant role PROD_ROLE to group PRODGRP"
   ```

`PRODGRP` 그룹에 속한 사용자는 이제 `TESTDB` 데이터베이스 연결, 테이블 생성 또는 스키마 생성과 같은 작업을 수행할 수 있습니다.

## 데이터베이스 권한 취소
<a name="db2-revoking-dbadmin-auth"></a>

`DBADM` 권한을 가진 마스터 사용자는 역할, 사용자 또는 그룹의 `DBADM`, `ACCESSCTRL` 또는 `DATAACCESS` 권한을 취소할 수 있습니다.

**데이터베이스 권한을 취소하려면**

1. RDS for Db2 DB 인스턴스의 마스터 사용자 이름과 마스터 암호를 사용하여 `rdsadmin` 데이터베이스에 연결합니다. 다음 예제에서 {{master\_username}} 및 {{master\_password}}를 사용자 자체 정보로 대체합니다.

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. `rdsadmin.dbadm_revoke`를 호출하여 사용자 액세스 권한을 취소합니다. 자세한 내용은 [rdsadmin.dbadm\_revoke](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-revoke) 섹션을 참조하세요.

   ```
   db2 "call rdsadmin.dbadm_revoke(
       ?,
       '{{database_name}},
       '{{authorization}}',
       '{{grantee}}')"
   ```