DB2 数据库身份验证基础
什么时候进行 DB2 身份验证
DB2 身份验证控制数据库安全计划的以下方面:
- 谁有权访问实例和/或数据库
- 在哪里以及如何检验用户的密码
在发出 attach 或 connect 命令时,它在底层操作系统安全特性的帮助下完成这个任务。attach 命令用来连接 DB2 实例,connect 命令用来连接 DB2 实例中的数据库。下面的示例展示了 DB2 对发出这些命令的用户进行身份验证的不同方式。这些示例在数据库管理程序配置文件中使用默认的身份验证类型 SERVER。下面的例 3 说明了如何使用 DB2 修改服务器操作系统上的密码。
用创建 DB2 实例时使用的用户 ID 登录到安装 DB2 的机器上。发出以下命令:
db2 attach to DB2
在这里,隐式地执行身份验证。使用登录机器的用户 ID,并假设这个 ID 已经经过了操作系统的检验。
db2 connect to sample user test1 using password
Database Connection Information
Database server = DB2/NT 9.1.0
SQL authorization ID = TEST1
Local database alias = SAMPLE
在这里,显式地执行身份验证。用户 test1 和密码 password 由操作系统进行检验。用户 test1 成功地连接到示例数据库。
db2 connect to sample user test1 using password new chgpass confirm chgpass
与例 2 中一样,用户 ID test1 和密码 password 由操作系统进行检验。然后,操作系统将 test1 的密码从 password 改为 chgpass。因此,如果再次发出例 2 中的命令,它就会失败。
DB2 身份验证类型
DB2 使用身份验证类型 决定在什么地方进行身份验证。例如,在客户机 - 服务器环境中,是客户机还是服务器检验用户的 ID 和密码?在客户机 - 网关 - 主机环境中,是客户机还是主机检验用户的 ID 和密码?
DB2 9 能够根据用户是试图连接数据库,还是执行实例连接和实例级操作,指定不同的身份验证机制。在默认情况下,实例对于所有实例级和连接级请求使用一种身份验证类型。这由数据库管理程序配置参数 AUTHENTICATION 来指定。V9.1 中引入了数据库管理程序配置参数 SRVCON_AUTH。这个参数专门处理对数据库的连接。例如,如果在 DBM CFG 中进行以下设置:
DB2 GET DBM CFG
Server Connection Authentication (SRVCON_AUTH) = KERBEROS
Database manager authentication (AUTHENTICATION) = SERVER_ENCRYPT
那么在连接实例时会使用 SERVER_ENCRYPT。但是在连接数据库时会使用 KERBEROS 身份验证。如果在服务器上没有正确地初始化 KERBEROS,但是提供了有效的用户 ID/密码,那么允许这个用户连接实例,但是不允许他连接数据库。
下表总结了可用的 DB2 身份验证类型。在客户机 - 网关 - 主机环境中,这些身份验证选项在客户机和网关上设置,而不是在主机上。本节将详细讨论如何设置这些选项。
类型 | 描述 |
SERVER | 身份验证在服务器上进行。 |
SERVER_ENCRYPT | 身份验证在服务器上进行。密码在客户机上进行加密,然后再发送到服务器。 |
CLIENT | 身份验证在客户机上进行。 |
*KERBEROS | 由 Kerberos 安全软件执行身份验证。 |
*KRB_SERVER_ENCRYPT | 如果客户机设置是 KERBEROS,那么由 Kerberos 安全软件执行身份验证。否则使用 SERVER_ENCRYPT。 |
DATA_ENCRYPT | 身份验证在服务器上进行。服务器接受加密的用户 ID 和密码,并对数据进行加密。这个选项的操作方式与 SERVER_ENCRYPT 相同,但是数据也要加密。 |
DATA_ENCRYPT_CMP | 身份验证方式与 DATA_ENCRYPT 相同,但是允许不支持 DATA_ENCRYPT 的老式客户机使用 SERVER_ENCRYPT 身份验证进行连接。在这种情况下,数据不进行加密。如果进行连接的客户机支持 DATA_ENCRYPT,就会进行数据加密,而不能降级到 SERVER_ENCRYPT 身份验证。这个身份验证类型只在服务器的数据库管理程序配置文件中是有效的,而且在客户机或网关实例上使用 CATALOG DATABASE 时是无效的。 |
GSSPLUGIN | 身份验证方式由一个外部 GSS-API 插件决定。 |
GSS_SERVER_ENCRYPT | 身份验证方式由一个外部 GSS-API 插件决定。在客户机不支持服务器的 GSS-API 插件之一的情况下,使用 SERVER_ENCRYPT 身份验证。 |
*这些设置只对 Windows 2000、AIX、Solaris 和 Linux® 操作系统有效。
在服务器上设置身份验证
在数据库服务器上,在数据库管理程序配置(DBM CFG)文件中使用 AUTHENTICATION 参数设置身份验证。请记住,DBM CFG 文件是一个实例级配置文件。因此,AUTHENTICATION 参数影响这个实例中的所有数据库。以下命令演示如何修改这个参数。
要查看配置文件中的身份验证参数: db2 get dbm cfg
要将身份验证参数修改为 server_encrypt: C:\PROGRA~1\SQLLIB\BIN> db2 update dbm cfg using authentication server_encrypt
C:\PROGRA~1\SQLLIB\BIN> db2stop
C:\PROGRA~1\SQLLIB\BIN> db2start
某些身份验证类型(比如 GSSPLUGIN、KERBEROS 和 CLIENT)要求设置其他数据库管理程序配置参数,比如 TRUST_ALLCLNTS、SRV_PLUGIN_MODE 和 SRVCON_PW_PLUGIN。
在网关上设置身份验证
使用 catalog database 命令在网关上设置身份验证。在这里的示例中,我们将使用名为 myhostdb 的主机数据库。
要将网关身份验证类型设置为 SERVER,应该在网关机器上发出以下命令:
db2 catalog database myhostdb at node nd1 authentication SERVER
db2 terminate
注意,身份验证不会在网关本身执行。在 DB2 Version 8 中,身份验证必须在客户机或主机数据库服务器上执行。