没有合适的资源?快使用搜索试试~ 我知道了~
SDBatis: 基于MyBatis和CBAC的数据库应用访问控制.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 178 浏览量
2023-02-23
20:51:01
上传
评论
收藏 707KB DOCX 举报
温馨提示
试读
11页
SDBatis: 基于MyBatis和CBAC的数据库应用访问控制.docx
资源推荐
资源详情
资源评论
摘要
大部分应用都以数据库作为数据保存的工具,由于应用的日益复杂,现有的访问控制
机制存在安全性不高、开发繁琐,难以维护等问题。为此,本文提出一种新访问控制
系统 SDBatis。SDBatis 以 CBAC(Context-Based Access Control,基于上下文
的访问控制)作为访问控制模型,使用 MyBatis 插件开发,定义了 SDBatis 中的访
问控制策略。在保证访问控制功能模块独立的前提下,只需在持久层制定访问控制策
略、配置获取当前应用用户上下文属性就能够完成访问控制工作;SDBatis 支持基于
上下文的访问控制和对数据库的行级访问控制。本文实现了 SDBatis 的一个原型,并
对 SDBatis 进行了测试。测试结果表明,SDBatis 降低了访问控制开发的成本,能
适应动态变化的访问环境,保证数据库内数据的安全,且增加的访问控制时间在可接
受范围内。
关键词
访问控制; 数据库; MyBatis; CBAC(context-based access control)
0 引 言
目前的大部分应用都将应用用户的身份认证信息、权限信息以及敏感资料都存储在数
据库中。在这种情况下,要实现对应用的访问控制,一般可以使用的方法有两种:一
种是使用数据库本身的访问控制机制,另一种是在应用层实现访问控制。使用数据库
本 身 的 访 问 控 制 机 制 最 大 的 缺 陷 在 于 数 据 库 连 接 池 的 广 泛 使 用 使 得 DBMS
(database management system)无法确定当前应用用户。而在应用层实现控制
的方式分为硬编码和使用安全框架两种,硬编码的方式依赖开发人员的编码能力,难
以保证应用的安全性,使用安全框架可以提高安全性,但访问控制功能的开发与数据
库、业务代码、安全框架都有关联,因此仍然存在开发繁琐、维护困难等问题。
Eykholt 等
[ 1]
开发了 SafeD,使用幻影提取(phantom extraction)技术来强制执
行符合访问控制策略的 SQL 语句,避免了使用数据库视图,使得广泛存在的视图更新
问题得到解决。SafeD 通过扩展 JDBC 的方式实现,文献[1]在 Mysql 和 PostgreSQL
上进行了实验,SafeD 的效率和可用性良好。Mehta 等
[ 2]
开发了一个既不依赖应用
程序正确性,也不依赖特定的数据库支持的访问控制系统 Qpala。Qpala 在数据库适
配 器 中 实 现 。 SafeD 和 Qpala 都 是 基 于 传 统 的 RBAC ( role-based access
control,基于角色的访问控制)开发的,而 RBAC 无法满足日益复杂的应用场景需
求。并且 SafeD 和 Qpala 在数据库与应用层的中间层实现,如 JDBC 驱动。但不同
种类的数据库 JDBC 驱动不同,扩展 JDBC 时需要对每个 JDBC 驱动进行更改。
针对以上问题,本文提出了一种新的访问控制解决方案 SDBatis。SDBatis 以 CBAC
(context-based access control,基于上下文的访问控制)作为访问控制模型
[ 3,
4]
,同时解决了应用访问控制方式中开发繁琐、维护困难的问题。相对于以往的工作,
SDBatis 对复杂的应用场景和不同的数据库具有更强的适应性。
1 研究背景
1.1 数据库访问控制
应用的访问控制可以利用数据库自身的访问控制系统来实现,目前流行的数据库普遍
支持创建和管理数据库用户,MySQL8.0 和 Oracle 还支持定义数据库角色
[ 5]
,使用
这两个功能可以完成表、列、视图、存储过程级别的访问控制
[ 6]
。使用角色进行访问
控制的示例为:
GRANT SELECT(emp_id) ON employee TO manager
译
上述示例的含义是将查询 employee 表中 emp_id 列的权限赋予 manager。本文给
出的示例使用了一个虚拟的企业数据库,其中包括两张表,分别为职员表:employee
(emp_id, name, gender, dept),职 员工资 表:emp_salary(emp_id,
salary)。职员表包含职员的基本信息,职员工资表包含职员 id 和职员工资信息。
使 用 数 据 库 访 问 控 制 机 制 的 优 势 在 于 可 以 进 行 细 粒 度 的 访 问 控 制 ( fine grained
access control,FGAC),常见的方式为使用视图控制权限。如图 1 所示,CREATE
VIEW 语句表示创造一个包含职员名称和工资的视图;GRANT 语句表示如果将查询
该视图的权限赋予 manager 角色,则 manager 角色只能查询测试部门职员的名称
与工资信息。但是使用视图的方式会面临一个新问题:视图更新问题
[ 7, 8]
。一些数据
库 开 发 商 为 了 细 粒 度 访 问 控 制 开 发 了 自 己 的 系 统 , 如 Oracle 11g 中 实 现 的 VPD
(virtual private database,虚拟专用数据库)机制。VPD 可以支持细粒度的访问
控制
[ 9, 10]
,它通过当前数据库用户的“应用上下文”和 VPD 策略重写用户的 SQL 语
句,以强制执行行级或列级安全性要求
[ 11, 12]
。
图 1 使用视图控制权限
Fig.1 Use view control permissions
下载: 原图 | 高精图 | 低精图
以上的访问控制方式都需要以连接数据库的用户作为目标或条件,但目前普遍采用数
据库连接池来解决资源问题
[ 13, 14]
。在使用连接池的情况下,开发者会配置权限较大
的 数 据 库 用 户 来 连 接 数 据 库 , 一 个 数 据 库 用 户 会 对 应 多 个 应 用 用 户 。 比 如 在
Piwigo11.5.0 的 test_piwigo.php 中
[ 15]
,root 用户被配置为数据库连接用户,在
应用运行时,root 用户对应的是所有的应用用户。在这种情况下,DBMS 就没有办法
确定当前的应用用户,因此单纯使用数据库本身的访问控制机制来实现应用的访问控
制难以实现。
SDBatis 基于 MyBatis 实现,不依靠数据库访问控制机制,避免了连接池带来的问题,
同时其具有对数据库进行较细粒度的行级访问控制的能力。
1.2 应用层访问控制
在应用层实现访问控制的方式分为两种:一种是开发人员自己在代码中嵌入判断语句;
另一种是使用安全框架。在 Piwigo 中,开发人员采用的是嵌入判断语句的方式。如
图 2 所示,在 Piwigo 11.5.0 的 group_perm.php 文件中,falsify 代表改动状态,
cat_true 代表当前类别的选中状态,开发人员对请求中这两个参数进行判断,符合条
件才定义 SQL 语句并执行。嵌入代码的方式对开发人员有较高的安全技术要求,并且
在访问控制策略较为复杂时,访问控制相关的代码开发会非常繁琐且难以维护。另外,
安全性上,开发过程中出现漏洞几乎是不可避免的。
图 2 Piwigo 访问控制代码示例
Fig.2 Piwigo access control code example
下载: 原图 | 高精图 | 低精图
安全框架的典型是 Apache Shiro
[ 16]
。安全框架根据会话中用户的身份信息和设定的
访问控制策略来判断当前请求是否符合访问控制策略。若不符合,会拦截资源请求。
我们在 RuoYi 4.6.1 的 user.html 文件中找到了一个使用 Shiro 进行按钮访问控制
的 示 例
[ 17 ]
。 应 用 用 户 向 服 务 端 请 求 显 示 按 钮 时 , 由 于 此 按 钮 配 置 了 shiro :
hasPermission="system:user:add"语句,Shiro 将会拦截该请求并在 Realm
类中寻找权限信息。如图 3 所示,该函数在会话管理器中读取当前会话中的应用用户,
根据用户 id 通过持久层框架 MyBatis 在数据库中查找角色和权限信息
[ 18 ]
,然后将
其 添 加 在 info 中 并 返 回 给 授 权 器 。 授 权 器 将 当 前 用 户 的 权 限 信 息 与 按 钮 需 要 的
"system:user:add"权限进行比较以决定按钮是否显示。
剩余10页未读,继续阅读
资源评论
罗伯特之技术屋
- 粉丝: 3957
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功