Amazon RDS for Db2 联合身份验证 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon RDS for Db2 联合身份验证

可以将 Amazon RDS for Db2 数据库用作联合数据库。在为 RDS for Db2 设置联合身份验证后,您将能够从 RDS for Db2 数据库访问和查询多个数据库中的数据。联合身份验证使您无需将数据迁移到 RDS for Db2 数据库或将数据整合到单个数据库中。

通过将 RDS for Db2 数据库用作联合数据库,您可以继续访问 RDS for Db2 的所有功能,并可以利用各项 Amazon Web Services 服务,同时将数据保存在不同的数据库中。可以设置用于连接相同类型的不同数据库的同构联合身份验证,也可以设置用于连接不同类型的不同数据库的异构联合身份验证。

首先将 RDS for Db2 中的 Db2 数据库连接到远程数据库。然后,可以针对所有连接的数据库运行查询。例如,可以运行 SQL JOIN 语句,来将 RDS for Db2 数据库中的表与 z/OS 上的 Db2 远程数据库中的表相联接。

同构联合身份验证

可以在 RDS for Db2 数据库和以下 Db2 系列产品之间设置同构联合身份验证:

  • Db2 for Linux、UNIX、Windows(LUW)

  • Db2 iSeries

  • Db2 for z/OS

RDS for Db2 同构联合身份验证不支持以下操作:

  • 运行 CATALOG 命令来在 RDS for Db2 主机数据库上设置节点目录和远程数据库

  • 在与 z/OS 上的 Db2 进行联合身份验证时设置工作负载平衡(WLB)

  • 配置 IBM 数据服务器驱动程序配置文件 (db2dsdriver.cfg)

RDS for Db2 同构联合身份验证具有以下要求:

步骤 1:创建 DRDA 包装器和联合服务器

对于同构联合身份验证,请创建 DRDA 包装器和联合服务器。与远程主机的连接使用 HOSTPORTDBNAME

