

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 授予及撤銷 RDS for Db2 的權限
<a name="db2-granting-revoking-privileges"></a>

使用者可透過連接到資料庫之群組的成員資格來存取資料庫。

使用下列程序來授予及撤銷許可，以控制對資料庫的存取。

這些程序使用本機電腦上執行的 IBM Db2 CLP 來連線至 RDS for Db2 資料庫執行個體。請務必為 TCPIP 節點和資料庫編製目錄，以連線至在本機電腦上執行的 RDS for Db2 資料庫執行個體。如需詳細資訊，請參閱[使用 IBM Db2 CLP 連線至 Amazon RDS for Db2 資料庫執行個體](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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

   ```
   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\$1user](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\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups)。

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

1. 確認使用者可用的授權單位。在下列範例中，將 *rds\$1database\$1alias*、*master\$1user* 和 *master\$1password* 取代為您自己的資訊。此外，將 *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 資料庫執行個體。因此，RDS for Db2 角色 `ROLE_NULLID_PACKAGES`、`ROLE_TABLESPACES` 和 `ROLE_PROCEDURES` 會為 IBM Db2 CLP 和 Dynamic SQL 授予 `NULLID` 套件的執行權限。這些角色也會授予資料表空間的使用者權限。

   1. 連線至 Db2 資料庫。在下列範例中，將 *database\$1name*、*master\$1user* 和 *master\$1password* 取代為您自己的資訊。

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

   1. 將角色 `ROLE_NULLED_PACKAGES` 授予群組。在下列範例中，將 *group\$1name* 取代為您要新增角色的目標群組之名稱。

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

   1. 將角色 `ROLE_TABLESPACES` 授予相同的群組。在下列範例中，將 *group\$1name* 取代為您要新增角色的目標群組之名稱。

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

   1. 將角色 `ROLE_PROCEDURES` 授予相同的群組。在下列範例中，將 *group\$1name* 取代為您要新增角色的目標群組之名稱。

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

1. 將 `connect`、`bindadd`、`createtab` 和 `IMPLICIT_SCHEMA` 授權授予您新增使用者的目標群組。在下列範例中，將 *group\$1name* 取代為您新增使用者的第二個目標群組之名稱。

   ```
   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\$1database\$1alias*、*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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.change_password` 來變更密碼。如需詳細資訊，請參閱[rdsadmin.change\$1password](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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.add_groups` 將群組新增至使用者。如需詳細資訊，請參閱[rdsadmin.add\$1groups](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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.remove_groups` 以移除群組。如需詳細資訊，請參閱[rdsadmin.remove\$1groups](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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.remove_user` 以從授權清單中移除使用者。如需詳細資訊，請參閱[rdsadmin.remove\$1user](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\$1users](db2-sp-granting-revoking-privileges.md#db2-sp-list-users)。

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

## 建立角色
<a name="db2-creating-role"></a>

您可以使用 [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) 預存程序來建立角色。

**若要建立角色**

1. 連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您的資訊。

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

1. 將 Db2 設定為輸出內容。

   ```
   db2 set serveroutput on 
   ```

1. 建立角色。如需詳細資訊，請參閱[rdsadmin.create\$1role](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\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) 預存程序將角色指派給角色、使用者或群組。

**指派角色**

1. 連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您的資訊。

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

1. 將 Db2 設定為輸出內容。

   ```
   db2 set serveroutput on 
   ```

1. 指派角色。如需詳細資訊，請參閱[rdsadmin.grant\$1role](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\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role) 預存程序從角色、使用者或群組撤銷角色。

**撤銷角色**

1. 連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您的資訊。

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

1. 撤銷角色。如需詳細資訊，請參閱[rdsadmin.revoke\$1role](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\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role) 預存程序來捨棄角色。

**捨棄角色**

1. 連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您的資訊。

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

1. 捨棄角色。如需詳細資訊，請參閱[rdsadmin.drop\$1role](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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.dbadm_grant` 以授予使用者存取權。如需詳細資訊，請參閱[rdsadmin.dbadm\$1grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant)。

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

**範例使用案例**

下列程序會逐步引導您建立角色、將 `DBADM` 授權授予角色、將角色指派給使用者，以及將角色授予群組。

****

1. 使用 RDS for Db2 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 為名為 `TESTDB` 的資料庫建立名為 `PROD_ROLE` 的角色。如需詳細資訊，請參閱[rdsadmin.create\$1role](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\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role)。

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

1. (選用) 提供額外的授權或權限。下列範例會針對名為 `FUNDPROD` 的資料庫，將 `DBADM` 授權授予名為 `PROD_ROLE` 的角色。如需詳細資訊，請參閱[rdsadmin.dbadm\$1grant](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 資料庫執行個體的主使用者名稱和主密碼連線至 `TESTDB` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

   ```
   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 資料庫執行個體的主使用者名稱和主密碼連線至 `rdsadmin` 資料庫。在下列範例中，將 *master\$1username* 和 *master\$1password* 取代為您自己的資訊。

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

1. 呼叫 `rdsadmin.dbadm_revoke` 以撤銷使用者存取權。如需詳細資訊，請參閱[rdsadmin.dbadm\$1revoke](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-revoke)。

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