利用 DB2 for Linux, UNIX, and Windows 中的可信上下文限制数据库连接

保护数据库访问的一种技术

安全管理员的职责之一就是保护数据库免受未经授权的访问,或者经授权的数据库用户的不当使用(例如,不恰当地访问数据库内的敏感信息)。缓解此类风险的常见要求之一就是确保仅允许来自已知安全的可信主机列表的用户连接到数据库。本文将通过一个实际示例展示如何利用 IBM® DB2® for Linux®, UNIX®, and Windows® 的可信上下文特性将此类需求付诸于实践。

Mihai Iacob, 软件开发人员, IBM

Mihai Iacob 在过去五年中一直是 IBM Toronto Lab 的 DB2 for Linux, UNIX, and Windows 安全性开发团队的一名软件开发人员。



Igal Ziskind, 软件开发人员, IBM

Igal Ziskind 在过去七年中一直是 IBM Toronto Lab 的一名软件开发人员。他隶属于 DB2 for Linux, UNIX, and Windows 安全性开发团队。在此之前,他是 DB2 正常运行开发团队的一员。



2012 年 4 月 19 日

免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

问题说明

安全管理员要求仅允许来自一组特定的 IP 地址的最终用户连接数据库。本文将展示如何利用数据库角色和可信上下文来解决这个问题。出于演示的目的,我们假设安全管理员希望保证用户 Einstein 仅能通过 IP 地址 9.26.120.62 连接到数据库。


数据库角色

角色 就是一种数据库对象,组织了可以分配给用户、分组、特殊分组 PUBLIC、其他角色或可信上下文的一种或多种特权。角色简化了特权的管理,允许安全管理员在一个角色中组织授权和特权,并将角色授予需要这些授权和特性才能完成其工作的用户。此外,由于角色位于 DB2 数据库系统内,因此并非与分组具有相同的约束。

可以在一个数据库内授予的所有 DB2 特权和授权均可授予一个角色。举例来说,可为一个角色授予对某个表的 CONNECT 授权和 SELECT 特权。

可信上下文

可信上下文 是一种数据库对象,定义了数据库与一个外部实体(例如应用服务器)之间的连接的一种信任关系。

这种信任关系基于以下一组属性:

  • 系统授权 ID:代表建立数据库连接的用户
  • IP 地址(或域名):代表建立了数据库连接的主机
  • 数据流加密:代表数据库服务器与数据库客户端之间的数据通信加密设置(如果有)

在用户建立数据库连接时,DB2 数据库系统将检查连接是否与数据库内的可信上下文对象的定义匹配。如果匹配,则将这样的数据库连接称为可信的

可信上下文提供了一种功能,让可信上下文的用户能够继承一个数据库角色。举例来说,一名安全管理员可以选择将薪资表的 SELECT 特权授予一个角色,并确保该角色仅通过可信上下文可用。这也就是说,如果用户在可信上下文的范围之外操作,那么就无法利用这个角色(当然也无法获得薪资表的 SELECT 特权)。

解决方案描述

在 DB2 9.7 FixPak 3 之前,在数据库连接时检查 CONNECT 授权时不会考虑通过可信上下文发生的角色继承。如今,DB2 9.7 FP3 已经消除了这样的限制。这项增强的一项直接应用就是能够限制最终用户能够通过何处连接到数据库。

示例

我们有一名常规用户 Einstein,我们希望仅允许他通过 IP 9.26.120.62 (hotel46) 连接到位于 9.26.120.64 (hotel48) 的 T1 数据库。

第 1 步:在 9.26.120.64 (hotel48) 创建 T1 数据库

 db2start db2 create database T1

验证数据库已创建: db2 list db directory

图 1. 系统数据库目录
表示数据库存在的系统数据库目录的图示

第 2 步:配置 TCPIP 通信协议

在服务器端 9.26.120.64 hotel48,运行以下命令:

清单 1. 配置通信协议以及 TCPIP 的配置
 db2set DB2COMM=TCPIP db2 update dbm cfg using SVCENAME xziskind db2stop  db2start

在客户端 9.26.120.62 hotel46,运行以下命令:

清单 2. 分类 TCPIP 节点和数据库
db2 catalog tcpip node NT1 remote hotel48 server xziskind
db2 terminate
db2 catalog database T1 at node NT1
db2 terminate

验证用户 Einstein 能否连接到 T1 数据库

图 2. 从 9.26.120.64 hotel48 连接
展示数据库别名 T1 的数据库连接信息的图示
图 3. 从 9.26.120.62 hotel46 连接
展示来自第二个 IP 地址的连接信息的图示

用户 Einstein 可以通过两个 IP 地址连接到 T1 数据库。

让我们来验证一下 Einstein 的授权。为此,我们要利用 AUTH_LIST_AUTHORITIES_FOR_AUTHID 表函数。这将返回可在数据库配置文件内找到的授权 ID 所拥有的全部授权,或者通过分组或角色直接或间接授予一个授权 ID 的全部授权。

清单 3. Einstein 拥有的授权
 db2 SELECT AUTHORITY, D_USER, D_GROUP, D_PUBLIC,
           ROLE_USER, ROLE_GROUP, ROLE_PUBLIC, D_ROLE 
   FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('EINSTEIN', 'U') ) AS T 
   ORDER BY AUTHORITY

