Skip to content

DB2 - 数据库安全

本章全面介绍了如何保护现代 Db2 数据库的安全,涵盖了基本原则和当前最佳实践。

有效的数据库安全是一种多层策略,建立在‘CIA 三元组’(CIA Triad)之上:机密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。在 Db2 中,这通过强大的身份验证(authentication)、授权(authorization)、加密(encryption)和审计(auditing)框架来实现。

  • 机密性:防止未经授权的数据泄露。通过访问控制和加密实现。
  • 完整性:确保数据准确可靠。通过约束、事务控制和权限实现。
  • 可用性:确保授权用户在需要时可以访问数据库。通过适当的维护、高可用性设置和防范拒绝服务攻击来实现。

1. 身份验证(Authentication):验证用户身份

Section titled “1. 身份验证(Authentication):验证用户身份”

身份验证是授予用户访问权限前确认其身份的过程。现代 Db2 支持使用插件的灵活身份验证架构,允许与各种安全服务集成。

  • 操作系统(OS)身份验证:默认方法,Db2 信任操作系统已对用户进行身份验证。常见于本地、单域环境。
  • 轻量级目录访问协议(LDAP):通过与 Active Directory 或 OpenLDAP 等服务集成,集中管理用户身份。
  • Kerberos:提供强大的基于票据的身份验证,适用于安全的企业环境。
  • GSS-API 插件:一个通用框架,允许使用其他安全机制,包括自定义解决方案。

保护连接安全:传输中数据加密

Section titled “保护连接安全:传输中数据加密”

对客户端和 Db2 服务器之间传输的数据进行加密至关重要。这通过配置传输层安全(TLS/SSL)来实现。

要启用 TLS,您必须配置 SSL_SVR_KEYDB(密钥库路径)和 SSL_SVR_LABEL(证书标签)DBM CFG 参数,并设置 DB2COMM 注册表变量以包含 ‘SSL’。

-- 示例:为 TLS/SSL 配置 DBM CFG
UPDATE DBM CFG USING SSL_SVR_KEYDB /path/to/keystore.kdb
UPDATE DBM CFG USING SSL_SVR_STASH /path/to/keystore.sth
UPDATE DBM CFG USING SSL_SVR_LABEL my_cert_label
UPDATE DBM CFG USING SSL_SVCENAME <ssl_port_number>
-- 更新注册表变量以启用 TLS 通信
-- 保留 TCPIP 值以在需要时允许非 TLS 连接。
db2set DB2COMM=SSL,TCPIP
-- 重启实例以应用更改
db2stop
db2start

2. 授权(Authorization):管理权限

Section titled “2. 授权(Authorization):管理权限”

用户通过身份验证后,授权(Authorization)决定了他们被允许执行的操作。Db2 使用一套细粒度的权限和特权系统,最好通过基于角色的访问控制(RBAC)进行管理。

  1. 系统级权限:对 Db2 实例的广泛控制(例如,SYSADM、SYSCTRL)。
  2. 数据库级权限:对特定数据库的控制(例如,DBADM、SECADM、DATAACCESS)。
  3. 对象级特权:对表、视图、模式等特定权限(例如,SELECT、INSERT、EXECUTE)。
  • SYSADM(系统管理员):最高实例级权限。可以对实例及其所有数据库执行任何操作。使用时务必谨慎。
  • SECADM(安全管理员):管理数据库安全策略、角色和权限。将职责与 DBADM 分离的关键角色。
  • DBADM(数据库管理员):对特定数据库的对象和数据拥有完全控制,但除非也授予 SECADM,否则无法管理安全策略。
  • DATAACCESS:授权读取和写入数据库中所有用户表的数据。适用于 ETL 或服务账户。
  • ACCESSCTRL:授权在数据库内授予和撤销特权及权限。

最佳实践:基于角色的访问控制(RBAC)

Section titled “最佳实践:基于角色的访问控制(RBAC)”

最佳实践是,不要直接将特权授予用户,而是为特定的工作职能创建角色,将特权授予这些角色,然后再将角色授予用户或组。

-- 1. 为应用程序开发人员创建角色
CREATE ROLE APP_DEVELOPER;
-- 2. 授予角色必要的特权
-- 开发人员可以连接、创建表,并使用 'APP_SCHEMA'
GRANT CONNECT ON DATABASE TO ROLE APP_DEVELOPER;
GRANT CREATETAB ON DATABASE TO ROLE APP_DEVELOPER;
GRANT CREATEIN ON SCHEMA APP_SCHEMA TO ROLE APP_DEVELOPER;
GRANT USE OF TABLESPACE USERSPACE1 TO ROLE APP_DEVELOPER;
-- 3. 将角色授予用户组
GRANT ROLE APP_DEVELOPER TO GROUP DEVS;

Db2 原生加密(Native Encryption)透明地加密磁盘上的数据库文件、日志文件和备份。这可以在物理存储被入侵时保护数据。它是在数据库级别配置的。

-- 示例:创建加密数据库
CREATE DATABASE MY_SECURE_DB
ENCRYPT;

RCAC(以前称为 LBAC)提供了细粒度的安全控制,可根据定义的规则控制对特定行和列的访问。这对于多租户应用程序和法规遵从性(如 GDPR)至关重要。

-- 示例:行权限,确保经理只能查看其下属员工的数据
CREATE PERMISSION MGR_SEE_OWN_REPORTS ON EMPLOYEE
FOR ROWS WHERE VERIFY_GROUP_FOR_USER(SESSION_USER, 'MANAGERS') = 1
AND EMP_MANAGER_ID = SESSION_USER
ENFORCED FOR ALL ACCESS;
ALTER TABLE EMPLOYEE ACTIVATE ROW ACCESS CONTROL;

Db2 审计功能可跟踪谁在何时做了什么。它是安全监控、取证和合规性的关键工具。

-- 1. 配置审计以跟踪所有成功和失败的数据库连接
db2audit configure scope connect status both
-- 2. 启动审计策略
db2audit start
-- 3. 要查看审计日志,必须先归档然后提取它
db2audit archive
db2audit extract file my_audit_log.txt
  • 最小特权原则:始终授予用户或应用程序正常运行所需的最小权限集。
  • 职责分离:使用不同的角色,如 SECADM 和 DBADM,以防止任何单个用户拥有绝对权力。
  • 全面加密:对传输中数据使用 TLS,对静态数据使用原生加密。
  • 使用角色:通过 RBAC 管理权限,以实现可伸缩性和清晰性。
  • 定期审计:配置和审查审计日志,以监控可疑活动。
  • 安全凭据:应用程序凭据应存储在安全凭据管理系统(如 HashiCorp Vault 或 CyberArk)中,而不是配置文件中。