数据访问保护(共9篇)
数据访问保护 篇1
0 引言
随着网络和信息技术的快速发展及广泛应用, 基于网络的商务、政务和社交等活动逐渐成为一种主流应用模式。人们随时随地进行的网上虚拟活动, 在带来便利的同时也增加了敏感数据泄露的隐患。据联邦贸易委员会2000年5月的一次调查结果显示: 超过97%的Web站点收集了至少一种辨别用户身份的信息, 如姓名、电话或者电子信箱等[1], 然而数据采集者在没有经过用户许可或者没有告知用户使用数据意图的情况下而滥用数据, 在很大程度上对用户的切身利益造成了损害, 因而许多用户对自身隐私数据在网上的泄露产生了恐惧, 导致其不愿意在网上进行交易或者其他活动, 许多商家因此也损失了大量的潜在利润, 为此用户隐私数据的保护已经成为商家和用户所共同关注和期待解决的问题。
针对隐私保护和数据安全问题, 许多学者进行了相关研究。W3C的隐私偏好平台 ( W3C's Platform for Privacy Preferences, P3P) 旨在为网上冲浪的用户提供隐私保护, 服务提供者形式化地给出隐私保护策略, 以便用户获得隐私信息的控制权[2]。IBM公司推出的企 业隐私授 权语言 ( Enterprise Privacy Authorization Language, EPAL) 是用来描述企业隐私策略的形式化语言, 策略定义了数据类型、用户类型和目的的继承关系以及操作集、权限集和条件集等, 但是EPAL并没有对数据项进行单独的限制, 访问控制粒度不 够细[3]。可扩展访 问控制标 记语言 ( Extensible Access Control Markup Language, XACML) 是一种基于XML的开放标准语言, 用于描述安全策略以及对网络服务、数字版权管理 ( DRM) 和企业安全应用信息进行访问的权限[4]。
通过对用户隐私保护需求及已有研究分析可知, 要更好地解决用户敏感数据的泄漏问题, 需考虑以下几个问题: ①用户与商家对隐私数据安全考虑的侧重点不同, 用户关注的是数据的使用是否侵犯了个人隐私, 而商家则从数据的有效使用角度去考虑数据安全问题; ②对隐私保护的偏好因人而异, 例如商家为了提供更好的服务, 查看用户的购物历史或者浏览习惯, 对有些消费者来说是可以接受的, 但对有些消费者来说是侵犯了他们的隐私; ③用户没有参与到个性化隐私策略的定义中, 也就是说数据被用于何目的是在用户不知情或者没有许可的情况下发生的。
在众多的隐私保护方法[5,6]中, 访问控制被认为是最有效的方法之一。访问控制是限制已授权用户、程序、进程或其他系统等访问本系统资源的过程[7]。但传统的访问控制关注的是哪些用户对何种资源进行何种操作, 完全忽略了数据被用于何种目的, 并且也忽视了隐私数据使用时需取得用户的同意[8]。因此, 隐私保护访问控制模型的设计必须满足用户的安全需求和用户指定的数据使用目的。
基于角色的访问控制 ( Role-based Access Con- trol, RBAC) 模型[9,10]是目前比较流行的访问控制技术, 它通过引入角色的概念实现了用户和权限的逻辑分离, 权限被授予角色, 用户通过系统管理员为其分配的角色获得相应的权限, 大大简化了企业内部安全策略的管理。在RBAC模型的基础上提出了面向数据提供者的隐私保护访问控制 ( Provider-oriented Ac- cess Control Model for Privacy Protection, POAC) 模型, 较好地解决了用户隐私数据泄漏和滥用问题。在POAC模型中, 不仅系统管理员对数据资源进行访问授权, 而且数据提供者也参与了数据访问权限的授予, 即由数据提供者根据自身的隐私偏好决定敏感数据的访问与否以及数据的使用目的。
1 POAC 模型
1. 1 目的概念
POAC模型不仅要解决什么人对什么数据进行了什么操作的问题, 还要解决用户是出于什么目的使用了数据的问题, 因此需在POAC模型中引入目的 ( Purpose) 概念。
定义1: 目的[11]描述的是用户隐私数据被采集和使用的原因, 目的集合用Purpose来表示, 所有目的以树型结构组织和管理, 称为目的树 ( Purpose Tree, PT) , 在PT中每个节点代表一个目的, 用pu i 表示, 每条边代表了其所连接的2个目的之间的继承关系。例如pu 1 和pu 2 是PT中的任意2个目的节点, 如果pu 2 是pu 1 的子节点, 就说pu 1 继承pu 2 , pu 2 是pu 1 的特例, 抽象地表示为pu 1 ↓pu 2 。图1中的PT是某目的树根节点, 货物配送目的继承快递目的, 可以表示为Pu ( 货物配送) ↓Pu ( 快递) , 快递目的是货物配送目的的特例。根据目的来源的不同, 目的可分为访问目的 ( Access Purpose, AP) 和意向目的 ( Intended Purpose, IP) 。
定义2: 访问目的是发起访问请求时所声明的目的, 描述了当前对某个数据特定操作的原因或意图, 用ap表示; 由全部访问目的组成的访问目的集用AP表示, 则AP = { ap 1 , ap 2 , …, ap n } 。
定义3: 意向目的是数据提供者在提供数据的同时指定当前数据允许访问的原因或意图, 用ip表示; 由全部意向目的组成的意向目的集用IP表示, 则IP = { ip 1 , ip 2 , …, ip n } 。
从访问目的和意向目的的定义可以看出, 访问目的是在发出某一次具体的访问请求时出现, 而意向目的则是在数据提交给系统时出现。
1. 2 POAC 模型描述
POAC模型的基本结构如图2所示。在POAC模型中, 数据提供者对自己隐私数据的使用意图具有管理资格, 每个数据提供者根据自己对隐私的偏好来定义个性化的访问控制策略。
定义4: POAC模型的基本元素
用户集: Users = { u 1 , u 2 , …, u n } , 系统内所有活动者的集合。
角色集: Roles = { r 1 , r 2 , …, r n } , 系统内所有角色的集合, 每个角色为一定数量权限的集合。
操作集: Ops = { op 1 , op 2 , …, op n } , 所有对数据资源操作的集合。
对象集: Obs = { ob 1 , ob 2 , …, ob n } , 系统内所有资源的集合。
权限集: Prms = 2 ( OPS×OBS×AP ) , 所有访问权限的集合。
会话集: Sessions = { s 1 , s 2 , …, s n } , 用户创建的会话集合。
目的集: Purpose = { pu 1 , pu 2 , …, pu n } , 数据被使用和采集原因的集合。
访问目的集: AP = { < ob, op, ap > | ob∈Obs, op∈Ops, ap∈AP} , 访问目的的集合。
意向目的集: IP = { < ob, ip > | ob∈Obs, ap∈AP} , 预先指定的意向目的的集合。
表示从用户集合到角色集合的多对多映射, 即用户被赋予的角色。
表示从权限集合到角色集合的多对多映射, 即角色被赋予的权限。
是一个从角色集合到访问目的集合的多对多映射, 即角色被赋予的访问目的, 表示角色以特定的访问目的在数据对象上执行的动作。
是一个从权限集合到意向目的集合的多对多映射, 表示权限仅能以特定意向目的访问。
1. 3 授权策略及授权规则
为了实施个性化的细粒度隐私保护访问控制, 在POAC模型中, 访问控制策略由系统管理员和用户共同定义, 分为通用策略和个性化策略。系统管理员负责用户角色的赋予与撤销及访问目的的绑定, 数据提供者关心的重点是个人敏感数据用于何目的, 因此主要任务是根据个人的隐私偏好指定数据的意向目的。
定义5: 通用策略 ( Common Policy) 是系统管理员根据自身组织机构和职责分配的特点来定义的访问控制策略, 其主要任务是设定角色与职责相关的访问目的或访问目的集的绑定, 决定角色以哪些目的来使用哪些权限。通过通用策略的定义, 通过身份认证的用户 ( Users) 就可以获取该角色相应的权限, 并以合理的目的访问被分配的资源。
通用策略是一个4元组, 内容包括角色、操作、数据资源和访问目的, 形式化地定义为:
Common. Policy: < r, op, ob, ap > , 其中r∈Roles, 表示访问请求者拥有的角色; op∈Ops, 表示操作, 如读和写等; ob∈Obs, 表示数据资源; ap∈AP, 表示访问数据资源的目的。
例如, 系统管理员定义了一条通用策略: 只允许财务经理在统计财务报表时查看消费者的银行账号信息, 那么该策略可形式化地表示为:
Common. Policy: < account _ manager, read, ac- count, financial-sheet > 。
定义6: 个性化策略 ( Personalized Policy) 是数据提供者在提交数据时, 根据自身隐私偏好定义的访问权限的规则的集合, 其目的是防止对数据的非授权访问和隐私泄露。
个性化策略是一个3元组, 内容包括数据、操作以及意向目的, 形式化地表示为:
Provider. Policy: < Provider. Data, op, ip > , 其中Provider. Data表示数据提供者的敏感数据; op∈Ops, 表示操作; ip∈IP, 表示由数据提供者对其敏感数据指定的意向目的。
例如, Jack在注册登录某电子商务网站时定义了一条策略, 他的单位信息仅能用于开发票而不能用于其他目的 ( 如售后服务) , 那么该策略可形式化地表示为:
Jack. Policy: < Jack. company-name, Read, billing > 。
在POAC模型中, 通过身份认证的用户以系统指派的角色在发起访问请求时须声明其访问目的, 仅当访问目的与意向目的一致时, 才允许用户访问该数据资源, 有效地阻止了隐私数据的泄漏, 实现了细粒度的访问控制。
从POAC模型的授权规则可以看出, 隐私数据访问成功与否最终由数据提供者设定的意向目的来判定。所以POAC模型实现了更为细粒度的访问控制, 更好地保护了数据提供者的个人敏感数据泄漏问题。
2 POAC 应用举例
POAC模型在网上购物系统中对数据提供者隐私数据访问控制的具体应用系统架构如图3所示。
网上购物时, 首先都要提交有关个人数据信息进行免费注册, 这些信息涉及个人敏感信息泄露的隐患, 所以对个人敏感信息的细粒度访问控制授权至关重要。将POAC模型应用于网上购物系统中, 实现不同用户角色的判定和访问权限的正确授予。通用安全策略管理模块负责通用安全策略的管理, 主要功能是完成用户—角色指派、角色—权限指派以及为隐私数据绑定访问目的; 个人隐私策略管理模块负责数据提供者个性化隐私策略的管理, 主要功能是数据提供者根据个人的隐私偏好为隐私数据绑定意向目的; 隐私数据访问授权模块负责隐私数据的访问授权的判决, 主要功能是依据通用授权规则和个性化授权规则最终确定隐私数据的访问控制结果。
访问者在发起访问请求时, 必须声明其访问目的 ( AP) , 访问授权模块根据通用授权规则和个性化授权规则共同判决隐私数据的访问授权, 只有当访问者的AP和通用授权规则及个性化授权规则共同所指派的意向目的 ( IP) 检测一致的情况下, 该请求才会被允许。在通用授权规则和个性化授权规则发生冲突时, 以否定优先 ( Deny Override) 规则[12]确保访问者隐私数据的安全。
下面结合实例说明POAC访问控制过程。假定公司财务部会计已经通过网络购物信息系统的身份认证, 并提出访问请求Request ( “Record01”, “开发票”) , 且Record01属于顾客的售后服务联系信息, 其IP集合是“技术服务, 产品维修”, 且为隐私信息。
①通过Request ( “Record01”, “开发票”) 可知, 该请求以访问目的“开发票”来访问Record01;
②根据用户属性信息和通用安全策略可以为用户分配会计员角色;
③根据通用安全策略和PT中目的的“继承”性, 角色“会计员”拥有“开发票”的访问目的, 目的一致性检测通过;
④查找与该角色绑定的权限是否拥有所申请数据的操作权限, 若没有则请求被拒绝, 否则进行被请求数据的IP与AP的一致性检测;
⑤Record01意向目的集合是“技术服务, 产品维修”, 访问目的“开发票”不属于Record01的意向目的集合, 依据否定优先规则, 该会计此次的访问请求被拒绝。
3 结束语
网络环境下用户隐私被泄露的机会大大增加, 在RABC模型的基础上提出了面向数据提供者的隐私保护访问控制模型POAC, 通过数据提供者参与到自身敏感数据访问控制规则的定义中, 将数据访问目的作为隐私保护访问控制的重要因素之一, 有效地解决了网络环境下数据提供者敏感数据被动泄露的细粒度访问控制问题。
参考文献
[1]ASHLEY P, CALVIN S, SCHUNTER M.Privacy Promises, Access Control, and Privacy Management Enforcing Privacy throughout an Enterprise by Extending Access Control[C]∥Proceedings of 3th International Symposium on Electronic Commerce.Research Triangle Park, NC, USA:IEEE Computer Association, 2002:13-21.
[2]REAY I K, BEATTY P, DICK S, et al.A Survey and Analysis of the P3P Protocol's Agents, Adoption, Maintenance and Future[J].IEEE Trans Dependable and Secure Computing, 2007, 4 (2) :151-164.
[3]王国霞, 王丽君, 刘贺平.个性化推荐系统隐私保护策略研究进展[J].计算机应用研究, 2012, 29 (6) :2 001-2 008.
[4]韩道军, 高洁, 翟浩良, 等.访问控制模型研究进展[J].计算机科学, 2010, 37 (11) :29-33.
[5]ALLEN A L.Allen's Privacy Law and Society[M].Eagan:Thomson West Publishers, 2007:50-55.
[6]WILLIAMS M D.Privacy Management, the Law and Global Business Strategies:a Case for Privacy Driven Design[C]∥Proceedings of 2009 International Conference on Computational Science and Engineering, AI Magazine CSE 2009.Vancouver:IEEE Computer Society Press, 2009:60-67.
[7]HUNG P C K.Towards a Privacy Access Control Model for e-Healthcare Services[C]∥Third Annual Conference on Privacy, Security and Trust, New Brunswick, 2005:12-14.
[8]KABIRM E, WANG H, BERTINO E.A Role-involved Purpose-based Access Control Model[J].Information Systems Frontiers, 2012 (14) :809-822.
[9]FERRAIOLOD F, SANDHU R, GAVRILA S, et al.Proposed NIST Standard for Role-Based Access Control[J].ACM Transactions on Information and System Security, 2001, 4 (3) :224-274.
[10]马立林, 李红.基于RBAC的SaaS系统的权限模型[J].计算机应用与软件, 2010, 27 (4) :42-44
[11]BYUNJ W, BERTINO E, LI N.Purpose Based Access Control for Privacy Protection in Relational Database Systems[J].VLDB J., 2008, 17 (4) :603-619.
[12]盖新貌, 沈昌祥, 刘毅, 等.基于属性访问控制的CSP模型[J].小型微型计算机系统, 2011, 32 (11) :2 217-2 222.
数据访问保护 篇2
一. 安装DBI模块
步骤1:
从TOOLS栏目中下载DBI.zip,下载完后用winzip解开到一个temp目录,共有三个文件:
Readme
DBI.ppd
DBI.tar.gz
步骤2:
在DOS窗口下,temp目录中运行下面的DOS命令:
ppm install DBI.ppd
如果提示无效命令,可在perl/bin目录下运行
二. 安装DBD-Mysql模块
从软件下载中下载DBD-Mysql.zip,安装方法同一.
三. 准备数据库
启动mysql,首先创建一个数据库mydata,然后创建一个表address
mysql>create database mydata;
Query OK, 1 row affected (0.00 sec)
mysql>use mydata;
Database changed
mysql>create table address (
->id int(5) not null,
->name varchar(40) not null,
->email varchar(50) not null,
->telephone int(12) null);
Query OK, 0 rows affected (0.05 sec)
输入些数据:
mysql>insert into address values (
->1,’Nighthawk’,’nighthawk@163.net’,92384092);
Query OK, 1 row affected (0.00 sec)
四. 下面用perl程序来插入若干记录并做查询.
use DBI;
#连接数据库mydata
my $dbh = DBI->connect(’DBI:mysql:mydata’) or die “无法连接数据库: ” . DBI->errstr;
print “插入若干记录n”;
my $sth = $dbh->prepare(q{
INSERT INTO address (id, name,email,telephone) VALUES (?, ?, ?, ?)
}) });
print “输入记录,回车结束:”;
while ($inputdata =) {
chop $inputdata;
last unless($inputdata);
my ($id, $name,$email, $tel) = split( /,/, $inputdata);
$sth->execute($id, $name, $email,$tel)
}
# $dbh->commit;
print “下面根据输入的名字打印出EMAIL地址和电话n”;
my $sth = $dbh->prepare(’SELECT * FROM address WHERE name=?’)
or die $dbh->errstr;
print “请输入姓名,回车结束:”;
while ($inputname =) {
my @data;
chomp $inputname;
last unless($inputname);
$sth->execute($inputname) or die “错误: ” . $sth->errstr;
while (@data = $sth->fetchrow_array) {
print “Email:$data[2]t Telephone:$data[3]n”;
}
}
#断开连接
$dbh->disconnect;
试对数据库访问技术进行研究 篇3
关键词:数据库访问技术;ADO.NET;安全性
中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2011) 15-0000-01
Database Access Technology Research
Li Bin
(Guangdong Gaoyao People's Hospital,Zhaoqing526040,China)
Abstract:At present,along with the WWW growing,database access technology has gradually become the focus of the IT technical staff,understand and master the technology of database access,help to better the technology application.This article first elaborated the database access technology development,and based on the ADO.NET data access techniques are studied, for reference only.
Keywords:Database access technology;ADO.NET;Safety
一、数据库访问技术的发展
Web进入编程时代以前,在大部分IT人员眼里,数据访问仅仅是一个相对而言的问题,即需要使用到的所有数据都是自己事先准备好的。大多人关心的问题是如何选择性能好、价格低的数据库服务器,并且系统中涉及的全部模块必须和服务器兼容,其中客户机和服务器的应用是这种两层模型较为典型的范例。
在很短的时间内,三层系统模型发展成了Windows DNA,即Microsoft.NET服务器系统。该系统主要是利用统一的模型进行数据访问,其注重的是内容,而不是存储媒介及数据格式,具体的表达方式完全是建立在UDA的基础上的。为了提供一种通过VB方便访问OLE DB功能的途径,Microsoft设计了ADO。
ADO提供了对脱机记录集、服务器端游标和XML的支持,不仅增强了访问功能,同时还提高了访问效率。为了便于在Web环境下进行数据传输,Microsoft对ADO进行了优化。但是随着人们对可伸缩性以及协同工作能力要求的不断提高,ADO已经渐渐无法满足这一要求,ADO.NET随之出现。
二、ADO.NET数据访问技术
.NET框架是由微软公司推出的一个应用平台,在该平台中ADO.NET是Windows Forms和ASP.NET应用访问数据的标准服务,通过ADO.NET能够访问由.NET提供的不同类型的数据源。ADO.NET可以有效地从数据操作中把数据访问分解成若干个單独使用的组件。ADO.NET可以直接处理检索到的结果,或是将结果放入DataSet对象,并以特殊的方式向用户公开。
(一)ADO.NET的特点。ADO.NET是采用高度分布、松散的应用程序进行设计的,这类程序通常使用HTTP在逻辑程序连接中通信,XML便成为在该连接中交流数据的最佳选择,这是因为文本XML格式较为适合HTTP,当全部连接都处于同一网络时,XML通信提供了最大的灵活性。ADO.NET数据访问具有以下特点:1.不依赖于连续的活动连接。由于被打开的数据库连接会占用一定的系统资源,在正常情况下,数据库仅能维持少量的并发连接,并且维持这些连接会使应用程序的总体性能有所降低。而使用ADO.NET进行数据访问则是以较有节制使用连接的结构作为中心设计出来的,从而使应用程序连接到数据库的时间足以更新和获取数据。在这样的情况下,数据库未被大部分的时间空闲连接所占用,因此,能够为大量的用户提供服务。2.数据能够被缓存到数据集中。较为常见的数据任务是从数据库检索数据随后在对数据进行某些操作,例如显示及处理数据,或是将数据发给别的组件。但很多情况下,应用程序若是在每处理一条记录就返回一次数据库,显然是不切实际的,所以最佳的解决方法就是将从数据库中检索到的记录进行临时存储,然后再对该临时集进行使用,这就是数据集的概念。数据集其实是数据源检索到得记录的缓存,其工作方式好比虚拟的数据存储区。数据集里面的数据一般是数据库中内容的精简版本,可以采用和操作数据类似的方式对数据集进行操作,操作时数据集能够保持与数据库的不连接状态,从而使数据库可以自由执行其他任务。使用数据集最便利的地方在于组件能够按照需要交换数据集。因此,组件不必分别查询数据库。3.数据集独立于数据源。虽然数据集是从数据库中获取数据的缓存,但是两者之间却并没有任何实际啥关系。可以将数据集看作是一个容器,填充这个容器的主要内容是从数据适配器执行的SQL命令或存储过程。由于数据集并没有直接绑定在数据源上。因此,数据集则是来自于多个源的数据的集成点。
(二)ADO.NET数据访问技术的安全性研究。1.安全的ADO.NET连接。为了确保应用程序的安全,首要目标就是保护对数据源的访问,而要想保护对数据源的访问,就必须保持用户的密码、标识以及数据源名称等连接信息的私密性。应避免用纯文本的形式存储用户的密码和标识。因为这样做会造成严重的安全漏洞。用户的密码和标识属于源代码的一部分,如果源代码的安全受到威胁,那么用户的密码和标识则很容易遭受攻击,即便向外部源提供的代码是编译后的版本,也很有可能会被反汇编,从而导致用户的密码和标识被公开,所以说用户的密码和标识绝对不能用纯文本的形式存在于代码中。因此,在连接到Microsoft SQL Server时,可以使用集成安全性,这是因为集成安全性使用的是当前活动活动的标识,而不是传递用户的密码和标识。2.安全的ADO.NET编码。确保应用程序的安全还包括编写安全的代码,而代码则必须只公开客户端代码所需的信息和功能。通常在ADO.NET中最常见的攻击是SQL Insertion攻击,攻击者主要是通过在数据源位置插入其他的SQL语句来达到攻击的目的,这些命令不但能够破坏会修改数据源位置的信息,而且还可以检索用户的私人信息。为了防止SQL Insertion攻击,必须对来自外部源的输入进行验证,并传递列值作为参数,而不是串联这些值来创建SQL语句。
三、结论
总而言之,ADO.NET数据库访问技术具有不依赖于连续的活动连接、数据能够被缓存到数据集中和数据集独立于数据源等优点,必将得到广泛的应用。但在具体使用中必须对其安全性加以注意。只有在确保其安全的基础上,才能更好地发挥该技术的各种优点。
参考文献:
[1]吉占占.基于DataSet和ADO.NET的文献检索列表转换软件设计[J].计算机应用与软件,2009,6
[2]王丽芳.基于ADO.NET的O/R Mapping中间件的研究[N].西北工业大学学报,2010,6
数据访问保护 篇4
云计算是继分布式计算、网格计算、对等计算之后的一种新型计算模式,它以资源租用、应用托管、服务外包为核心,迅速成为计算机技术发展的热点。在云计算环境下,IT领域按需服务的理念得到了真正体现。云计算通过整合分布式资源,构建应对多种服务要求的计算环境,满足用户定制化要求,并可通过网络访问其相应的服务资源。云计算在提高使用效率的同时,为实现用户信息资产安全与隐私保护带来极大的冲击与挑战。当前,安全成为云计算领域亟待突破的重要问题,其重要性与紧迫性已不容忽视。
目前云计算安全问题具有五大特征。(1)服务外包和基础设施公有化特征:这就导致用户的应用和数据交由云端管理,用户对自身任务与数据的安全并不可控;(2)动态复杂性:多层次服务模式(如Iaa S、Paa S和Saa S)以及用户执行环境的动态定制和更新带来了云计算环境中复杂的信任关系;(3)超大规模、多租户资源共享特征:现在云平台上用户数量非常大,实体关系很复杂,存在平台和用户、用户和用户之间的恶意攻击;(4)资源的高度集中性:云计算环境比传统计算环境面临的安全威胁更大以及遭受破坏的可能性更大,因为它的资源更集中;(5)云平台的开放性:云平台中存在众多不可预计安全漏洞与缺陷的开放性软件,导致平台的安全风险大大增加,攻击者更容易窃取或破坏租户数据。
上述云计算安全特征决定了云计算访问控制是云计算安全问题的核心,访问控制是实现用户数据机密性和进行隐私保护的重要手段。目前,云计算在访问控制方面仍然没有一种足够安全的方案。
2 访问控制技术与基于属性的访问控制技术
访问控制长期作为各界的研究热点,从20世纪60年代诞生至今,已取得了长足的发展与进步。针对不同的访问控制需求,众多不同的访问控制模型和技术也应运而生,如自主访问控制D A C、强制访问控制M A C(机密性模型B L P、完整性模型B iba)以及基于角色的访问控制R B A C等。这些模型在现实中得到了广泛的应用,其中对R B A C的研究与应用最为广泛。然而在复杂的云计算环境中,包括R B A C在内的传统的访问控制方法仍然具有较大的局限性。为了解决传统访问控制方法的静态性以及云服务商不可信等问题,基于属性的访问控制(A ttribute-B ased A ccess C ontrol,A B A C)逐渐进入了人们的视野并成为各界的研究热点。由于A B A C具有灵活性、细粒度、可扩展性等十分适合解决上述问题的特征,因此它也逐渐成为访问控制方法中的热点技术。
基于属性的访问控制是伴随着分布式应用的发展而被提出的一种访问控制机制,用于解决分布式环境下的访问控制问题,因而先天对云环境有更好的适应性。A B A C可以根据客户属性特征并结合访问控制策略判断是否允许客户的访问请求。其基本思想是访问控制以实体(主体、资源和环境)的属性作为基础进行授权决策,它可以随着实体属性的变化动态地更新访问控制决策,提供一种更加细粒度、灵活的动态访问控制方法。A B A C尤其是由Sahai和W aters提出的A B E(A ttribute-B ased E ncryption),将解密规则蕴含在加密算法之中,可以免去加密过程中频繁的密钥分发代价。由于这一良好特性,有很多用A B E实现的密文访问控制来解决云存储中数据安全和隐私保护的研究。此类方法可较好地保证敏感数据的机密性。
基于密文策略的属性加密(C iphertext-Policy A ttribute-B ased E ncryption,CP-ABE)目前主要应用在云计算环境下的密文访问控制方案。但该类方案在属性撤销时,数据拥有者DO(Data Owner)需要生成密文重加密信息,并对相关密文重加密;由于密文重加密,具有权限的用户的旧密钥也不能解密密文,D O需要生成密钥升级信息并发送给用户进行升级;这些操作都会导致D O计算量增加。同时,用户会被其它用户的属性撤销所影响,这会增加用户的计算负担。在多次属性撤销的时间段内,可能没有或只有少量次数的文件更新,在文件不更新就不需要重加密的前提下,可以认为这样做会白白增加属性权威和C SP的计算量和通信消耗。
3 一种基于属性加密的云数据机密性保护和访问控制方法
3.1 方法介绍
经过研究,我们提出了一种云数据机密性保护和访问控制方法,采用对称密码体制和密文策略的基于属性加密机制,对用户敏感数据提供安全保护,在云服务提供商不可信的前提下,保证在开放环境下云存储系统中数据的安全性,实现敏感数据的安全共享,还能减少密钥分发和数据管理而给数据所有者带来巨大的计算开销。
本方法采用对称密码体制相关算法实现敏感数据的加密,以加密的形式保存在云服务器中;采用密文策略的基于属性加密机制实现数据加密密钥的保护,加密的访问策略可根据需要由数据所有者制定,只有满足访问策略的数据使用者才能通过解密来访问加密的敏感数据。本方法涵盖的体系构成如图1所示。
(1)认证权威C A:为云计算环境中的所有实体信任的可信第三方,提供数字证书生命周期管理(签发、更新、撤销)、维护证书和证书撤销列表C R L、身份鉴别等功能。
(2)属性权威A A:为云计算环境中的所有实体(包括下一级属性权威、主体、客体、权限、环境)签发属性,保存用户属性,提供属性管理功能,根据主体属性、客体属性和环境属性和访问控制策略进行访问控制。
(3)云服务提供商C SP:通过基于虚拟化技术实现计算、存储、网络资源复用方式,遵从服务水平协议SL A,为云用户提供弹性可租用的云服务;根据协议,对被托管数据依据云服务提供商的安全措施提供安全性、可用性保障。
(4)数据所有者D O:数据的属主,根据对称密码机制密钥策略和数据安全要求,生成自己的数据加密密钥对被托管数据文件进行加密,并将密文上传到云计算环境的服务器中存储。
(5)数据使用者D U:请求访问被托管密文的云用户,必须先向域权威提出访问请求并经过域权威验证通过后,才能访问数据。
本方法所述的云数据机密性保护和访问控制过程涉及几个方面。
(1)用户注册:用户包括数据所有者D O和数据使用者D U。用户在使用云服务提供商C SP的云服务前,必须注册为云服务的合法用户。用户在注册时,须提交必要的身份证明材料、用户属性信息。在验证用户及用户注册请求后,认证中心C A为用户分配身份标识ID,并签发相应的数字证书,以标识用户身份和身份鉴别;属性权威为用户签发属性集,将用户属性保存到属性库中,并分配属性密钥。
(2)数据上传:数据所有者D O在客户端根据数据文件的安全重要性,采用相对应的密钥策略生成对称加密密钥SK,然后使用对称加密算法A E S和密码模式,对数据文件进行加密得到数据文件密文C T。数据所有者D O然后使用属性权威A A为其分配的属性密钥加密数据加密密钥,得到密钥密文SK C T。
根据密文策略的基于属性的加密机制,数据所有者D O制定数据文件的访问控制策略;数据所有者D O发送数据上传请求给属性权威A A,在认证中心C A鉴别数据所有者D O的合法身份后,属性权威A A允许数据所有者D O的数据上传请求。数据所有者D O将密钥密文SK C T、数据文件属性、数据文件的访问控制策略传送给属性权限A A,属性权威A A保存数据文件属性、数据文件访问控制策略到属性库和策略库中,将密钥密文SK C T安全存储。数据所有者D O将数据文件密文C T发送给云服务提供商C SP的服务器保存。
(3)数据访问:当数据使用者D U要求访问云服务提供商的数据文件时,向属性权威提出数据访问请求。在认证权威鉴别其身份合法性后,属性权威A A通过对数据使用者属性、被访问数据文件属性、环境属性以及相关的访问控制策略进行验证,判断数据使用者D U是否具有该数据文件的访问权限。验证通过后,属性权威A A为数据使用者D U分发属性密钥,并将密钥密文SK C T发送给数据使用者D U。
数据使用者D U接收到属性密钥和密钥密文SK C T后,使用属性密钥解密密钥密文后得到数据文件的对称加密密钥,然后解密从云服务提供商C SP获得的数据文件密文C T,进而完成对数据文件的访问。
3.2 举例介绍
为了便于阐述,我们以请求密文访问举例说明本方法。密文访问过程如图2所示。
在经过用户注册和数据上传后,数据所有者D O已将对称加密的数据文件F传送到云服务提供商C SP的服务器中保存,并且属性权限A A已将数据文件属性、数据文件访问控制策略分别保存到属性库和策略库中,同时也安全存储了密钥密文。
(1)访问请求:数据使用者D U访问云服务提供商C SP中受保护的数据文件,向属性权威提出数据访问请求R E Q,其中包括数据使用者D U的属性。
(2)访问控制:在认证权威C A鉴别D U身份合法性后,属性权威A A通过对数据使用者属性、被访问数据文件属性、环境属性以及相关的访问控制策略进行验证,判断数据使用者D U是否具有该数据文件的访问权限。
(3)访问通过:验证通过后,属性权威A A为数据使用者D U分发属性密钥,并将密钥密文SK C T发送给数据使用者D U。
(4)访问结果:数据使用者D U接收到属性密钥和密钥密文SK C T后,使用属性密钥解密密钥密文后得到数据文件F的对称加密密钥SK,然后解密从云服务提供商C SP获得的数据文件密文C T,进而完成对数据文件F的访问。
4 结束语
通用数据安全访问模型 篇5
本文提出了一种通用数据安全访问的模型CDSA, 它实现数据的抽象访问与同步, 帮助工程师们管理好系统软件的数据, 保持数据的一致性和完整性。基于此模型可以实现远程过程调用 (RPC) , 其机制、原理和标准的RPC调用以及分布式计算原理完全相同, 不同之处在于这种调用方式可用于跨进程、跨系统、跨计算机边界、跨平台等复杂的环境中。
1 通用数据安全访问模型
首先, CDSA模型把各种系统软件对公用数据的访问划分为高级访问 (调用者需要理解数据以及各参数和返回的含义) 和原始访问 (调用者无需理解数据以及各参数和返回的含义) 。高级访问针对数据应用, 原始访问针对数据传递过程。
(1) 原始接口:输入和输出为数据流, 不理解协议本身以及任何应用数据结构, 供通讯使用。
(2) 高级接口:输入和输出为实际应用数据, 理解协议本身以及应用数据结构, 供业务使用。
其次, 考虑到一般的系统软件中数据的传递过程分为进程组内部数据传送 (交换) 和远程数据交换, CDSA模型规定进程组内的数据传送通过消息队列进行通讯, 在进程组外的数据传送, 主要通过SOCKET进行通讯。CDSA模型还约定这两种数据传输均通过原始模式进行, 不需要理解数据的含义以及输入和返回。
(1) 对于本地应用进程 (服务器进程) , 通过消息队列和主进程进行通讯, 达到数据读写的目的。为什么这样处理呢?主要是因为CDSA模型支持保存复杂的数据结构, 而共享内存只能适用于简单的数据结构, 如果采用复杂数据结构, 必须实现空间管理, 这非常复杂且可移植性不强。
(2) 对于其他进程, CDSA选用SOCKET作为通讯的手段, 通过抽象和复用代码等方法完成完整的数据通讯和交换过程。既达到RPC的效果, 又降低系统复杂程度, 同时满足了高效数据通讯的需求。
(3) CDSA模型规定, 服务器启动后, 主进程负责将全部的数据加载到内存, 主进程有义务通过消息队列或SOCKET等方式为其他服务进程 (包括远程管理进程、客户端进程) 提供数据共享, 并惟一直接操作数据库, 以维持数据的统一性。
(4) 如果系统软件有独立的远程管理进程, 由于多次远程读取数据需要耗费大量的带宽和时间, 所以CDSA模型规定管理端进程与服务端连接后, 首先下载并且维护一份和远程服务端一致的数据, 如此一方面保证本地数据和服务器数据的一致性, 一方面降低数据读取的消耗。
(5) CDSA为了保证数据的一致性, 采用了读取共享、写入独占的方式。具体来说, 本地应用进程在系统启动后自动获取数据库的修改权限, 第一个连接进入的管理进程可以抢占该写入权限, 直到该进程退出后, 如果系统中已经存在有一个管理连接, 后连接进入的进程将只能获取读取的权限, 并不能剥夺第一个管理进程的写入权限。
最后, CDSA模型定义数据访问的触发 (回调) 机制, 用于在设置变更或读取的状态下做出某种响应 (如配置系统、数据同步传递、数据重读、数据更新等) 。
2 CDSA模型的实现
CDSA模型存取的数据可以是数据库, 可以是配置文件、系统环境等。对数据库的操作没有定义专门类, 需要各系统软件自行考虑。对配置文件、系统环境等的存取, CDSA模型定义了实现IBoot DBIPlugin接口的Csvr Cfgtor类。通过这个专门类去处理实际的数据存取, 该专门类还支持调用IAdvBootDBI接口, 以便远程重新获取数据、远程修正数据。
CDSA模型还定义了两个实现IRaw Boot DBI或者IAdv BootDBI接口的类, 用于完成对数据的存储和数据格式的转换。
(1) 数据直接访问类
完成数据的直接访问, 对数据库进行直接操作, 通过IBoot DBIPlugin接口调用Csvr Cfgtor类来完成数据的存储以及存储的事件通知。
该类实现了IRawBootDBI、IAdvBootDBI这两个接口。其他进程可以通过这两个接口调用来存取数据。
(2) 数据中继访问类
完成数据的转换, 可以将复杂的数据结构转换为标准的数据流, 或者将数据流还原成复杂的数据结构。这些数据流包括两个部分:输入流和输出流, 通过这两个部分完成参数的传递和返回值的获取。
该类实现了IAdvBootDBI这个接口, 支持调用其他类的IRawBootDBI接口去传递、存取数据。其他进程可以通过这两个接口调用来存取数据。
(3) 客户端SOCKET类 (数据通讯模块)
数据通讯模块本身即为一个基于IRawBootDBI的对象, 他们完成的工作即将输入流送入其他服务进程或者服务器端, 然后等待其他服务进程或者服务器端返回一个输出流。一个CBootDBRelay的对象可以成功地将高级的数据转换为 (序列化) 流格式, 然后调用通讯模块的接口IRawBootDBI, 等待通讯模块完成数据请求后, 将返回流还原成 (反序列化) 高级格式, 返回给调用者。
数据通讯模块对数据的序列化与反序列化是成对出现的, 如果有多对序列化的格式, 就要分配协议号以示区别, 协议号本身被序列化成流格式的第一个字节, 反序列化时先读取第一个字节, 了解序列化的格式, 再对后续的流格式进行反序列化。
3 CDSA模型中数据访问的流程
模型中涉及配置数据的各进程对数据访问的逻辑示意如图1。
(1) 数据服务进程的直接数据访问
数据服务进程负责数据库的管理, 是数据的直接处理进程, 该进程通过消息队列实现数据的对外共享。
如图1所示, 在请求到达后, 该进程通过CBootDBDirect访问数据, 并同时完成系统配置:[消息队列服务器端]->IRawBootDBI (CBootDBDirect) ->DB (->IBootDBIPlugin (CSvr Cfgtor) ->系统配置) 。
(2) 本地进程间的数据访问
本地应用进程是本地的数据消费者之一, 该进程不能直接访问数据库的数据, 但可以通过高级访问接口存取数据:[本地应用进程]→IAdvBootDBI (CBootDBRelay) ->IRawBootDBI (消息队列客户端) 。其过程如图2所示。
(3) 远程进程间的数据访问—服务端
远程管理进程的服务端是数据的转发层, 对外衔接网络, 对内衔接数据服务进程。
[远程管理进程的服务器端]->IRawBootDBI (消息队列客户端) 其过程如图3所示。
(4) 远程进程间的数据访问-客户端
如图4所示, 远程管理客户端进程为数据的消费进程, 存在两种访问数据库的方式:
本地缓存数据:[管理]->IAdvBootDBI (CBootDBDirect) ->CacheDB
远程数据:[管理]->IAdvBootDBI (CBootDBDirect) ->IBoot DBIPlugin (Csvr Cfgtor) ->IAdvBootDBI
(CBootDBRelay) ->IRawBootDBI (SOCKET客户端)
4 CDSA模型的应用
图5说明了一个无盘站引导服务系统使用CDSA模型进行数据访问的实际情况。
说明:
(1) 图中数据守护进程不但是主无盘站引导服务软件的主进程, 还是数据服务进程, 它直接进行数据访问, 通过消息队列实现数据的对外共享。
由于系统软件本身功能不同, 操作的数据类型肯定也不同, 这就要根据实际需要去定义具体的实现类。图5中定义了无盘配置数据, 系统数据, 系统配置数据, 缓存数据等类。
(2) 图中DHCPBINL服务进程和TFTP守护进程对应了本地应用进程。
D H C P B I N L和T F T P守护进程是本地的数据消费者, FTFP还会fork出新的进程进行数据消费, 这些进程通过高级访问接口存取数据。
(3) 图中的管理服务器进程对应远程进程的服务端
管理服务器进程是数据的转发层, 对外为管理工具提供数据, 对内向数据服务进程取得数据。
(4) 图中的管理工具进程对应远程进程间的客户端
管理工具进程是数据消费进程, 刚建立连接时, 把数据从服务端请求到本地缓存, 以后的操作在缓存内进行。操作完成后, 如果缓存数据被修改过, 就调用CsvrCfgtor类的IBoot DBIPlugin接口回写数据。也可以通过IBoot DBIPlugin接口从远程取得最新的数据。
摘要:本文提出了一个称为CDSA的数据安全访问模型, 该模型可以被用在各应用软件中保证服务端与客户端数据的一致性, 也可以用在本地进程间通信、远程进程间通信等领域, 保证共享数据的一致性。
关键词:数据存取,数据一致性,回调
参考文献
数据访问模型的现状 篇6
许多计算机应用,包括计算密集型和IO密集型应用,都需要高性能的底层存储系统保障服务。面对应用系统产生大量数据的IO访问,存储系统需要提供足够的性能来保证应用的服务质量(quality of service,QoS)。随着基于虚拟化技术的云计算的发展,多用户、多应用的场景更加普遍,比如Amazon云,保障应用所需的性能尤为重要[1]。不同的应用具有不同的访问特性,应用内部也存在不同的数据访问阶段,因此,根据不同应用的数据访问特征分而治之,是存储系统必不可少的机制。
数据访问的特征分析,对于针对性的系统性能优化非常关键:①数据访问特征可以揭示某一类应用的规律性,从而为一类应用提供指导,比如缓存策略的指定[2,3]、数据布局[4]、程序重构[5]和程序行为分析[6,7,8]等等;②基于访问特征的数据预测,能够及时地、动态地优化系统的性能[2],也为应用的QoS提供了保障。
数据访问的分析,一般是通过收集应用访问trace记录,进行离线或近线分析得出应用的访问特征。这方面的研究工作主要以IO访问trace分析为热点,而典型的访问特征是访问的时度(Recency)、频度(Frequency)、重用距离(Reuse Distance)等统计特征。对于数据访问特征的分析,学术界进行了大量定性和定量的研究,提出了大量的模型,比如LRU堆栈模型(LRU Stack Model,LRUSM)[9],工作集(Working Set,WS)模型[10],有界局部性间隔(Bounded Locality Interval,BLI)模型[11],访问间隔模型(Inter-Reference Gap,IRG)[12],有效重用工作集(Generalized Effective Reuse Set Size,GERSS)树模型[4],稳定集模型(Stable Set Model,SSM)[2],相关集模型(Related Set Model,RSM)[13]。根据研究对象的粒度不同,本文将数据访问的研究分成两类:微观模型和宏观模型。
2 微观模型
应用程序(比如,数据库、搜素引擎、文件共享等)产生的数据访问请求,可以描述为一个请求序列,例如r1r2…rt…表示经过t个逻辑时间产生的访问序列,其r(i)表示第i个时间访问的数据对象。这里的逻辑时间,是指一次访问定为一次时间。数据对象的大小根据研究系统不同而不同。微观模型针对数据访问序列,研究的基本单位是一个数据访问请求r(i),考虑请求之间的时空局部性。时间局部性暗示一个数据被访问之后,在很短时间内会再次被访问;空间局部性暗示一个数据被访问之后的很短时间内地址相邻的数据会被访问。
2.1 简单随机模型
简单随机模型(Simple Stochastic Models,SSM)主要分为三种,简单重用模型(Simple Renewal Model,SRM)[14]、独立访问模型(Independent Reference Model,IRM)[15]和LRU堆栈模型。
简单重用模型SRM认为每一个数据的访问过程都是一个渐进独立的重复使用过程,这个模型曾经作为计算工作集的统计数据[16,17],但是在缓存管理方面并没有发现优势[17]。独立访问模型IRM认为每一个数据块都有自己的访问概率,而这个访问概率是一直不变的,即Pr{rt)=i}=aifor allt,也就是文献[18]中所提到的概率模型。独立访问模型IRM是LFU(Least Frequently Used)替换算法的理论基础。LRUSM起源于LRU(Least Recently Used)替换算法,LRU堆栈是一个按照访问时间距离当前时间远近排序的向量,向量的第一个位置是当前访问数据r(t),对应r(t)的堆栈距离d(t)是指r(t)元素在上一个时刻离栈顶的位置,如图1所示。
在上世纪六七十年代,简单随机模型的研究是很活跃的模型研究。当时研究者已经对局部性(locality)现象有了一定的认识,但是,由于错误的认为局部性之间的转换是一种类似缓慢漂移的行为,许多人认为采用简单随机模型也能模拟出这种局部性现象。然而,在使用简单随机模型进行工作集大小估计、缓存替换算法评估等工作时,研究者发现了许多与事实不符的现象,这直接否定了对局部性转换的“缓慢漂移”认知,并导致了复合模型的诞生[17]。
简单随机模型很容易部署到缓存管理中。该类算法利用数据访问中数据块的访问历史信息来评价是否需要替换该数据块。基本的评价指标有时度(Recency)和频度(Frequency)两种,两个指标分别对应于LRU和LFU两种算法。LRU算法是选择最近最少使用的数据进行替换,而LFU算法是选择访问频度最少的数据进行替换。LRU算法的理论基础是LRU堆栈模型(LRUSM),它根据每个数据块距离上一次访问的间距来衡量该数据块的热度,即访问间距越近的数据块的访问热度愈高,反之亦然。LFU则基于独立访问模型(IRM),它根据每个数据块的数据访问频度来衡量数据块的访问热度,访问频度越高的数据块的访问热度也就愈高,反之亦然。然而不管是LRUSM模型还是IRM模型都不够全面[19],因此现代的缓存替换算法一般都会把这两种评价指标综合在一起,例如ARC(Automatic Reference Counting)算法[19],该算法能够以在线自适应方式动态调节Recency和Frequency两种评价指标所占比例,以期适用于各种不同的数据访问类型。目前这类算法研究工作中有代表性的研究成果主要有:IRU、LRU-K[20]、2Q[21]、LFU、MQ[22]、LR-FU[23]、LIRS[24]和ARC。
2.2 IRG模型
访问间隔模型IRG[12]考虑对同一元素两次访问的时间间隔作为时间局部性的有效评价,IRG(a)=X1X2…,其中Xi=ti-ti-1,如图2所示。
IRG模型使用k阶马尔科夫(Markov)链来进行未来访问间隔预测,见公式(1)。
IRG模型能够根据相同的时间间隔来捕捉簇内局部性(Inter-cluster Locality),但是基于马尔科夫链的开销不利于实际应用,而且真实访问间隔的变化是不稳定的,对其预测效果是有影响的。基于IRG的内存替换算法,会选择预测时间间隔最长的数据进行替换,但是独立查看每一个数据块,无法获取捕捉应用整体上的访问行为。
综上所述,微观模型实现比较简单,如表1所示。最主要的应用就是缓存管理,基于微观模型的优点在于访问热度评价方法在实际应用中所带来在时间和空间上的开销较小。其中LRU算法又由于实现最为简单且对于不同数据访问模式类型具有较高的普适性,因此在对缓存处理时延要求较高或计算资源匮乏的应用环境下最为适用,例如CPU片上数据缓存、磁盘控制器中同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)缓存等;但该类算法在管理大容量缓存的时候将遇到困难,由于它们采用LRU的渐变式访问概率估计方法来近似逼近突变的访问概率,在大容量缓存中,将不再访问的数据替换出缓存将需要花费更长的时间作为代价,这造成了更严重的缓存资源浪费。
此外,应用数学拟合曲线也可以直观描述数据访问特征。例如按照数据访问频度降序排列,互联网文本负载符合Zipf-like分[25],互联网的媒体负载的访问符合拉伸指数模型(Stretched Exponential,SE)[26]。
3 宏观模型
宏观模型与微观模型不同,宏观模型类似于经验模型,它来自于数据访问直观特征的假设。其研究对象是应用产生的数据访问集合。与单个请求相比,集合描述的数据更多,更能反映数据访问的阶段性,从而揭示应用的行为变化。
3.1 工作集模型
工作集模型[10]是最早的用于刻画应用缓存需求的理论。它最初主要是用于解决内存资源的抖动(thrashing)问题。工作集理论定义集合W(t,T),表示某一应用在t时刻之前的T间隔内的数据访问集合(如图3所示),然后根据集合中元素的个数定义应用的缓存需求。工作集模型的缺点是由于。与T的任意性,W(t,T)集合大小存在很大的任意性和不确定性,因此只能作为一个缓存需求的参考值。使用工作集模型,可以用来平衡资源需求和分配问题[27]。
3.2 阶段-转换模型
阶段-转换模型(Phase-Transition Model)起源于对虚拟内存中局部性(locality)突变现象的正确认识。阶段-转换模型认为,程序的访存行为可以表示为以下二元序列:
其中局部集Li是在第i个阶段内被访问的数据的集合,而Ti是该阶段的持续时间。程序在一个阶段内部的访问行为是稳定的或者缓慢变化的,而阶段和阶段之间的变化是突变式的。Denning和Kahn[28]设计了一个复合模型,用于验证突变转换的重要性,在这个模型中有一个宏观模型和微观模型。宏观模型是一个半马尔可夫链,它的状态是互不相交的局部集(Locality set),持续时间就是阶段时间。宏观模型用于产生一个(S,T)的二元序列,其中S表示局部集,T表示它的持续时间。微观模型用于产生一个在S集合上长度为T的访问序列。微观模型可以是IRM,LRUSM和循环访问。他们证明了突变转换是程序行为模型中不可忽略的
Batson和Madison[11]开始实验在真实的符号引用序列中学习阶段和转换。他们使用活跃集(Active set),并以此称谓表示局部集,并使用“有界局部间隔”(Bounded Locality Interval,BLI)来表示阶段和局部集的结合体,如图4所示。他们定义阶段是一个给定数据集合在LRU栈顶全部被重用后,继续停留在LRU栈顶的时间。这是对实际访问序列中的阶段和转换的第一次捕捉。但是他们的捕捉仅仅用于验证阶段和转换,在访问模型中具有同样的重要性,并没有用于实际指导缓存管理。阶段表明了应用所需的活跃数据的稳定性,而阶段转换暗示了应用行为变化导致了活跃数据的变化。一些技术提出了识别阶段的方法[29,30,31]。
此后还有很多的模型研究[17],他们共同验证了阶段和转换两种行为在程序行为中具有同等重要的地位,阶段-转换行为是对程序行为局部性的精确描述。
基于阶段-转换模型,研究者[32]可以在程序概要分析阶段对程序的访存行为进行刻画,并预测该程序之后的访存行为,从而优化缓存的管理,比如自适应调整CPU缓存,或者进行内存的重映射。
Majumdar等人指出应用对文件系统的访问模式与对虚拟内存的程序访问模式具有相似的locality特性,因此可以将对于程序的访问行为的研究大部分移植到对于文件系统访问模式的研究上[33]。研究[33]将BLI模型从程序访问模型里移植过来,用于分析文件系统上的访问行为。Majumdar的工作主要集中在对短期数据访问中存在的阶段-转换行为的研究。实验结果表明,文件访问序列呈现出与程序访问行为非常类似的“阶段-转换”行为,证明使用“阶段-转换”模型分析文件或者存储系统的访问是合理的。曾经的研究[34,35]对于长期数据访问行为的研究也发现了类似的阶段-转换现象,他们的研究主要应用于数据迁移。
3.3 RA模型
为了刻画访问关联的数据,文献[5]提出了访问紧密度(Reference Affinity,RA)。RA是指数据总是一起访问的程度,数据划分的依据是依赖不同数据之间的访问距离。依靠距离大小将数据分成不同的层次。
给定数据访问序列r1r2…rt…,另访问时刻i的数据为ri,访问时刻j的数据为ri,j>i,则ri和rj之间的堆栈距离dis(ri,rj)为访问时间[i,j-1]内访问的不同的元素个数,定义为容积距离(Volume Distance,VD)。如果ri和ri是对同一个数据的访问,那么VD就变为重用距离。如果rx和ry之间存在m个数据访问rxi,,…,,满足以下两个条件:①dis(ri,≤≤;②,ry都是对不同数据的访问。这样的链路定义为链接路径(Linked Path),其长度为k,组成一个RA组。不同的k将数据访问划分为不同的集合,而且由较小的k形成的RA组是较大的k’形成的RA组的子集。如图5所示。
基于RA模型的k-距离分析方法,可以提升程序数据布局一数组和结构重组的效率;访问紧密度为应用在不同内存层次的数据布局提供了一定的依据。
3.4 GERSS树模型
为了解决共享环境下不同层次缓存使用的问题,GERSS树模型[4]刻画了应用运行时在不同层次缓存的容量需求,对工作集模型进行了重新定义,提出了重用集(Reuse Set,RS)和有效重用集大小(Effective Reuse Set Size,ERSS)概念。ERSS是指保证应用在一个阶段内不发生thrashing的最小物理内存容量;ERSS是与缺失个数除以命中个数的比例ΔM相关的,表示为ERSS(ΔM)。
一个应用的GERSS树,是刻画了所有阶段的树形结构,其中每个阶段表示为一个树节点,每个节点包含持续时间θ(以逻辑时间表示)和有效重用集大小ERSS(ΔM)。节点之间的父子关系表示阶段的嵌套关系,一个节点可以有多个子阶段;如果一个子阶段发生许多次,边的权重表示发生次数,如图6所示。图6中,GERSS树包含5层阶段,最顶层阶段包含6×108次访问,包含两个小阶段,每个阶段16MB。第二层的阶段一个包含3.13×108次访问,一个包含2.57×108次访问。
GERSS树模型[4]主要用来规划应用在内存层次(memory hierarchy)的容量配置,当应用独立运行的时候,通过给定的缓存容量,根据缺失率信息识别出各个层次的阶段构造其GERSS树,根据不同层次的内存容量放置不同大小的阶段数据,其详细过程参照文献[4];当多个应用共享内存时,每个应用都有自己的GERSS树,所有应用在不同层次的阶段数据总和不超过该层的缓存容量,就不会影响各自的服务质量。
3.5 访问相关性模型
数据访问之间存在着一定的联系,称之为访问相关性。存在这种关系的数据总是会在某个阶段内一起访问或者一起不访问,表现出一定的稳定性。借助于工作集,令S代表该数据块集合,W(t,T)代表在(tT+1,t)时间内S集合中被访问数据块的子集。s是S集合中数据块的个数,w(t,T)是w(t,T)集合中的数据块个数。对于绝大多数时间点t,其形式化表达如公式(2)。
文献[2]针对访问相关性的特征,提出了一种新的数据访问模型一稳定集模型(SSM),该模型能够精确的描述阶段转换行为。SSM是一种基于局部性原则、描述长时间数据访问情况的模型。它通过挖掘数据块之间的关系获得访问概率突变的详细信息。它将数据访问描述为多个不相交的集合,每个集合被标记为在多个时间段中处于活跃状态,一个时间段中可以有多个不同的集合同时处于活跃态。一个集合中的数据块倾向于同时被访问或同时不被访问。这种稳定集现象在一些trace中普遍存在,而且该现象可以直观的使用局部性原则来解释。
文献[36]描述了程序访问局部性的图像,如图7所示,纵轴是物理地址块号,横轴是时间。块号和时间间隔增大到一定程度之后,我们可以看到一些数据块总是倾向于同时被访问或者同时不被访问。
图8是将图7所示数据访问使用稳定集模型转化之后的效果,除了明显的阶段划分,在地址空间上也进行了划分。稳定集模型精确的刻画了数据访问的阶段-转换行为。稳定集模型SSM将任何数据访问流分解为有限个稳定集上的同时访问流,如公式(3)所示。
注:随着时间变化,局部性呈现明显的阶段性和聚集性
其中,(Si,Ti)表示稳定集Si上的访问流。访问流阶段性地同时访问Si上的所有元素,并且与其他稳定集上的访问流相互独立。Si是这个访问流访问的数据集,并且与其他稳定集是不相交的。Ti表示稳定集访问流(Si,Ti)发生的时间段序列,如公式(4)所示。
稳定集模型,是第1次存储系统访问行为研究。稳定集模型借助于工作集和阶段-转换的概念,实现了主阶段工作集的更小划分。其提出的稳定访问集概念,是在工作集的基础上强调了重复访问特性,与GERSS树模型的重用工作集概念相同。基于稳定集模型的缓存管理方法对于大数据集的阶段间缺失问题具有良好的优化效果,能显著降低服务器端负载,提高客户端访问速度[2,3]。
为了研究阶段的嵌套行为,已有研究[13]对SSM进行扩展,提出了相关集模型RSM。RSM把数据访问流R转换为不同层次相关集上数据访问的模型,如公式(5)所示。
其中,k代表层次,k越大代表细分的集合越小,R代表数据访问流,它可以表示为不同层次上访问流()的叠加。
第j层对应于每个相关集的活跃时间,是一个由不相交的时间段组成的集合{},在这些时间段里,相关集都处于活跃状态,即总是一起访问(访问相关性)。
同时,不同层次的相关集之间存在着“嵌套”关系:
(1)集合空间嵌套(数据包含):
(2)时间嵌套(时间包含)
其中,()为第j层访问流。
我们以文献[11]中访问请求序列为例,介绍嵌套关系,如图9所示。横轴刻度代表请求访问的逻辑时间。
从图9中可以看出时间和空间都满足嵌套的关系:从时刻11到30是集合{ABCD}反复访问的大阶段,从时刻13到20是集合{CD}反复访问的中阶段,时刻14到16是{D}反复访问的小阶段。此外,也能看出{CD}和{D}的重复出现的特征。
与稳定集模型相比,相关集模型对数据的嵌套特性进行分析,并认为访问相关性具有嵌套特性,是一种普遍存在的数据访问现象,是对数据访问的一种合理描述。
综合上还的模型,宏观模型所表达的集合属性强调了数据的聚类效应,对数据分布、行为描述非常关键,如表2所示。如何有效划分阶段和数据,保证活跃的数据总是在一起,是需要重点解决的问题。
数据访问的阶段性具有重要的意义:应用的访问呈现阶段性,具有两个属性,一是阶段的持续时间,二是阶段的大小;持续时间越长,性能越稳定,越容易保障应用的服务质量;阶段的数据越小,所需要的资源就越少[13]。数据访问的相关性为阶段的划分提供了重要的依据。
4 结束语
银行海量数据访问优化途径 篇7
海量数据库系统是一个可以动态调整的系统, 它的内存区域的大小、服务器进程的响应模式、后台进程的多少和种类都可以根据需要进行调整。这样一个可以动态扩展的数据库系统为不同的应用规模、软硬件平台提供了一个表现的空间, 它可以让不同的系统在不同的平台上发挥最佳的系统性能。同时, 也正是这种灵活性, 为银行海量数据访问的性能优化带来了一定的挑战。
一、数据访问优化的基本思路
银行海量数据访问优化是银行数据大集中后的一个重要研究课题。它将应用系统的数据访问任务在应用软件和DBMS之间作最优分解, 采用一定技术对大型数据库的数据结构设计、参数调整和数据访问方式等3方面优化进行有机结合, 从而有效减少搜索空间, 同时提高数据访问的效率, 完成数据访问优化工作。同时在数据库管理层次, 可以根据不同交易对数据访问的特点, 进行数据库的配置和优化设计, 充分发挥数据库管理数据的优势。如果两类数据库存放在不同的物理主机上, 可以发挥多主机并行处理的最大优势。在应用程序层次, 进行联机交易处理时, 严格控制每笔交易的处理时间, 杜绝其它业务处理进程 (如大数据量查询交易和长事务交易等) 对联机交易处理的影响, 使联机交易类数据库保持最小的数据集合, 提高交易响应速度, 便于对数据进行快速的联机备份。应该最大可能地实现7×24小时不间断业务, 日终、季末、月末、年末的批量处理尽量不要影响联机交易业务持续进行。数据访问优化的基本思路如下所述。
(一) 减少无关和重复的计算
采用适当的数据访问语句, 减少无关的数据运算和操作运算。针对影响重复计算的原因, 如用户在所提供的规则中对数据的重复计算或在迭代计算中同一事实多次计算等, 改进应用程序逻辑或数据访问算法。
(二) 参数调整
根据软、硬件的资源情况和数据库的实际运行状况, 调整数据库SGA内存区的大小和PGA区的大小, 调整操作系统数据缓冲区的大小、每个进程所能使用的内存大小等参数, 同时可以调整数据库存储过程, 提高系统的整体性能。
(三) 数据分布调整
可以将组成同一个表空间的数据文件放在不同的物理存储上, 即采用数据的分区技术, 调整数据库系统的I/O性能。例如, 银行的户主账表原来设计成一张表, 虽然可以方便程序的设计与维护, 但经过分析发现, 由于数据量太大, 会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等, 并放在不同的分区上, 则可以大大提高查询效率。
(四) SQL语句计算优化
SQL语句运行的时间越长, 占用系统资源的时间也越长。因此, 尽量使用优化过的SQL语句以减少执行时间。比如, 不在查询语句中包含子查询语句, 充分利用索引, 合理进行分组、合并及汇总等。
(五) 连接优化
指数据库中存在的临时关系的优化和长连接优化。前者指数据库系统查询中, 会产生大量仅含少量元组的临时关系, 要尽量减少这种临时关系;后者指逻辑数据模型中常出现一条规则含有多个子目标时, 该规则的计算中所包含的较多数目的连接操作。连接操作是一种十分费时的操作, 在数据库的连接操作中, 尤其是长连接查询中连接操作数目多、搜索空间大, 对长连接最好进行优化。
(六) 并行优化算法
指将并行算法引入逻辑数据模型, 以提高系统的处理效率。对含有递归规则的逻辑数据语言来说, 采用并行策略, 由于存在规则的迭代计算, 上一次计算的结果要作为下一次计算的输入, 这就需要将计算结果在系统间进行多次传递, 即并行计算将带来高额的传递代价, 因此, 需要采取查询并行优化算法减少这种计算结果的传递。
二、数据访问优化主要技术
通常一个基于海量数据的应用优化应在3个阶段有针对性地进行:应用程序开发阶段、应用程序部署阶段、应用程序调整阶段。不同的阶段优化的内容也不一样, 只有做好3个阶段的优化工作, 才能最大限度地使整个应用系统 (软件、硬件、网络) 高性能地运行。
(一) 数据索引技术
使用数据索引可以极大地提高数据操作效率, 特别在联机交易处理时, 尤其应该注重充分发挥数据库管理器利用索引进行数据操作的效率。数据表索引在建表时创建, 但在应用时的使用情况由应用自身决定。通过使用索引定位取代顺序扫描, 能够提高查询速度, 提高数据排序速度, 同时保证被索引字段的唯一性, 当仅仅查询索引字段时, 避免读取记录全部字段内容。但是建立索引后, 插入、修改、删除记录时增加系统的开销, 索引将占用额外的系统存储空间。因此应用开发时, 应该认真设计数据表的索引。
索引的建立原则为:对连接 (join) 字段建立索引, 对于连接操作, 至少对连接表达式的一个字段建立索引, 否则数据管理器要么在连接之前自动建立临时索引进行“sort merge join”或者“nested loop join”, 要么顺序扫描数据表进行“hash join”;对选择性过滤 (selective filter) 字段建立索引;对排序 (order) 字段建立索引;避免对高重复率 (highly duplicate) 的字段建立索引;利用组合索引 (composite indexs) 降低索引重复率;建立组合索引时, 应该将重复率低的字段放在前面, 重复率高的字段放在后面;控制索引字段对比数据表字段不能过长;运用聚集索引 (clustered index) 提高查询速度, 聚集索引的建立将使被索引的表记录在物理存储上严格按聚集索引的顺序存放, 也就是聚集索引记录与数据记录的存储顺序一致, 查询时扫描的数据量较普通索引减少了, 所以对于经常查询, 很少增删的表可以充分利用聚集索引的优点提高查询速度;数字字段的索引查找速度较其他类型字段 (如字符串字段等) 的索引快;一个数据表的索引不应该过多, 索引过多, 数据插入、数据删除、数据修改速度一定程度上会受影响;利用“部分键查找” (partial key search) 提高索引利用率, 例如, 建立在表tab上的一个索引idx (f1, f2, f3, f4) , 当对tab按照 (f1, f2, f3, f4) 或者按照 (f1, f2, f3) 或者按照 (f1, f2) 或者按照 (f1) 条件查询时, 索引idx (f1, f2, f3, f4) 都可以被利用;为了提高索引查询的效率, 索引应该与数据存放在不同的表空间。
(二) 数据分区技术
当创建一个数据库时, 把数据库分成称为表空间 (tablespace) 的多个逻辑区段。为了使大型数据库的管理更方便, 减少数据查询时引起的I/O冲突, 提高查询效率, 可对数据量比较大 (50 000条记录以上) 、访问频繁的数据表进行分区存放, 分区分为以下方式。
1. 范围分区
如果要在某个数据表中存储大量记录, 可能希望将该数据表的行分到多个表空间中。若要按范围划分表的记录, 可使用creat table命令的partition by rang子句, 这些范围确定存储在每个分区的值。例如:
该数据表实现了将数据按季存放在不同的物理表空间。
2. 散列分区
散列分区通过对分区键值执行一个散列函数来确定数据的物理位置。在范围分区中, 分区键的连续值通常存储在同一分区。在散列分区中, 分区键的连续值不必存放在同一分区。散列分区在比范围分区更大的分区集上分配一个记录集, 从而减少了I/O冲突的可能性。创建一个散列分区, 使用partition by hash子句, 例如:
3. 列表分区
列表分区是基于值列表划分行而不是使用值范围划分行。当基于值列表划分表时, 只能在partition by list子句中指定一个分区键值, 不能指定maxvalue作为列表分区值。例如:
将各个省分行的数据按照业务量的大小进行搭配, 均匀地分配到多个物理空间。
4. 混合分区
混合分区是指把散列分区和范围分区结合起来使用, 从而创建范围分区的散列分区。对于非常大的表, 这种组合分区可能是把数据分成可管理和可调整部分的有效方法。例如:
将历史数据根据交易日期按季进行范围分区, 在范围分区内以账号为键值建立散列分区。
(三) 数据库设计和查询优化技术
1. 表的设计
当在表中添加字段时, 应该选择长度最小的数据类型, 这样表在内存中每页可以存储更多的记录。如“姓名”字段一般设置为TEXT类型, 一般长度为10就够用, 则比默认值255要好得多。整型Integer的长度是2, 在使用整型Integer可以解决问题时不要使用Single, Long, Double, Currency, 因为它们的长度分别为4, 4, 8, 8 (都比2大) 。在建立表后一定要建立索引, 可以大大提高查询速度。
2. 压缩数据库
数据库的查询优化是有代价的, 随着数据库的不断扩大, 优化将不再起作用。压缩数据库会改变数据库的状态, 并重新优化所有查询。同时, 随着数据库的增大, 会产生很多碎片。而压缩数据库可以把一个表中的数据写到硬盘中连续的页里, 提高了顺序搜索的速度。
3. 避免多余计算
当查询的结果作为另外一个查询的数据源时, 可能引起查询优化问题。在这个时候第一查询尽量避免大量的计算。如果在查询输出中实在无法避免计算式的话, 尽量把计算式放在最外层, 不要放在最内层。在建立查询时, 仅返回需要的字段, 这样可以节省不必要的开支。如果某个字段不需要的, 在查询语句中不要出现。用SELECT INTO建立工作表, 尤其是结果集用于几个查询时, 尽量使用中间结果表。在查询前做的准备工作越多, 查询速度越快。
4. 分组、合并及汇总
这里要说明的主要是合并, 当你需要把2个表合并, 就是说, 要根据“Customer Name”对2个表进行合并, 要肯定GROUP BY field (Customer Name) 和汇总 (Sum, Count, and等) 的字段是来自同一张表。在合并表时, 尽量使两边的字段都设置索引。这在执行查询时, 查询优化器可以更多地使用sophisticated内部合并策略。如果要在合并中使用表达式约束一个字段的数值, 需要测试表达式放在合并的一侧还是其他地方的速度。在一些查询中, 表达式放在合并关键词join一侧反而比较快。
SQL语句中分组 (GROUP BY) 的字段越多, 执行查询的时间越长。在GROUP BY子句中尽量用aggregate函数来减少字段的数量。在合并之前嵌套GROUP BY子句。如果要合并2张表, 而且只在一张表中分组, 以查询分为2个SELECT语句要快得多。例如:
可改为:
查询1
查询2
5. 使用可优化的表达式
重新构造查询语句, 以便于Rushmore技术可以对其进行优化。Rushmore是一种数据访问技术, 使用可以提高记录集的查询速度。使用Rushmore时, 若在查询条件中使用具体类型的表达式, 查询速度将非常快。Rushmore不会自动加快速度, 必须按照具体的方法修改查询语句, 以便于Rushmore可以优化它们。
使用COUNT (*) 代替COUNT (Column Name) , 因为Count (*) 计算所有的行, Count (Column Name) 计算所有Column Name非空的行。在变量中避免使用LIKE, 由于在查询完成的时候变量的值不确定, 所以无法使用索引, 这样建立的索引就失去了意义, 而且严重制约查询速度。避免LIKE和通配符同时使用, 如果要把LIKE运算符同通配符一起使用, 为了使用索引, 必须把通配符放在后面。避免SELECT子语句和NOT IN同时使用, SELECT子语句和NOT IN同时使用很难优化, 取反嵌套的查询或OUTER JOINs影响很大。
(四) 并行查询技术
随着功能强大的计算机的问世, 可以利用多个处理器来执行事务处理和查询。一个数据库的查询工作可以通过多个相互配合的处理器来完成。在多处理器间分配工作量可以提高事务处理及查询操作的性能。Oracle等大型数据库的并行查询选项 (PQO) 结构允许将几乎所有的数据库操作并行化。可以利用PQO优势的操作包括create table as select, create index, insert, update, delete和全表扫描、索引扫描、排序、大多数查询。数据库所使用的并行程度由这些命令中使用的paraller关键字degree和instances参数决定。并行查询最适合以下的情况。
●通过搜索非常大表 (通常1 000 000行) 来处理访问大量数据的查询。
●处理连接非常大的表查询, 当数以百万行计的表一起进行访问并汇集查询结果时, 使用并行处理所得的效果特别明显。
●处理建立大索引、大容量数据装载、汇总计算以及对Oracle对象间大量数据拷贝等作业。
●处理在SMP (对称多处理器) 或MPP (大规模并行处理) 群和聚合 (多个机器一起工作, 访问同一组盘和主数据库) 的机器上的查询。
●处理存放在多个数据文件且在不同盘驱上的数据查询。
●对于CPU工作明显不足或间断使用CPU的机器处理。一般是按平均利用率不低于40%来检测CPU的使用效率。
●处理需要大量辅助内存的工作, 比如分类的查询。
●应用系统开发人员应与数据库管理员协同工作, 合理利用资源, 以保证并行处理的进行。
三、海量数据访问优化技术发展及展望
计算机技术发展日新月异, 数据访问优化技术也层出不穷, 当前的优化技术必须具有一定前瞻性, 不但要满足当前的应用要求, 还要考虑未来的业务发展, 同时必须有利于扩展或增加应用系统的处理功能, 同时对数据访问优化技术发展方向, 也要作必要的了解和有益的探讨, 为数据大集中时代数据的更好利用不断拓展途径。目前, 数据访问优化最新技术有以下几个方面。
(一) 逻辑数据语言
采用逻辑数据语言、逻辑数学模型和递归查询计算模式, 在扩大数据库的查询功能和提高数据库的推理能力方面发挥重要作用。如逻辑数据语言可以表达递归查询, 这是关系数据语言所不具备的。它通过构造函数符号的引入来表达复杂对象, 突破了关系数据语言1NF的限制, 同时克服了关系数据库中存在的阻抗不匹配问题。逻辑数据语言及模型具有说明性语义和较强的语义表达能力, 而且采用基于规则的表达方式, 十分符合人的思维方式, 尤其是近年来通过对逻辑数据模型及其计算语义、演绎数据库的各种递归查询算法及计算模式进行大量研究, 数据库的理论和实践方面已取得较大的进展, 并越来越适合用来开发各类基于决策的应用系统。然而, 作为智能数据库初级阶段的演绎数据库迄今尚停留在试验和原型化阶段, 随着进一步的技术进展, 商品化的演绎数据库和知识库系统将问世。
(二) 数据感知的调度
任务负载调度器是网络应用系统中数据访问的一个重要组件, 它通常在把作业分发到分布式数据库上, 进行执行时并不考虑数据的位置。只有在提供最好的数据访问性能的资源上执行作业才更有意义, 因此当前发展的一种趋势是, 调度器正在开始考虑所需要的数据的位置。这需要采用一些方法来将所需要的数据 (输入或输出) 及其位置关联到给定的可执行文件或作业上。网络感知应用程序有望成为一种新的概念, 其中应用程序能够了解网络的状态, 从而可以适应不同的环境来达到可接受且可预测的性能。由于分布式数据库的网络会不断变化, 在应用程序中应用网络感知方面的智能就变得有意义。这种方法的问题是采用什么编程模型以及能够实现何种程度的简化, 从而让应用程序开发人员可以简单地在自己的应用程序中集成网络智能。
(三) 智能检索
智能检索指用AI技术解决大存储容量数据库的优先存取问题, 它通常由AI和数据库2种技术的有效结合来实现, 亦即根据智能数据库或知识库中的事实和知识演绎出正确的答案, 进而推理, 以实现对数据库的智能检索。同时将含有函数项的一阶谓词逻辑用关系演算来表达, 并使其具有较高的计算效率。目前, 引入简单的函数项已不能满足新应用领域的需求, 如现已提出将集合引入逻辑数据语言以及将面向对象数据库和演绎数据库相结合等优化算法与途径。通常, 实现智能检索, 数据库系统应具有以下功能。
●能理解自然语言, 允许用户直接用自然语言提出各种询问。这通常需要引入AI中的自然语言理解技术, 通过建立基于自然语言或类自然语言的人机接口来实现。
●具有推理能力, 能根据存储的事实和知识来推理、演绎出所需的答案。
●系统拥有一定的常识性知识, 以补充学科范围的专业知识, 并能根据这些常识, 演绎出基于一般询问的某些答案来。智能检索涉及自然语言用户界面接口、逻辑演绎算法和语义数据模型等方面的研究, 近年来在这方面已有所突破。
参考文献
[1]唐汉明, 翟振兴, 兰丽华.深入浅出MySQL:数据库开发优化与管理维护[M].北京:人民邮电出版社, 2007.
[2]牛新庄.DB2数据库性能调整和优化[M].北京:清华大学出版社, 2009.
安全访问外包数据的研究 篇8
1 相关研究
参考文献[1]提出最有效的隐藏访问模式是采用分层结构算法。在分层结构算法中,如果洗牌算法采用AKS网络排序[3]算法,则平均时间复杂度为O(clog4N),其常数项c大约为6 000。当采用巴切排序网络算法[4]时平均时间复杂度为O(clog4N),其常数项c大小较为合理[5]。
许多学者在参考文献[1]的基础上又提出了一些新的结构[5,6,7,8,9]。其中参考文献[5,6]在平均时间复杂度方面进行了深入的研究。若客户端存储容量为O(1)时,参考文献[5]得到的平均时间复杂度为O(log2N),但一些研究人员已经发现参考文献[5]所提的结构存在安全问题[6]。在参考文献[6]所提出的结构中,当客户端存储量为O(1时,获得最好的平均时间复杂度为O(log2N);若客户端存储容量为时,可获得的平均时间复杂度O(log N)。参考文献[7,8,9]在最坏时间复杂度方面做了研究。参考文献[7]得出最坏时间复杂度为,但其平均时间复杂度也是。参考文献[8]提出一种新的O-RAM结构,当客户提供存储空间时,其平均时间复杂度为O(log2N),最坏时间复杂度为。参考文献[9的最坏时间复杂度为O(log3N)。
以上所提算法均由两个阶段构成,即访问阶段和洗牌阶段,算法的瓶颈就在洗牌阶段。在洗牌时,客户与服务器之间需要进行大量的数据交换,使得客户无法忍受洗牌过程占用的大量时间。如果能把洗牌过程分解到每次访问操作中,对服务器的访问时间保持在常数量级,这样就能将理论应用于实践中。因此,本文提出一种新的结构,在需要少量客户端存储空间和线性级服务器存储容量的情况下,使得每次操作的代价为O(1)。典型算法的性能比较[9]如表1所示。
2 常量级访问模式
本文假设客户端可信而服务器端不可信。O-RAM的目标就是对服务器完全隐藏数据访问模式,即从服务器角度观察,客户端每次读或写数据块请求将产生一个完全随机的数据访问序列。
2.1 数据结构
假设客户的数据大小为N块,每块大小为L字节,在云存储中,L的典型值一般为64 KB~256 KB。本方案需要占用服务器存储容量为3N块,利用均匀随机函数将N个数据块均匀随机地分布到3N个存储块中,其余2N个存储块存放哑元块。
在客户端设置一个缓存队列Q、两张数据表SerMap和PosMap。
缓存队列Q用来管理从服务器读取的数据块,本文假定最多可存储32个数据块。对缓存队列的操作有:Q.in(b)将数据块b插入队尾;Q.out()从队首移出数据块;Q.remove(b)将数据块b从缓存队列中移出;Q.getLen()返回缓存队列中存放的数据块数;Q.getSit(b)返回数据块b在缓存队列中的位置;Q.getSitF()返回队首数据块的块号。
Ser Map[3N]用来表示存储在服务器上各数据块的存储位置,它有3个域,分别是FlData、FlAcc和Fresh。FlData表示存储类型,其值为1表示该块为数据块,否则为哑元块;FlAcc表示其对应的存储块最近是否被访问过。当读/写存储块后,该变量的值设置为1。在查找一个哑元块时,若其值为0则选中该块,若其值为1则改为0,继续查找下一个哑元块;Fresh表示服务器存储块的新鲜度,在对服务器的每次读操作后都会使该变量的值增1,以保证相同数据在加密后结果不一样。
PosMap[N]用来表示用户数据块在服务器中存放的位置映射,包括flag和blockAdd两个域。flag表示数据块存放在服务器/本地的标志,若其值为1时,则表示数据块存放在服务器端,否则存放在Q中;blockAdd指数据块在Ser Map/Q中的位置。
2.2 访问模式
定义1:设客户对服务器的操作为(op,u,data),其中,op表示read(u)或者write(u,data)操作,u表示将要读或写的数据块标识,data表示要写的数据块。
无论op是读操作还是写操作,其访问服务器的序列由Lookup算法决定。
2.2.1 Lookup算法
在该算法中第1行和第7行共读服务器6次,其中随机读取2个数据块和4个哑元块,需要把所读的数据块保存在Q中。第2行至第6行读取指定的数据块u并保存在Q中。如果数据块u已在Q中,则随机读一哑元块。根据程序局部性原理可知,最近访问的数据块在最近的将来仍有可能再被访问到,因此对Q的管理并不按照严格意义上的先进先出策略,而是当访问的数据块在Q中时,将该块从Q中移出并放到队尾,以保证从Q中踢出的数据块是不常用的数据块。
当op是写操作时,将要写的内容覆盖Q中保存数据块u的缓冲区(第9行)。在每一次Lookup调用中,不停地有数据块存入Q中,Q总会变满,因此需要定期将Q中的数据块写入服务器以防止Q溢出,第10行是调用Evict将Q中的最久未用的数据块写入服务器。
2.2.2 Evict算法
Q中最多可存放32个数据块,调用一次Lookup最多有3个数据块进入Q中。因此,在Evict算法中,当Q的长度超过29时,则将超出的数据块写入服务器以保证Q在下一次Lookup操作时不会溢出。Evict算法描述如下:
第1行至第5行将数据块写入服务器。Evict踢出算法每次写6次服务器,先将缓存队列中的数据块写入服务器,然后用哑元块补足6块(第6行至第7行)。
2.3 洗牌
每执行一次Lookup都会将任意两个数据块读入Q中,当Q长度超过29时,就将超出的数据块写到服务器端的任意位置,实现洗牌操作,这样可将整个洗牌操作分摊到每次Lookup中,避免了集中洗牌造成的突发访问。
2.4 性能
假定存储块大小为64 KB,参考文献[9]与本文性能对比如表2所示。当数据文件小于等于16 TB时,所用客户存储空间小于参考文献[9],当数据文件大于16 TB时,所需客户存储量超过参考文献[9]。本文算法的优势在于所需服务器存储空间较少,实际性能恒定。参考文献[9]采用集中洗牌,当洗牌时需要大量的数据交换,当客户在读写操作时,若正好遇上洗牌操作,则需要等待很长时间。
2.5 安全
定义2:设y=((op1,u1,data1),(op2,u2,data2),…,(opM,uM,dataM))是客户请求访问数据块的一个序列,其长度为M。设A(y)表示存取访问模式,当客户的请求序列是y时,用A(y)表示存取访问服务器的序列。如果对于任何两个客户访问序列y和y′,只要其长度相等,对任何人(除客户本人)来说A(y)和A(y′)都是计算上不可区分的,则称该O-RAM结构是安全的。
在Lookup中,数据块u在服务器上的存储位置是随机分布的,读取u和6次随机读数据块操作混在一起,攻击者很难猜到哪一块是真实的块,并且攻击者很难知道下一次它将存放在哪一个位置。
在访问服务器的过程中可能出现刚被淘汰出的数据块又要被访问的情况。这种情况下,攻击者仍然无法获取有用的信息,因为至少有2/3的数据块是随机选取读到Q中的,最多有1/3的数据块是客户所读的数据块,但Evict算法采用最久未用块淘汰策略,攻击者无法知道所读的块是否为所需的数据块,也无法知道什么时间该块会写入服务器,即攻击者从被踢出后又要被访问的数据块中无法获取有用的信息,因此系统是安全的。
本文提出的常量级访问模式仅需占用线性级服务器存储量就可实现无关访问服务器,但它需要占用客户端存储空间,当文件长度超过16 TB时,比参考文献[9]的算法占用更大的客户端存储空间。下一步工作将在减少占用客户端存储空间方面进行研究,找到一个需求客户空间更少的算法。
摘要:在存储外包应用中,无关RAM允许客户对不信任服务器隐藏数据存储模式。提出一种新的无关RAM结构,对客户的每个请求仅需常量级代价和少量客户端存储空间即可实现无关访问。
关键词:无关RAM,访问模式,数据外包
参考文献
[1]GOLDREICH O,OSTROVSKY R.Software protection andsimulation on oblivious RAMs[J].Journal of the ACM,1996,43(3):431-473.
[2]GOLDREICH O.Towards a theory of software protection andsimulation by oblivious RAMs[C].New York:STOC,1987.
[3]AJTAI M,KOLMOS J,SZEMEREDI E.An O(nlogn)sortingnetwork[C].Boston:STOC,1983.
[4]BATCHER K.Sorting networks and their applications[C].NJ:AFIPS Spring Joint Computing Conference.1968.
[5]PINKAS B,REINMAN T.Oblivious ram revisited[C].California:CRYPTO.2010.
[6]GOODRICH M T,MITZENMACHER M.Privacy-preserving access of outsourceddata via oblivious ram simulation[J].Automata,Languagesand Programming,2011(6756):576-587.
[7]BONEH D,MAZIERES D,POPA R A.Remote oblivious storage:Makingoblivious ram practical[EB/OL].[2011-3-30].http://dspace.mit.edu/bitstream/handle/1721.1/62006/MIT-CSAIL-TR-2011-018.pdf.
[8]STEFANOV E,SHI E,SONG D.Towards practical obliviousram[C].California:NDSS,2012.
数据库访问技术的研究 篇9
随着计算机的产生和计算技术的不断发展, 以及科技的进步特别是信息产业的发展, 把我们带入一个全新的信息时代。为此, 人们需要收集、加工和处理大量的信息和数据, 数据库技术是随着数据和信息管理而产生的。在所有的数据库系统中, 关系型数据库是目前应用最为广泛的数据库之一。
由于不同数据库应用程序开发工具有不同的访问方式, 而且不同的数据供应商又提供了不同的接口, 致使用户在使用开发工具进行数据库应用程序开发时, 对不同的访问方式产生了迷惑和不解, 不知道哪一种访问方式的效率和效果最好。本文, 笔者探讨了常用数据库应用程序开发工具对不同数据库的访问方式。其中, 数据库应用程序开发工具以VB、ASP为例, 数据库以Access、SQL Server和Oracle为例。
VB和ASP都是微软提供的系统开发工具。VB是微软Visual Studio集成开发工具中的一个开发工具, 它既可以开发单机结构数据库应用程序, 又可以开发C/S结构的应用系统。VB使用DAO、RDO、ADO数据库访问方式。ASP也是微软提供的一个开发工具, 主要用于开发B/S结构的应用程序, ASP使用ADO数据库访问方式。下面, 笔者分别介绍一下以上3种方式对Access、SQL Server和Oracle的访问技术。
二、数据库访问对象DAO
数据库访问对象 (Data Access Object, 简称DAO) , 它是一组以数据库引擎 (The Jet Data Base Engine) 为核心而建立起来的动态连接库 (DLLS) 。DAO支持2种不同类型的数据库环境:利用Microsoft Jet Data Base Engine, 使得DAO成为访问本地ISAM数据库的最佳手段;利用ODBC Direct, 使得DAO在访问ODBC类型数据库时拥有最小的额外开销。
1. DAO可存取的数据库。
DAO可以存取本地DAO数据库, 即Microsoft Access和ODBC数据库, 包括SQL Server、Oracle、Sybase和任何提供ODBC驱动的客户机/服务器数据库, 以及Fox Pro、Lotus、文本文件等内容。
以上每个数据库源都提供了不同的安全等级。DAO的主要目的就是将程序员从每个数据库的细节中解脱出来而向他们提供统一的API接口。
2. DAO的基本对象。
DAO中有3个最基本的对象:DBEngine、Workspce和Data Base。
(1) DBEngine。DBEngine对象用于数据库引擎指定系数参数, DBEngine中的Default Type属性用于描述缺省的Workspace类型。如果其属性设置为db Use ODBC, 则使用ODBCDitect模式。Workspace对象作为一个打开的数据库的容器。
(2) Workspace。Workspace为打开的数据库提供安全的设备环境。在创建DBEngine的同时, 程序自动创建了一个缺省的Workspace对象, 用来指定访问数据库的用户名和口令。
(3) Database。Database对象封装了数据库存储器, 并且还定义了数据库的表格、关系、存储查询及打开记录等。
三、远程数据对象RDO
远程数据对象 (Remote Data Object, 简称RDO) 是位于ODBC API之上的一个对象模型层, 它依赖ODBC API、选定的ODBC驱动程序以及后端数据库引擎来实现大部分的功能。RDO具备基本的ODBC处理方法, 所以可以直接执行大多数ODBC API函数。RDO已包含在VB4.0/5.0企业版中, 由一个动态连接库MSRDO32.DLL来实现。
1. RDO数据库接口。
RDO面向客户机/服务器程序的特殊需求提供了一组对象以辅助这种程序的开发。与DAO提供的Jet数据库引擎接口不同, RDO提供的是一个直接与ODBC API连接的面向对象的抽象层。RDO使用ODBC API和数据库服务器驱动器创建到数据库服务器的链接, 创建查询和用于浏览结果设计集的游标, 并且依赖数据库服务器执行复杂的请求过程。它不像DAO那样, 利用Jet数据库引擎进行查询的预处理和连接管理, 而是直接与数据库服务器交互, 这使得RDO特别适用于客户机/服务器型应用程序的开发。
2. RDO的基本对象。
要想正确地使用RDO, 必须要对其对象模块结构加以理解。在RDO的对象和集合中, 有很多对数据库的状态和设定进行操作的属性, 以及对数据库进行操作的方法。RDO主要包括rdo Engine对象、rdo Environment对象和rdo Connection对象。
(1) rdo Engine对象。最初调用RDO对象以及RDC (远程数据控件) 时, 系统会自动生成rdo Engine对象的附带事件。rdo Engine用于对RDO全局属性的参数和选项进行设置, 是RDO的阶层结构内最上层的对象, 包含了其他所有的对象。
(2) rdo Environment对象。DAO对象在自动创建rdo Engine对象时, 生成rdo Enviroment对象的初始值并保存为rdo Enviroments (0) 。在一般情况下, 应用程序中不必追加rdo Environment对象, 大多数只需对已有的rdo Enviroments (0) 进行操作就可以了。只有在支持1个以上事务 (Transaction) 时, 需要将用户名和口令信息分别处理, 利用rdo Create Environment方法将特定的用户名和口令值做成新的rdo Environment对象。
(3) rdo Connection对象。rdo Connection对象用于同SQL Server的连接管理, 下面是与SQL Server连接的例子。
首先用New关键字声明一个rdo Connection对象, 由此生成独立的连接对象, 这时它还不是rdo Connection集合的成员。然后在具体连接到SQL Server数据库之前, 设定rdo Connection集合的属性。
四、Active X数据对象ADO
Active X数据对象 (Active X Data Object, 简称ADO) 。API是另一种用于开发访问OLE DB数据源应用程序的API。有很多种程序设计语言都支持ADO, 包括Visual Basic、Visual C++、VBScript、Visual J++和Active Server Page等。
1. OLE DB数据库接口。
OLE DB是COM模型的数据库接口。它是一系列的接口集合, 介绍了一种通用的数据访问方法。也就是说, OLE DB并不局限于ISAM、JET甚至关系数据源, 而是能够用于处理任何类型的数据。OLE DB向应用程序提供1个统一的数据访问方法, 而不考虑它们的格式和存储方法。ADO集合了DAO和RDO的优点, 而且它不像DAO和RDO那样严格遵循对象的层次关系。这就意味着ADO对象更容易创建和操纵, 因为它们都可以直接地创建和管理。ADO更适用于开发C/S和B/S结构的应用程序。图1说明了一个典型ADO应用程序的配置。
2. ADO的基本对象。
(1) Connection对象。一个Connection对象代表1个到指定数据源的成功连接, 应用程序通过链接访问数据源, 也可以直接访问数据源, 或者通过类似Microsoft Internet Information Server的中间层间接访问数据源。链接成功后, Connection以对象的形式存在。
(2) Command对象。Command对象是对数据源执行的一系列操作的定义。使用Command对象来查询数据库并返回数据集对象形式的查询结果。Command对象指定变量和参数来完成对数据的操作, 如添加记录、删除记录和更新纪录等。