根据远程 Db2 数据库的类型,选择以下方法之一:

  • Db2 for Linux、UNIX 和 Windows(LUX)数据库 – 运行以下 SQL 命令。在以下示例中,将 server_name 替换为要用于联合身份验证的服务器的名称。将 db2_version 替换为远程 Db2 数据库的版本。将 usernamepassword 替换为要连接到的远程 Db2 数据库的凭证。将 db_namedns_nameport 替换为要连接到的远程 Db2 数据库的相应值。

    create wrapper drda options(DB2_FENCED 'N'); create server server_name type DB2/LUW wrapper drda version 'db2_version' authorization "master_username" password "master_password" options (add DBNAME 'db_name',add HOST 'dns_name',add PORT 'port');

    示例

    create wrapper drda options(DB2_FENCED 'N'); create server SERVER1 type DB2/LUW wrapper drda version '11.5' authorization "sysuser" password "******" options (add DBNAME 'TESTDB2',add HOST 'ip-123-45-67-899.us-west-1.compute.internal',add PORT '25010');
  • Db2 iSeries – 运行以下 SQL 命令。在以下示例中,将 wrapper_namelibrary_name 替换为 DRDA 包装器和 wrapper library file 的名称。将 server_name 替换为要用于联合身份验证的服务器的名称。将 db2_version 替换为远程 Db2 数据库的版本。将 usernamepassword 替换为要连接到的远程 Db2 数据库的凭证。将 dns_nameportdb_name 替换为要连接到的远程 Db2 数据库的相应值。

    create wrapper wrapper_name library 'library name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "sername" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');

    示例

    create wrapper WRAPPER1 library 'libdb2drda.so' options(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
  • Db2 for z/OS – 运行以下 SQL 命令。在以下示例中,将 wrapper_namelibrary_name 替换为 DRDA 包装器和 wrapper library file 的名称。将 server_name 替换为要用于联合身份验证的服务器的名称。将 db2_version 替换为远程 Db2 数据库的版本。将 usernamepassword 替换为要连接到的远程 Db2 数据库的凭证。将 dns_nameportdb_name 替换为要连接到的远程 Db2 数据库的相应值。

    create wrapper wrapper_name library 'library_name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "username" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');

    示例

    create wrapper WRAPPER1 library 'libdb2drda.so' OPTIONS(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');

步骤 2:创建用户映射

通过运行以下 SQL 命令创建用户映射,来将联合服务器与数据来源服务器相关联。在以下示例中,将 server_name 替换为要对其执行操作的远程服务器的名称。这是您在步骤 1 中创建的服务器。将 usernamepassword 替换为该远程服务器的凭证。

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

有关更多信息,请参阅 IBM Db2 文档中的 User mappings

步骤 3:检查连接

通过检查连接,确认成功设置了联合身份验证。打开一个会话,通过使用 SET PASSTHRU 命令向远程数据来源发送原生 SQL 命令,然后在远程数据服务器上创建表。

  1. 打开和关闭会话来向数据来源提交 SQL。在以下示例中,将 server_name 替换为在步骤 1 中为联合身份验证创建的服务器的名称。

    set passthru server_name;
  2. 创建一个新表。在以下示例中,将 column_namedata_typevalue 替换为对应于表的项目。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    有关更多信息,请参阅 IBM Db2 文档中的 CREATE TABLE statement

  3. 创建索引,向表中插入行的值,然后重置连接。重置连接会断开连接,但会保留后端进程。在以下示例中,将 index_nametable_namecolumn_namecolumnx_value 替换为您的信息。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. 连接到远程 Db2 数据库,为远程服务器创建昵称,然后执行操作。访问完远程 Db2 数据库中的数据后,重置并终止连接。在以下示例中,将 database_name 替换为远程 Db2 数据库的名称。将 nickname 替换为名称。将 server_nametable_name 替换为远程服务器的名称和该服务器上您要对其执行操作的表。将 username 替换为远程服务器的信息。将 sql_command 替换为要在远程服务器上执行的操作。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;

示例

以下示例创建了一个直通会话,来支持在联合服务器 testdb10 上进行操作。

接下来,它创建包含三列且各列的数据类型不同的表 t1

然后,该示例对表 t1 中的三列创建索引 i1_t1。之后,它插入两行,其中包含这三列的值,然后断开连接。

最后,该示例连接到远程 Db2 数据库 testdb2,并在联合服务器 testdb10 中为表 t1 创建昵称。它使用用户名 TESTUSER 为该数据来源创建昵称。一条 SQL 命令输出表 t1 中的所有数据。该示例断开连接并结束会话。

set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;

异构联合身份验证

可以在 RDS for Db2 数据库与其他数据来源(例如 Oracle 和 Microsoft SQL Server)之间设置异构联合身份验证。有关 Db2 LUW 支持的数据来源的完整列表,请参阅 IBM 支持网站上的 Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5

RDS for Db2 异构联合身份验证不支持以下各项:

  • 其他数据来源的原生包装器

  • 其他数据来源的 JDBC 包装器

  • 与 Sybase、Informix 和 Teradata 数据来源的联合身份验证,因为这些数据来源要求在 RDS for Db2 上安装客户端软件

RDS for Db2 异构联合身份验证具有以下要求:

  • RDS for Db2 仅支持 ODBC 包装器方法。

  • 如果您创建了包装器的显式定义,则必须将选项 DB2_FENCED 设置为 'N'。有关 ODBC 的有效包装器选项列表,请参阅 IBM Db2 文档中的 ODBC options

  • 必须支持从 RDS for Db2 主机数据库到远程主机数据库的传入和传出流量。有关更多信息,请参阅 通过创建安全组提供对 VPC 中的数据库实例的访问

有关与 Oracle 的联合身份验证的信息,请参阅 IBM 支持网站上的 How to query Oracle by using Db2 Federation and the ODBC driver?

有关支持联合身份验证的数据来源的更多信息,请参阅 IBM 支持网站上的 Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5

步骤 1:创建 ODBC 包装器

通过运行以下命令创建包装器:

db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"

步骤 2:创建联合服务器

通过运行以下命令创建联合服务器。在以下示例中,将 server_name 替换为要用于联合身份验证的服务器的名称。将 wrapper_type 替换为相应的包装器。将 db_version 替换为远程数据库的版本。将 dns_nameportservice_name 替换为要连接到的远程数据库的相应值。

db2 "create server server_name type wrapper_type version db_version options (HOST 'dns_name', PORT 'port', SERVICE_NAME 'service_name')“

有关包装器类型的信息,请参阅 IBM 支持网站上的 Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5

示例

以下示例为远程 Oracle 数据库创建联合服务器。

db2 "create server server1 type oracle_odbc version 12.1 options (HOST 'test1.amazon.com', PORT '1521', SERVICE_NAME 'pdborcl.amazon.com')“

步骤 3:创建用户映射

通过运行以下 SQL 命令创建用户映射,来将联合服务器与数据来源服务器相关联。在以下示例中,将 server_name 替换为要对其执行操作的远程服务器的名称。这是您在步骤 2 中创建的服务器。将 usernamepassword 替换为该远程服务器的凭证。

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

有关更多信息,请参阅 IBM Db2 文档中的 User mappings

步骤 4:检查连接

通过检查连接,确认成功设置了联合身份验证。打开一个会话,通过使用 SET PASSTHRU 命令向远程数据来源发送原生 SQL 命令,然后在远程数据服务器上创建表。

  1. 打开和关闭会话来向数据来源提交 SQL。在以下示例中,将 server_name 替换为在步骤 2 中为联合身份验证创建的服务器的名称。

    set passthru server_name;
  2. 创建一个新表。在以下示例中,将 column_namedata_typevalue 替换为对应于表的项目。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    有关更多信息,请参阅 IBM Db2 文档中的 CREATE TABLE statement

  3. 创建索引,向表中插入行的值,然后重置连接。重置连接会断开连接,但会保留后端进程。在以下示例中,将 index_nametable_namecolumn_namecolumnx_value 替换为您的信息。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. 连接到远程 Db2 数据库,为远程服务器创建昵称,然后执行操作。访问完远程 Db2 数据库中的数据后,重置并终止连接。在以下示例中,将 database_name 替换为远程 Db2 数据库的名称。将 nickname 替换为名称。将 server_nametable_name 替换为远程服务器的名称和该服务器上您要对其执行操作的表。将 username 替换为远程服务器的信息。将 sql_command 替换为要在远程服务器上执行的操作。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;

示例

以下示例创建了一个直通会话,来支持在联合服务器 testdb10 上进行操作。

接下来,它创建包含三列且各列的数据类型不同的表 t1

然后,该示例对表 t1 中的三列创建索引 i1_t1。之后,它插入两行,其中包含这三列的值,然后断开连接。

最后,该示例连接到远程 Db2 数据库 testdb2,并在联合服务器 testdb10 中为表 t1 创建昵称。它使用用户名 TESTUSER 为该数据来源创建昵称。一条 SQL 命令输出表 t1 中的所有数据。该示例断开连接并结束会话。

set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;