

# 执行 Amazon RDS for Db2 数据库实例的常见系统任务
<a name="db2-performing-common-system-tasks-db-instances"></a>

您可以在运行 Db2 的 Amazon RDS 数据库实例上执行某些与系统相关的常见数据库管理员任务。为了提供托管服务体验，Amazon RDS 不允许通过 shell 访问数据库实例，而仅限访问某些需要高级权限的系统过程和表。

有关对于 RDS for Db2 授予和撤销权限以及连接到远程数据库的信息，请参阅以下主题。

**主题**
+ [授予和撤销对 RDS for Db2 的权限](db2-granting-revoking-privileges.md)
+ [连接到远程 RDS for Db2 数据库实例](db2-attaching-to-remote.md)

## 创建自定义数据库端点
<a name="db2-creating-custom-database-endpoint"></a>

迁移到 Amazon RDS for Db2 时，您可以使用自定义数据库端点 URL 来最大限度地减少对应用程序的更改。例如，如果您使用 `db2.example.com` 作为当前 DNS 记录，则可以将其添加到 Amazon Route 53。在 Route 53 中，您可以使用私有托管区将当前 DNS 数据库端点映射到 RDS for Db2 数据库端点。要为 Amazon RDS 数据库端点添加自定义 `A` 或 `CNAME` 记录，请参阅《Amazon Route 53 开发人员指南》**中的 [Registering and managing domains using Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html)。

**注意**  
如果您无法将域转到 Route 53，则可以使用 DNS 提供商为 RDS for Db2 数据库端点 URL 创建 `CNAME` 记录。请查阅您的 DNS 提供商文档。

# 授予和撤销对 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` 的数据库向名为 `PROD_ROLE` 的角色授予 `DBADM` 授权。有关更多信息，请参阅 [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')"
   ```

# 连接到远程 RDS for Db2 数据库实例
<a name="db2-attaching-to-remote"></a>

使用以下步骤连接到远程 RDS for Db2 数据库实例，并运行 `get snapshot` 操作。

**连接到远程 RDS for Db2 数据库实例**

1. 运行 IBM Db2 CLP 客户端会话。有关对 RDS for Db2 数据库实例和数据库进行编目的信息，请参阅[使用 IBM Db2 CLP 连接到 Amazon RDS for Db2 数据库实例](db2-connecting-with-clp-client.md)。记下您的 RDS for Db2 数据库实例的主用户名和主密码。

1. 连接到 RDS for Db2 数据库实例。在以下示例中，将 *node\$1name*、*master\$1username* 和 *master\$1password* 替换为您编目的 TCPIP 节点名称以及 RDS for Db2 数据库实例的主用户名和主密码。

   ```
   db2 attach to node_name user master_username using master_password
   ```

连接到远程 RDS for Db2 数据库实例后，您可以运行以下命令和其它 `get snapshot` 命令。有关更多信息，请参阅 IBM Db2 文档中的 [GET SNAPSHOT 命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-get-snapshot)。

```
db2 list applications
db2 get snapshot for all databases
db2 get snapshot for database manager
db2 get snapshot for all applications
```