db2应用服务器查数据库,如何利用 DB2 限制数据库连接-数据仓库-火龙果软件工程...

摘要:

本文将通过一个实际示例展示如何利用 IBM DB2 for Linux, UNIX, and Windows

的可信上下文特性来保护数据库免受未经授权的访问,或者经授权的数据库用户的不当使用。

问题说明

安全管理员要求仅允许来自一组特定的 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。

2aca8c49d61bccbfbd29f413f7328db0.png

图 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 数据库

f41baa253b7ff60b3a03936dce705378.png

图 2. 从 9.26.120.64 hotel48

连接

5302ed33a2a44d3bd55d579909d4f6c1.png

图 3. 从 9.26.120.62 hotel46

连接

用户 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 不再拥有来自任何来源的 CONNEC

现在尝试再次连接。

81dd6e61d3d1b40a12e9c0dd436aca99.png

图 4. 从 9.26.120.64 hotel48

连接

30266478f9c9dd023fb7d78140b3d409.png

图 5. 从 9.26.120.62 hotel46

连接

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

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

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

创建角色:db2 create role connect_role

将 CONNECT 授权授予角色:db2 grant CONNECT on database to role

connect_role

创建可信上下文:

db2 create trusted context connect_tc

based upon connection using system authid

einstein attributes(address '9.26.120.62')

default role connect_role enable

6b324871f1b7c1f1727635dc5a23f6df.png

图 6. 创建角色,连接并创建可信上下文

第 5 步:测试

严重用户 Einstein 是否能够通过 IP 9.26.120.62

(hotel46) 连接,但不能通过 IP 9.26.120.64 (hotel48) 连接。

7ade84af49ba3b5a6377286f528dd841.png

图 7. 从 9.26.120.62 hotel46

连接

595fada81f8c49a3df63388928d3c1ca.png

图 8. 从 9.26.120.64 hotel48

连接

结束语

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

SYSADM、SYSCTRL、SYSMAINT、SYSMON、DBADM 和 SECADM。这些用户具有隐式的

CONNECT 授权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值