

# 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)」を参照してください。
**注記**  
RDS for Db2 DB インスタンスは `RESTRICTIVE` モードで作成されています。このため、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}} を、ユーザーを追加した 2 番目のグループの名前に置き換えます。

   ```
   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}}')"
   ```