

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用可信上下文在 AWS 上的 Db2 联合身份验证数据库中保护和简化用户访问
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts"></a>

*Sai Parthasaradhi，Amazon Web Services*

## Summary
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-summary"></a>

许多公司正在将其传统的大型机工作负载迁移至 Amazon Web Services (AWS)。此次迁移包括在亚马逊弹性计算云（亚马逊）上将 z/OS 数据库的IBM Db2转移到适用于Linux、Unix和Windows的Db2（LUW）。 EC2在分阶段从本地迁移到 AWS 期间，用户可能需要访问 IBM Db2 z/OS 和 Amazon 上的 Db2 LUW 中的数据， EC2 直到所有应用程序和数据库完全迁移到 Db2 LUW。鉴于不同平台使用不同身份验证机制，故在该远程数据访问场景中进行用户身份验证可能具有挑战性。

此模式介绍如何在 Db2 上为 LUW 设置联合服务器，将 Db2 设置 z/OS 为远程数据库。该模式使用可信上下文将用户的身份从 Db2 LUW 传播到 Db2， z/OS 而无需在远程数据库上重新进行身份验证。有关可信上下文的更多信息，请参阅[其他信息](#secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional)部分。

## 先决条件和限制
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 在 Amazon EC2 实例上运行的 Db2 实例
+ 用于在本地运行的 z/OS 数据库的远程 Db2
+ 通过 AWS [ Site-to-SiteVPN](https://aws.amazon.com/vpn/) 或 AWS Di [rect Connect 连接到 AWS](https://aws.amazon.com/directconnect/) 的本地网络

## 架构
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-architecture"></a>

**目标架构**

![本地大型机通过本地 Db2 服务器和 VPN 连接到上的 Db2 数据库。 EC2](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/9e04f0fe-bae2-412a-93ac-83da50222017/images/0a384695-7907-4fb8-bb7e-d170dcc114af.png)


## 工具
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 可帮助您在您在 AWS 上启动的实例和您自己的远程网络之间传递流量。

**其他工具**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli) 是 Db2 交互式命令行界面（CLI） 命令。

## 操作说明
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-epics"></a>

### 在 AWS 上运行的 Db2 LUW 数据库上启用联合身份验证
<a name="enable-federation-on-the-db2-luw-database-running-on-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 DB2 LUW 数据库上启用联合。 | 要在 DB2 LUW 上启用联合，请运行以下命令。<pre>update dbm cfg using federated YES</pre> | 数据库管理员 | 
| 重新启动数据库。 | 若要重新启动数据库，请运行以下命令。<pre>db2stop force;<br />db2start;</pre> | 数据库管理员 | 

### 对远程数据库编目
<a name="catalog-the-remote-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 对远程 Db2 z/OS 子系统进行编目。 | 要对在 AWS 上运行的 Db2 LUW 上的远程 Db2 z/OS 数据库进行编目，请使用以下示例命令。<pre>catalog TCPIP NODE tcpnode REMOTE mainframehost SERVER mainframeport</pre> | 数据库管理员 | 
| 对远程数据库编目。 | 要对远程数据库进行编目，请使用以下示例命令。<pre>catalog db dbnam1 as ndbnam1 at node tcpnode</pre> | 数据库管理员 | 

### 创建远程服务器定义
<a name="create-the-remote-server-definition"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 收集远程 Db2 z/OS 数据库的用户凭证。 | 在继续执行后续步骤前，请收集以下信息：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.html) | 数据库管理员 | 
| 创建 DRDA 包装器。 | 若要创建 DRDA 角色，请运行以下命令。<pre>CREATE WRAPPER DRDA;</pre> | 数据库管理员 | 
| 创建服务器定义。 | 若要创建服务器定义，请运行以下示例命令。<pre>CREATE SERVER ndbserver<br />TYPE DB2/ZOS VERSION 12<br />WRAPPER DRDA<br />AUTHORIZATION "dbuser1" PASSWORD "dbpasswd" OPTIONS ( DBNAME 'ndbnam1',FED_PROXY_USER 'ZPROXY' );</pre><br />在此定义中，`FED_PROXY_USER`指定将用于建立与 Db2 z/OS 数据库的可信连接的代理用户。只有在 Db2 LUW 数据库中创建远程服务器对象时，才需要授权用户 ID 和密码。将来不用于运行时。 | 数据库管理员 | 

