开发一个应用程序时,开发人员常常很早就开始考虑安全性问题。例如,开发人员通常会用一个超级用户账户(DBADM 或 SYSADM)来开发和测试他们的应用程序,以免在运行代码时不断碰到安全错误消息。通过使用 Control Center,很容易为一个用户授予所有数据库许可和权限,如 图 1 所示。
图 1. 通过 Control Center 授予许可
通常,完成了应用程序的开发和测试阶段后,在开发过程中为解决安全错误消息而授予的许可仍然保留在那里,而实际上它们已经没有存在的必要了。
作为一项最佳实践,应仔细检查在安装和配置应用程序的过程中授予每个用户的特权。确保所有被授出的许可和特权都是确实有必要的。
对于不熟悉 DB2 安全模型的开发人员来说,他们往往因为贪图简单而通过 Control Center(见 图 1)为自己授予所有可用的特权,以避免安全错误消息。您应该确保所有被授出的许可和权限都是确实有必要的。
使用加密的 AUTHENTICATION 模式
身份验证是指使用一种安全机制对用户 ID 和密码进行验证的过程。用户和组的身份验证是在 DB2 外部的一个设施中,例如操作系统、域控制器或 Kerberos 安全系统中进行管理的。实际的身份验证位置由实例参数 AUTHENTICATION 的值来决定。有很多不同的身份验证模式,包括在 DB2 服务器上(使用服务器的安全设施)、在客户机上(允许 “单点” 访问)、在一个 Kerberos 安全设施上或者通过一个用户定义的 Generic Security Service(GSS)插件对用户进行身份验证。其他身份验证选项还包括当用户名和密码以及数据通过网络在客户机与服务器之间传输的时候,对它们进行加密。表 3 总结了各种加密的身份验证选项。
表 3. 加密的 AUTHENTICATION 模式总结
| AUTHENTICATION 模式 | 描述 |
|---|---|
| SERVER_ENCRYPT |
|
| KRB_SERVER_ENCRYPT |
|
| DATA_ENCRYPT |
|
| DATA_ENCRYPT_CMP |
|
| GSS_SERVER_ENCRYPT |
|
* 注意:从 DB2 9 开始,XQuery 是官方支持的查询语言。
作为一项最佳实践,应该使用加密的身份验证模式。
应该为您的环境选择什么样的身份验证模式,这是由数据的敏感级别来决定的。如果所有数据都是敏感的,那么应该选择 DATA_ENCRYPT 身份验证模式,这种身份验证模式会对客户机和服务器之间传输的很多数据进行加密。如果只有一小部分数据是敏感的,那么可以选择使用 SERVER_ENCRYPT 模式,这样可以保证密码得到加密,而敏感数据则可以通过不同的机制来得到保护。
要更新 AUTHENTICATION 实例参数的值(在这个例子中就是 DATA_ENCRYPT 的值),可以使用 清单 3 中显式的命令。
清单 3. 更新 AUTHENTICATION 实例参数
UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
db2stop
db2start
注意,AUTHENTICATION 参数是在实例级上设置的,这意味着在相同实例中创建的数据库将使用共同的身份验证模式。如果有两个数据库,每个数据库需要不同的身份验证模式,那么需要在不同的实例中创建这两个数据库。