您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
如何利用 DB2 限制数据库连接
 
火龙果软件    发布于 2014-07-17
   次浏览      
 

摘要: 本文将通过一个实际示例展示如何利用 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。

图 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 连接

图 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

现在尝试再次连接。

图 4. 从 9.26.120.64 hotel48 连接

图 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

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

第 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 授权的能力相结合,我们即可控制常规用户可从何处连接到数据库。请注意,这种解决方案并不适用于超级用户 SYSADM、SYSCTRL、SYSMAINT、SYSMON、DBADM 和 SECADM。这些用户具有隐式的 CONNECT 授权。

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...