### 创建用户映射
<a name="create-user-mappings"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为代理用户创建用户映射。 | 若要创建代理用户的用户映射，请运行以下命令。<pre>CREATE USER MAPPING FOR ZPROXY SERVER ndbserver OPTIONS (REMOTE_AUTHID 'ZPROXY', REMOTE_PASSWORD 'zproxy');</pre> | 数据库管理员 | 
| 在 Db2 LUW 上为每个用户创建用户映射。 | 为 AWS 上 Db2 LUW 数据库中所有需要通过代理用户访问远程数据的用户创建用户映射。若要创建用户组映射，请运行以下命令。<pre>CREATE USER MAPPING FOR PERSON1 SERVER ndbserver OPTIONS (REMOTE_AUTHID 'USERZID', USE_TRUSTED_CONTEXT 'Y');</pre><br />该语句指定 Db2 LUW (`PERSON1`) 上的用户可以与远程 Db2 z/OS 数据库 () 建立可信连接。`USE_TRUSTED_CONTEXT 'Y'`通过代理用户建立连接后，用户可以使用 Db2 z/OS 用户 ID (`REMOTE_AUTHID 'USERZID'`) 访问数据。 | 数据库管理员 | 

### 创建可信上下文对象
<a name="create-the-trusted-context-object"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建可信上下文对象 | 要在远程 Db2 z/OS 数据库上创建可信上下文对象，请使用以下示例命令。<pre>CREATE TRUSTED CONTEXT CTX_LUW_ZOS<br />BASED UPON CONNECTION USING SYSTEM AUTHID ZPROXY<br />ATTRIBUTES (<br />ADDRESS '10.10.10.10'<br />)<br />NO DEFAULT ROLE<br />ENABLE<br />WITH USE FOR PUBLIC WITHOUT AUTHENTICATION;</pre><br />在此定义中，`CTX_LUW_ZOS` 是可信上下文对象的任意名称。该对象包含代理用户 ID 以及可信连接的必需服务器的 IP 地址。在此示例中，服务器为 AWS 上的 Db2 LUW 数据库。您可以使用域名，而不是 IP 地址。该子句 `WITH USE FOR PUBLIC WITHOUT AUTHENTICATION` 表示允许在可信连接上切换每个用户 ID。不需要提供密码。 | 数据库管理员 | 

## 相关资源
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-resources"></a>
+ [IBM 资源访问控制设施 (RACF)](https://www.ibm.com/products/resource-access-control-facility)
+ [IBM Db2 LUW 联合身份验证](https://www.ibm.com/docs/en/db2/11.5?topic=federation)
+ [可信上下文](https://www.ibm.com/docs/en/db2-for-zos/13?topic=contexts-trusted)

## 附加信息
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional"></a>

**Db2 可信上下文**

可信上下文是定义了联合服务器和远程数据库服务器的信任关系的 Db2 数据库对象。若要定义信任关系，则利用可信上下文指定信任属性。有三类可信属性：
+ 发出初始数据库连接请求的系统授权 ID
+ 建立连接的 IP 地址或域名
+ 数据库服务器和数据库客户端之间的数据通信加密设置

当连接请求的所有属性都与服务器上定义的任何可信上下文对象中指定的属性匹配时，就会建立可信连接。有两类可信连接：隐式连接与显式连接。建立隐式可信连接后，用户将继承在该可信连接定义范围之外无法使用的角色。建立显式可信连接后，无论是否进行身份验证，都可在同一个物理连接上切换用户。此外，可向 Db2 用户授予用于指定仅限可信连接使用的权限的角色。此模式使用了显式可信连接。

*此模式下的可信上下文*

模式完成后， PERSON1 在 Db2 上，LUW 使用联合的可信上下文访问 z/OS 来自 Db2 的远程数据。如果连接来自 PERSON1 可信上下文定义中指定的 IP 地址或域名，则通过代理用户建立连接。建立连接后，无需重新验证即可切换相应 PERSON1的 Db2 z/OS 用户 ID，用户可以根据为该用户设置的 Db2 权限访问数据或对象。

*联合可信上下文的优势*
+ 此方法坚持了最低权限原则，避免了通用用户 ID 或应用程序 ID 获取所有用户所需权限的超集。
+ 在联合身份验证数据库和远程数据库执行事务的用户的真实身份始终为已知并可予以审计。
+ 性能得到提高，因为用户之间可以重复使用物理连接，无需联合服务器重新进行身份验证。