AUTHORITY                 D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL                N      N       N        N         N          N           *     
BINDADD                   N      N       Y        N         N          N           *     
CONNECT                   N      N       Y        N         N          N           *     
CREATETAB                 N      N       Y        N         N          N           *     
CREATE_EXTERNAL_ROUTINE   N      N       N        N         N          N           *     
CREATE_NOT_FENCED_ROUTINE N      N       N        N         N          N           *     
DATAACCESS                N      N       N        N         N          N           *     
DBADM                     N      N       N        N         N          N           *     
EXPLAIN                   N      N       N        N         N          N           *     
IMPLICIT_SCHEMA           N      N       Y        N         N          N           *     
LOAD                      N      N       N        N         N          N           *     
QUIESCE_CONNECT           N      N       N        N         N          N           *     
SECADM                    N      N       N        N         N          N           *     
SQLADM                    N      N       N        N         N          N           *     
SYSADM                    *      N       *        *         *          *           *     
SYSCTRL                   *      N       *        *         *          *           *     
SYSMAINT                  *      N       *        *         *          *           *     
SYSMON                    *      N       *        *         *          *           *     
WLMADM                    N      N       N        N         N          N           *     

  19 record(s) selected.

用户 Einstein 通过特殊分组 PUBLIC 获得了 CONNECT 授权

第 3 步:撤销 PUBLIC 的 CONNECT 授权

db2 revoke connect on database from public

再次验证 Einstein 的授权:

清单 4. 在撤销了 PUBLIC 的 CONNECT 授权之后,Einstein 的授权
db2 SELECT AUTHORITY, D_USER, D_GROUP, D_PUBLIC,
       ROLE_USER, ROLE_GROUP, ROLE_PUBLIC, D_ROLE 
   FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('EINSTEIN', 'U') ) AS T 
   ORDER BY AUTHORITY

AUTHORITY                 D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL                N      N       N        N         N          N           *     
BINDADD                   N      N       Y        N         N          N           *     
CONNECT                   N      N       N        N         N          N           *     
CREATETAB                 N      N       Y        N         N          N           *     
CREATE_EXTERNAL_ROUTINE   N      N       N        N         N          N           *     
CREATE_NOT_FENCED_ROUTINE N      N       N        N         N          N           *     
DATAACCESS                N      N       N        N         N          N           *     
DBADM                     N      N       N        N         N          N           *     
EXPLAIN                   N      N       N        N         N          N           *     
IMPLICIT_SCHEMA           N      N       Y        N         N          N           *     
LOAD                      N      N       N        N         N          N           *     
QUIESCE_CONNECT           N      N       N        N         N          N           *     
SECADM                    N      N       N        N         N          N           *     
SQLADM                    N      N       N        N         N          N           *     
SYSADM                    *      N       *        *         *          *           *     
SYSCTRL                   *      N       *        *         *          *           *     
SYSMAINT                  *      N       *        *         *          *           *     
SYSMON                    *      N       *        *         *          *           *     
WLMADM                    N      N       N        N         N          N           *     

  19 record(s) selected.

用户 Einstein 不再拥有来自任何来源的 CONNECT 授权。

现在尝试再次连接。

图 4. 从 9.26.120.64 hotel48 连接
展示 EINSTEIN 不具备 connect 特权的图示
图 5. 从 9.26.120.62 hotel46 连接
展示 EINSTEIN 不具备 connect 特权的图示

用户 Einstein 通过任何 IP 地址都不再能够连接。

第 4 步:创建角色和可信上下文

作为拥有 SECADM 授权的用户运行以下命令:

  1. 创建角色:db2 create role connect_role
  2. 将 CONNECT 授权授予角色:db2 grant CONNECT on database to role connect_role
  3. 创建可信上下文:
     db2 create trusted context connect_tc 
        based upon connection using system authid
        einstein attributes(address '9.26.120.62') 
        default role connect_role enable
图 6. 创建角色,连接并创建可信上下文
展示 SQL 命令已成功完成创建的图示

第 5 步:测试

严重用户 Einstein 是否能够通过 IP 9.26.120.62 (hotel46) 连接,但不能通过 IP 9.26.120.64 (hotel48) 连接。

图 7. 从 9.26.120.62 hotel46 连接
展示成功连接的图示
图 8. 从 9.26.120.64 hotel48 连接
展示由于没有 connect 特权而无法成功连接的图示

结束语

将可信上下文、角色和 CONNECT 授权的能力相结合,我们即可控制常规用户可从何处连接到数据库。请注意,这种解决方案并不适用于超级用户 SYSADM、SYSCTRL、SYSMAINT、SYSMON、DBADM 和 SECADM。这些用户具有隐式的 CONNECT 授权。

参考资料

学习

获得产品和技术

  • 现在,您可以免费使用 DB2。下载 IBM 软件下载:IBM DB2 Express-C 9.5,这是 DB2 Express Edition 为社区提供的一个免费版本,提供了与 DB2 Express Edition 相同的核心数据功能,为构建和部署应用程序打造了坚实的基础。
  • 使用 IBM 产品评估试用版软件 构建您的下一个开发项目,可以直接从 developerWorks 下载这些软件。
  • 现在,您可以免费使用 DB2。下载 IBM 软件下载:IBM DB2 Express-C 9.5,这是 DB2 Express Edition 为社区提供的一个免费版本,提供了与 DB2 Express Edition 相同的核心数据功能,为构建和部署应用程序打造了坚实的基础。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=811008
ArticleTitle=利用 DB2 for Linux, UNIX, and Windows 中的可信上下文限制数据库连接
publish-date=04192012