数据安全访问(共12篇)
数据安全访问 篇1
0前言
本文提出了一种通用数据安全访问的模型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的数据安全访问模型, 该模型可以被用在各应用软件中保证服务端与客户端数据的一致性, 也可以用在本地进程间通信、远程进程间通信等领域, 保证共享数据的一致性。
关键词:数据存取,数据一致性,回调
参考文献
[1]上海证券通信有限责任公司项目文档.LinBox系统技术白皮书.2006.
数据安全访问 篇2
基于本体的通用数据访问系统的核心在于构建出合适的统一数据描述模型,以此模型为基础,构建数据访问引擎,并通过抽取配置工具建立了数据描述模型与数据实体之间的映射关系,最终通过通用数据访问软件实现异构数据的统一访问和展现。
【关键词】异构数据 本体 描述模型 映射 通用访问
1 引言
随着近年来网络技术的快速发展,各领域之间数据共享的需求日益增强,在网络基础设施日益完善的前提下,如何对不同行业和格式的数据资源进行统一访问和集成使用就成为了关键的问题。
国内外对于异构数据库数据的集成近期提出了ETL(数据抽取、传输、加载)机制,在实现中采用XML(可扩展标记语言)实现通用的数据交换,利用全局逻辑视图或者集成的综合数据库的方式实现对各类异构数据资源的集成。
本文通过定义数据本体,设计了一种通用的数据访问方法,建立不同的数据资源与本体之间的映射,使得综合系统直接访问各个异构业务数据库,从而提高数据的使用效率,降低数据冗余。
通用数据访问面向的异构数据具有海量、多元、复杂、动态、移动、实时等特征,为了更好的解决异构数据资源的访问、集成和展现,在设计与实现通用数据访问系统时,必须提供用户对异构数据源透明、一致和实时的访问能力:
(1)透明性,是指屏蔽底层数据源的差异,从用户的角度看来,得到的数据不是来自于若干个数据源,而是一个数据源;(2)一致性,是指消除数据源之间的存在的结构异构和语义异构;(3)实时性,是指访问到的数据是最新的数据,并且对数据库中实时变化的信息能够及时地捕获与展现。
2 总体思路及架构
基于本体的通用数据访问方法面向图形化的数据展现,快速的从异构数据资源中抽取出适用的对象,对其进行统一管理,并借助地理信息系统或表单显示工具向用户提供清晰直观的数据展现。
其主要解决异构数据的统一使用问题,在避免数据格式转换带来大量工作的前提下,实现数据的动态加载,保证应用系统与底层数据资源的分离,同时具有良好的扩展性,在数据种类发生变化时,只需要通过工具界面配置,就能够快速加载新增的数据资源。
基于本体的通用数据访问方法采用分层的体系结构,下层软件给上层软件提供运行支撑或输入,共分为四层,从底到顶分别是:本体定义及管理层、元数据映射层、数据访问层和数据展现层。
2.1 本体定义及管理层
本体定义及管理层主要负责建立基于本体的统一数据描述模型,并制订出一套对该数据描述模型的访问接口规范,是整个方法实现的核心和基础。
2.2 元数据映射层
元数据映射层主要实现数据的灵活配置,通过人工界面配置的手段在数据库元数据与统一数据描述模型之间建立对应关系,并把映射关系保存为XML文件,供通用数据访问软件读取。
2.3 数据访问层
数据访问层主要完成对数据库中实际数据的读取和输出。
通用数据访问软件在实现时遵循本体定义及描述层制订的规范,内部的数据组织关系来自于元数据库映射层生成的映射关系XML文件。
2.4 数据展现层
数据展现层主要包括两种展现手段:基于地理信息的图形化显示工具和表格形式的表单显示工具。
数据展现层属于业务应用范畴,主要需要考虑的是基于地理信息系统(GIS)的数据表现以及海量数据高性能显示的问题,与通用数据访问的实现没有直接关系,因此在本文中不对这部分的实现进行讨论。
3 关键技术及实现
3.1 统一数据描述模型
统一数据描述模型的内容包括图层公共信息(本体)和特征属性族,各类异构的数据在按照统一数据描述模型表述为本体和特征属性族的过程中,消除其原有的异构性,形成统一的数据表述。
统一数据描述模型主要由图层公共信息和一组特征属性族组成。
统一数据描述模型确定种类繁多的数据信息之间存在的内在共同点,建立图层公共信息的统一描述。
图层公共信息:
其中标识属性、空间位置属性、时间属性以及符号属性,这几个属性的组合体现了数据对象在全维图形上的基本价值。
在统一数据描述模型中除了建立统一的图层公共信息描述以外,还借鉴可扩展标记语言的思想,建立了一个对象特征属性族描述方法,用来存放每类数据对象的具体属性项。
该属性族由数据对象的类型确定,其可扩展的`特性保证了每一类数据对象信息项的完整,同一类对象属性族项的数量和构成保持一致。
特征属性族定义:
3.2 数据图层映射转换
采用根据数据库中字段的取值确定图层对象的动态映射机制,并提供多种方法来规范映射,提供了语义映射机制,通过将数据库字段与统一数据描述模型中的属性建立字段映射机制;采用数据库数据到图层对象的语义映射,提供量纲映射机制,通过规范数据库中数据到图层对象的取值处理标准,提供多种量纲转换机制,如经纬度的转换机制和时间格式转换机制等等;采用字段映射机制或条件映射机制来处理图层显示属性。
如果显示属性采用字段映射机制进行配置处理,那么将使用配置字段的取值进行显示处理;如果显示属性采用条件映射机制进行配置,那么在进行显示处理时,将对这组字段的取值进行判断,符合某组合的取值,则用该组合的设置值进行显示,没有符合的条件组合就是用默认值进行显示。
4 结束语
本文的研究对象主要是针对数据库形态的数据资源,而文中提出的方法对其他形态的数据资源也同样适用,因此,后续的工作将以建立各种形态数据资源统一访问的软件系统为目标。
参考文献
[1]缪嘉嘉,邓苏,刘青宝.E T L综述计算机工程,2004(2).
[2]沈镭.基于XML的异质多数据库集成系统的设计与实现[J].河南大学学报(自然科学版),2007(9):530-532.
VB数据库的访问技术 篇3
关键词:控件 数据库 接口
Visual Basic专业版是一种广泛使用的数据库编程语言,提供了对数据库应用的强大支持。VB访问数据库的方法大致有三类:使用数据绑定控件,使用数据库存取对象变量(Data Access Object Variable),直接调用ODBC 2.0 API接口函数。
一、VB的数据库结构
VB数据库的核心结构是MicroSoft Jet数据库引擎,JET引擎的作用是支持多种ISAM(Indexed Sequential Access Method,即索引顺序存取方法) 数据驱动程序。VB环境下Access是缺省的数据格式,对于其他的关系型数据库如FoxPro、Dbase(或 Xbase)、Paradox、Btrieve等,VB的专业版可兼容其驱动程序,这就使得VB能支持这些数据库格式。由上可见,Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的使用而提供的内存管理功能;同所支持的数据库的外部接口;为应用代码提供的内部接口。
二、VB访问数据库的原则和方法
1.VB访问数据库的原则
(1)代码的重用和运行的效率
VB程序设计中,应尽可能减少代码的重复编写,提高运行效率。例如:通过使用ODBC数据源连接数据库的方法,可在变换多种数据库类型的情况下,而不用频繁修改代码。用VBSQL通过DB-Library就做不到。而ODBC接口并不是VB访问数据库运行效率最高的方法。同样,同是使用ODBC接口的ADO的效率要高于RDO。
(2)实现的简便性,易维护性
如果一种方法实现起来很复杂,工程的开发必然造成人力物力的浪费,同时这样设计出来的应用程序只会支持起来更复杂或维护时更困难。例如:本地需要访问ISAM或Jet 类型数据源,那么就使用DAO/Jet,而没有必要使用通过ODBC的方法。RDC实现起来要较RDO更容易。
(3)安全原则
这一条应根据环境和条件决定。例如局域网的网络安全性要好于广域网,因而可直接利用数据控件DC,这样实现起来方便快捷,而广域网需要大量的错误捕获,如用RDC就不如用RDO易控制错误。
2.数据访问接口功能及含义
ADC(Advanced Data Connector):高级数据连接器, 提供绑定ADO数据源到窗体的数据绑定控件上。ADC主要是一种直接访问或者通过ADO访问远程OLE DB对象的一种技术,它也支持主要应用在微软IE浏览器上的数据绑定控件。它是特地为Web上的浏览器为基础的应用程序而设计的。
ADO(Active Data Objects):Active 数据对象,ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。可以使 用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、 文本文件、 图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。
DAO(Data Access Objects):数据访问对象,是一种面向对象的界面接口。通过DAO/Jet 功能可以访问ISAM 数据库,使用DAO/ODBC Direct功能可以实现远程RDO功能。使用DAO的程序编码非常简单,DAO提供丰富的游标(Cursor)类型的结果集和非游标(Cursor-Less)类型的结果集,同DDL(数据描述语言)的功能很类似。DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了完成管理这样一个系统所的全部操作的属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等工具。
JET(Joint Engine Technology):数据连接性引擎技术,是一种基于工作站通过DAO的数据库访问机制。虽然可以通过微软Access提供的ODBC驱动程序访问Jet数据库,但使用这些驱动程序在功能上有所限制。Jet机制有自己的查询和结果集处理功能,并可对同种或异种数据源作查询处理。
ODBC(Open Database Connectivity):开放式的数据库连接,是一种公认的关系数据源的接口界面。提供统一接口的界面,ODBC对任何数据源都未作优化。
ODBC Direct:是一种基于DAO对象的新的DAO模式,其方法和属性与RDO功能相同。使用在有DAO代码存在的场合,可用来访问远程数据源。
OLE DB:是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO技术的应用程序或用于C++的开发者开发定制的数据库组件。OLE DB不能被VB直接调用。
RDC(Remote Data Control):远程数据访问控件,是一种对RDO 数据绑定的控件。可以输出特定的结果集到数据源控件。
RDO(Remote Data Objects):远程数据对象,远程数据对象和集合为使用代码来创建和操作一个远程ODBC 数据库系统的各个部件提供了一个框架。对象和集合都具有描述数据库的各个部件特征的属性以及用来操作这些部件的方法。可以在对象和集合之间建立起关系,这些关系就代表了数据库系统的逻辑结构。RDO是ODBC API的一个浅层界面接口。是专为访问远程ODBC 关系数据源而设计的。
VBSQL:是Visual Basic 结构化查询语言。是一种基于API的接口方法, 几乎与C的DB-Library API相同,VBSQL只支持微软的SQL Server。VBSQL 快而且轻但不支持对象界面。
3.VB访问数据库的方法
VB访问数据库的方法很多,一般情况下分成三大类,而每一类又有很多方法。下面列出每一类,及每一类包含的方法。
(1)数据控件法
数据库绑定控件来实现数据的输入、显示、筛选等接口界面。VB支持多种数据源访问控件,在VB和COM界面接口之间起着媒介作用。这些控件提供了一种减少代码实现数据访问的途径。程序员可以使用同样的对象、属性和方法来处理各种不同的数据库格式。也可从一种数据库格式变到另一种格式(例如,将本地的Microsoft Access数据库转换为网络上的SQL Server数据库),也可在单一的查询或报表中连接来自多个不同数据库的表。
(2)数据库存取对象变量(Data Access Object Variable)
使用DAO访问数据库的对象和方法。
(3)数据接口法
目前在VB6中有效的数据访问接口方法中,有些是简单的应用程序接口界面(APIs),有些是组件对象模型界面(COM)。这两类数据库接口界面事实上在任何一种开发语言中都包括。
三、总结
近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样,Visual Basic访问数据库的解决方案面临诸多挑战。为此Microsoft 提出一种新的数据库访问策略,即“统一数据访问”(Universal Data Access)的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。“统一数据访问”(Universal Data Access)的基础是Microsoft 的数据访问组件。这些组件包括ActiveX Data Objects(ADO)、Remote Data Service(RDS,也称“高级数据连接器”或ADC)、OLE DB和ODBC。总之,在VB中访问数据库的方法很多,根据具体的环境、条件、要求而采用适当的方案。
参考文献:
1.冷向君.Visual Basic 中文版入门与提高[M].北京:清华大学出版社,1998
2.李昭原,罗晓沛.数据库技术新进展[M].北京:清华大学出版社,1997
3.Steven Holzner.Visual Basic 6.0技术内幕[M].北京:机械工业出版社,1997
4.Jiawei Han,Miccheline Kamber.数据挖掘概念与技术[M].北京:机械工业出版社
5.曾强聪,赵歆,杨莉.Visual Basic 6.0 程序设计教程[M].中国水利水电出版社,1999
安全访问外包数据的研究 篇4
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.
数据安全访问 篇5
但是这样做难免有些繁琐,且开发者做出了很多费力的工作。
这里,我们对原来的Webservice做出了一些改动:但凡返回值为DataSet的webMethod都为其加上一层 “外衣”,将其转化为XElement后返回给调用者一个XML档案。开发者只需利用LINQ TO Xml通过简单的 xml操作就可得到需要的集合。这样就免除了每个专案建立“自己”的service的工作。
下面通过一个简单的Demo对这个操作做出说明:
根据得到的DataTable,为其创建XElement作为返回值
static void Main(string[] args)
{
//获取数据源DataTable
DataTable dt = client.ExecuteQuery(sql).Tables[0];
//创建Xml Document
XDocument doc= new XDocument(
new XElement(“tables”,
new XAttribute(“xmlns”, “”),
new XElement(“table”,
new XAttribute(“name”, “0”),
new XElement(“columns”),
new XElement(“rows”)))
);
XElement columns = doc.Element(“tables”).Element (“table”).Element(“columns”);
foreach (DataColumn col in dt.Columns)
{
//新增一个Element Column
columns.Add(new XElement(“column”,
new XAttribute(“name”, col.ColumnName),
new XAttribute(“type”, col.DataType.Name)
));
}
XElement rows = doc.Element(“tables”).Element(“table”).Element (“rows”);
foreach (DataRow row in dt.Rows)
{
//新增一个element Row
XElement newrow = new XElement(“row”);
rows.Add(newrow);
string data = null;
foreach (DataColumn col in dt.Columns)
{
switch (col.DataType.Name)
{
case “DateTime”:
data = (row[col] == DBNull.Value ? “” : Convert.ToDateTime(row[col]).ToString(“yyyy/MM/dd HH:mm:ss”));
break;
default:
data = (row[col] == DBNull.Value ? “” : row[col].ToString());
break;
}
//为新增的row添加Attribute
newrow.Add(new XAttribute(col.ColumnName, data)
);
}
}
XElement element = doc.Element(“tables”);
Console.WriteLine(element.ToString());
}
Result:
调用者解析xelement
public static List getBasicInfo(XElement element)
{
List Lists = new List ();
//element为获得的返回者
var result = from item in element.Descendants(“row”)
select item;
BasicInfo info = null;
foreach (XElement item in result)
{
info = new BasicInfo();
info.ID = (int)item.Attribute(“ID”);
info.Name = (string)item.Attribute(“NAME”);
info.ParentID = (int)item.Attribute(“PARENTID”);
info.Grade = (int)item.Attribute(“GRADE”);
info.IDX = (int)item.Attribute(“IDX”);
Lists.Add(info);
}
return Lists;
}
注:这里的实体类是不能缺少的
public class BasicInfo
{
public int ID { set; get; }
public string Name { set; get; }
public int ParentID { set; get; }
public int Grade { set; get; }
public int IDX { set; get; }
}
数据安全访问 篇6
关键词:ADO.NET; 数据库; DataSet; DataReader; DataAdapter
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30614-02
Research of Database Access Technology Based on ADO.NET Method
LI Yan
(Jingdezhen Ceramic Institute,Jingdezhen 333001, China)
Abstract:For the sake of much better and flexible developing the database application's softs, we need to study ADO.NET about database access mechanism and understanding the ways of the use of ADO.NET about the aspect of connecting to a database,operating and accessing data. ADO.NET has added many new objects and programming interface such as Dataset, DataReader,DataAdapter. It makes the operation of database simpler. This article introduces database access technology using ADO.NET method by explaining the principle of data exchange and the use of the model for data access object.
Key words:ADO.NET; Database; DataSet; DataReader; DataAdapter
1 引言
数据库应用软件在计算机应用领域占有相当大的比重,其应用范围已经越来越广泛,无论是办公自动化、生产流程控制、局域网、Intranet/Internet以及各种各样的管理系统都离不开数据库。
在对一个数据库应用程序进行开发时,从开发者的角度而言,首要的技术环节就是要解决如何访问数据库。只有解决好这个问题,我们才能更加方便高效的使用数据库应用软件。
但是当今数据库种类众多,几乎每一种数据库都有自己的数据格式,要想访问这些数据就必须依靠特定数据格式的驱动程序,而这些驱动程序在使用上的千差万别,又为数据库应用软件的开发带来了不少麻烦。
为了解决这个问题,微软开发出了ADO,这是一组COM(Component Object Model)组件。它通过一个易于使用的封装类提供对底层数据的访问,从而使得对数据库的操作更加简单。ADO.NET则是在ADO基础上开发出的数据访问框架的最新产物,它是.NET框架的一部分,ADO.NET比ADO的功能更加强大,是在.NET代码中访问数据库的最好工具。深入研究ADO.NET的数据库访问技术对于数据库应用软件的开发具有十分重要的意义。
2 ADO.NET的体系结构
就其本质而言,ADO.NET是支持数据库应用程序开发的数据访问中间件。ADO.NET建立在.NET Framework提供的平台之上。它是使用Microsoft .NET Framework中的托管代码构建的,这意味着它继承了.NET执行时环境的健壮性。ADO.NET主要是用来解决Web和分布式应用程序的问题,它由.NET Framework(提供了对.NET应用程序的数据访问和管理功能)中的一组类或命名空间组成。
ADO.NET是用来处理基于Web应用程序所需的无连接计算环境。无连接的设计支持ADO.NET方便地伸缩企业应用程序,因为在每个客户机系统和数据库之间并没有使用开放连接。而是在开始客户端连接时,暂时打开一个到数据库的连接,从数据库服务器中检索需要的数据,然后关闭连接。客户端应用程序然后使用与数据库服务器所维护的数据存储完全独立的数据。客户端应用程序可以定位数据的子集,修改该数据,并将该数据一直缓存在客户机中,直到应用程序指示将所有变化传回到数据库服务器。这时会暂时打开一个到服务器的新连接,对客户端应用程序所作的所有修改都被传回到更新批处理中的数据库,同时关闭连接。
支持这种无连接环境的核心ADO.NET组件是DataSet。DataSet本质上是一个缩小的内存中数据库,它的维护独立于后台数据库。只有在填充DataSet或者将DataSet中的数据变化传回到数据库时,才会打开到数据源的连接。这种无连接的计算环境将系统开销最小化,并改进了应用程序的吞吐量和可伸缩性。ADO.NET DataSet提供的内存中数据库提供了在成熟的数据库中可以找到的许多功能,包括支持数据关系、创建视图的能力、支持数据约束以及外键约束。
在ADO.NET设计中,支持无连接的、基于Web的应用程序是其中一个重要特性,然而,这并不是ADO.NET的全部功能。无连接模式也可以用于Web应用程序,但它并不是客户端/服务器和桌面应用程序的最佳模式。当在连接方式下运行时,可以更好更高效地实现这些类型的应用程序。为了支持这种连接风格的计算,ADO.NET提供了DataReader对象。DataReader主要使用连接方式提供了快速只向前的游标风格的数据访问。虽然DataSet提供了无连接的Web应用程序的基础,但DataReader支持桌面和客户端/服务器应用程序所需的快速连接风格的数据访问。
3 ADO.NET访问数据库的模式
Windows平台下的ADO.NET主要有3种访问数据库的模式,分别为OLEDB模式、ODBC模式和SQLCLIENT模式,另外还有其他数据访问模式,如对Oracle数据库的访问可以使用专用的Oracle模式。
3.1 OLEDB模式
OLEDB模式主要用于访问OLEDB所支持的数据库。OLEDB是Microsoft公司开发的一种高性能的、基于COM的数据库访问技术,OLEDB和其他Microsoft公司数据库技术的不同之处在于其提供通用数据访问的方式。OLEDB数据提供程序通过OLEDBConnection对象提供了使用OLEDB公开数据源的连接,以及与Microsoft SQL Server的连接。
3.2 ODBC模式
ODBC模式主要用于访问ODBC所支持的数据库,它是Windows平台的一种通用数据访问方式。一般在Windows平台下存在的数据库都可以通过建立系统DSN来实现对数据库的调用。
3.3 SQLClient模式
SQLClient只用于访问MS SQL Server数据库,是ADO.NET中比较特殊的组件。当然,MS SQL Server也是OLEDB和ODBC所支持的,因此也可以通过OLEDB和ODBC模式来访问MS SQL Server,但实验证明对访问MS SQL Server来说,采用SQLClient模式比OLEDB和ODBC模式效率更高,所以使用MS SQL Server作为数据库开发应用程序时,最好使用SQLClient模式访问。
4 ADO.NET的主要对象
ADO.NET中有很多重要的对象。这些对象主要实现两个主要的功能:(1)数据访问:用于访问数据库中数据和操作数据库的类型;(2)数据表示:用于包含数据库数据(如数据表)的类型。这两种类型之间联系密切,在数据库开发中两种类型都会用到。
ADO.NET包含很多重要的对象,其中Connection,Command,DataReader, DataAdapter是数据访问类,其他的如:DataSet,DataTable, DataView等是数据表示类。通过使用这些对象,使得对数据库的操作更加简单。
4.1 Connection对象
在 ADO.NET 中,使用 Connection 对象连接到特定的数据源。使用的 Connection 对象取决于数据源的类型。创建Connection对象时,应在连接字符串中提供与DBMS通信必要的信息,如数据库的位置、用于认证的用户名和密码以及要访问的DBMS中的数据库。
所有其他ADO.NET数据访问类都依靠Connection与数据库进行通信。
数据库连接只在传输数据时才打开,因此创建Connection实例时并不自动连接数据库。Connection定义了Open()和Close()方法,用于控制连接何时可用。
4.2 Command对象
Command对象提供与数据库交互的主要方法。可以用Command对象来执行SQL语句、运行存储过程等。
要使用Command对象执行命令,有三种选择,有些命令不返回结果,这种情况下就可以使用Command.ExecuteNonQuery()方法;有些命令返回一个结果,就需要使用Command.ExecuteScalar()方法;如果是返回多行命令,就应用Command.ExecuteReader()方法。
对于不同的数据库调用模式,使用的Command是不同的,对应的Command要与其对象模式相对应。
4.3 DataReader对象
使用DataReader可以从数据库返回一个只读的、仅能向下滚动的串流(Stream),而且当前内存中每次仅存在一条记录。
在程序开发的过程中,开发人员经常需要执行一些简短的操作,比如访问单独的用户名和密码。在执行这些操作时,就可以直接使用DataReader对象。
使用DataReader对象时,首先必须调用DataReader.Read()方法选择结果集中的一行,再不断调用该方法来移动DataReader,获取数据信息。获取到一行时,Read()方法返回True;否则返回False。
4.4 DataAdapter对象
在ADO.NET的核心数据访问对象中,最后一个是DataAdapter。
DataAdapter用于从数据源检索数据并填充到DataSet中的表,它还将对DataSet的更改解析回数据源。DataAdapter使用.NET Framework数据提供程序的Connection对象连接到数据源,并使用Command对象从数据源检索数据以及将更改解析回数据源。
DataAdapter最常用的两个方法是DataAdapter.Fill()和DataAdapter.Update()。Fill()方法从数据库中获取数据;Update()方法更新数据库中的数据。这两个方法都可以用于数据集或单个数据表。
4.5 DataSet对象
DataSet是ADO.NET的核心,它是从数据源中检索到数据在内存中的缓存,处理从数据存储中读出的数据,并以离线方式存在于本地内存中。可以使用相同的方式来操作不同数据来源取得的数据。不管底层的数据库是SQL Server还是Oracle,DataSet的行为都是一致的。
在DataSet中可以包含任意数量的DataTable,且每个DataTable对应一个数据库。一般来说,一个对应DataTable对象的数据表就是一组DataRow与DataColumn的集合。可以使用这些对象与DataRelation对象互相关联。
DataSet可将数据和架构作为XML文档进行读写。数据和架构可通过HTTP传输,并在支持XML的任何平台上被任何应用程序使用。开发人员可以使用WriteXmlSchema方法将架构保存为XML架构,并可以使用WriteXml方法保存架构和数据。若要读取既包含架构又包含数据的XML文档,可以使用ReadXml方法。
5 ADO.NET的运行模式
ADO.NET的运行模式主要分为以下几个步骤:(1)用户通过Web方式查寻数据库时,调用一个ASPX过程;(2)在ASPX网页的代码中使用ADO.NET的Command对象对数据执行查询操作;(3)对数据库的访问首先建立在连接并执行查询命令,然后从数据库中读取数据;(4)数据被存放在DataSset对象中,从数据库返回的是只读的信息;(5)将这些信息显示在页面上;(6)断开与数据库的连接。
6 结束语
ADO.NET集合了所有用于数据处理的类,是.NET数据库应用程序最终的解决方案,正在成为现今数据库开发的一种潮流,并代表了未来技术发展的方向。由于目前网络数据库是主流,ADO.NET在其运行效率、存取速度以及网络负载平衡等方面的均衡表现,使得它具有顽强的生命力。在进行数据库应用软件开发中,使用ADO.NET可以极大的帮助你以一种更加高效的方式来构建并完成任务。
参考文献:
[1]David Sceppa. ADO编程技术[M]. 北京:清华大学出版社,2001.
[2]张跃廷,韩阳,张宏宇. C#数据库系统开发实例精选[M].北京:人民邮电出版社,2007.6.
数据安全访问 篇7
1 访问控制策略概述
访问控制 (Access Control) 是指通过某种途径, 允许或限制主体访问客体能力以及范围的一种方法。信息系统通过实施访问控制, 可以限制对关键资源的访问, 防止非法用户的侵入或因合法用户的不慎操作而造成的破坏。访问控制策略是一套规则, 用于确定主体访问客体是否得到允许。传统的访问控制方法主要有自主访问控制 (DAC) [1]和强制访问控制 (MAC) [2], 它们都是主体与客体直接发生关系的访问控制方法, 强制访问控制的安全性更高。这两种方法在访问控制要求比较简单的系统中应用广泛。
Bell-La Padula模型[1]是多级系统中最常用的强制访问控制模型, 我们把系统中的对象称为客体 (O b j e c t) , 用户称为主体 (Subject) , λ (o) 、λ (S) 分别代表客体和主体的标签, 标签包含两个元素, 密级C (Class) 和范畴G (Gategory) , 因此它是一个二元组 (C, G) , 其中密级C是可以比较大小的序列, 而范畴G则是一个范围的集合。标签之间的关系有两种:支配与不可比。一个级别λ1支配另一个级别λ2当且仅当C1≥C2并且GlG2, 记为λ1≥λ2 (或λ2≤λ1) 。如果两个级别不存在支配关系, 则它们不可比。
2 角色访问控制分析及其改进
角色访问控制 (R B A C) 通常被认为是对传统的自主访问和强制访问控制 (D A C和M A C) 的一个很有前途的两者选一, 即是它是一种中性策略, 近些年的研究已经使R A B C日趋成熟, 在R A B C模型中可以表示D A C和M A C模型。R B A C和以前的访问控制相比, 它通过增加了角色 (R o l e) 和许可 (Permission) 。并且围绕着角色这个新的概念来实施访问控制的策略。不同的角色和它所应具有的权限相联系, 而用户成为某些角色的成员, 这样用户便获得了这些角色的权限。角色根据实际单位或组织的不同工作职责来划分, 依据用户所承担的不同的权利和义务来授予相应的角色。R B A C模型中一般的体系是R B A C 9 6, 该模型是Sandhu等人提出的[3]。
安全数据库的特权管理比较复杂, 特别是引入了B L P模型后, 为了保证信息流符合强制访问控制的要求, 需要对特权进行更严格的管理。基于角色的访问控制模型 (R B A C) 能简化系统的特权管理。R B A C本身既没有自主特性, 也没有强制特性, 可以用来模拟自主和强制访问控制。角色是特权的集合, 而特权是客体的操作集合, 系统给特权对应的客体分配了标签, 使得特权也有了标签。这时特权与用户之间的联系将受到标签关系的限制。因此我们需要一个特殊的模型, 既可以使用R B A C模型的功能, 又要实现强制访问控制策略。
3 改进的角色访问控制模型ERBAC-M
本文提出一种改进的角色访问控制模型E R B A C-M, 该模型借鉴了文献[4]中多级角色和内部角色的概念, 并对其进行改进和扩充。
数据库管理系统的核心是数据, 而数据是以记录的形式存放在关系中的。为了方便讨论, 我们采用一种比较简单的安全数据库模型:假设安全数据库中的客体只有数据库 (D) 、关系 (T) 和记录 (E) , 其中数据库是关系的容器, 关系又是记录的容器:E∈T, T∈D。多级安全数据库的强制访问控制粒度为记录级, 也就是说具有标签的客体的最小单位是记录。
数据库管理系统的特权一般可以分为四类:读 (Pr) 、生成 (Pi) 、删除 (Pd) 和修改属性 (P u) 。根据严格B L P模型, 如果用户的标签支配客体, 则他可以被授予该客体的读特权;写客体的过程就是处理更小粒度客体的过程。如果用户的标签支配客体, 那么他就可以被授予客体的生成特权, 但是对于删除和修改操作为了保证信息的流动符合严格B L P模型的要求, 只允许能观察到客体的最低安全级的用户来执行, 也就是与客体同级的用户[4]。
模型增加了内部角色与多级角色的概念, 并引入审计机制后传统的R B A C扩展图中的结构。与传统的R B A C相比, 新模型的角色集合被分成了两个子集—多级角色集和内部角色集, 其中多级角色集代替了原来角色集的位置, 与其它组件的关系仍然与传统的R B A C一样。内部角色对管理员和用户是透明的, 它由系统根据需要创建或删除。
管理员在分配特权时, 只针对多级角色进行。审计将分为三个部分:会话审计、管理审计和对象审计。
4 结语
本文的基于角色的强制访问控制模型E R B-M A C是在李斓、冯国登等人提出的一种M A C与R B A C的综合模型[4]的基础上形成的, 该模型借助于多级角色与内部角色的转换, 将R B A C应用于多级安全系统, 提高了模型的安全性, 完善了模型的安全管理。
参考文献
[1]R.Sandhu, Relational Database AccessControls[M].Handbook of InformationSecurity Management, AuerbachPublishers, 1994:145~160.
[2]R.Sandhu, Mandatory Controls for Da-tabase Integrity[J].In Proc.of the IFIPGG11.3 Workshop on DatabaseSecurity, Monterey, Colifornia, 1989.
[3]Ravi Sandhu.Rationale for the RBAC96family of access control models.InProceedings of the 1st ACM Work-shop on Role-Based Access Control.ACM, 1997.
数据安全访问 篇8
计算机技术的发展改变了人类工作及生活方式, 使其成为高效管理的手段, 促进计算机数据库领域研究的进展。计算机网络的广泛应用有其积极的一面, 但也出现一些问题, 网络开放性与信息安全性的矛盾一直存在。数据库远程访问的安全逐渐成为研究热点, 如非法访问、黑客攻击、数据篡改等安全问题的存在对于网络系统安全构成了极大威胁。
2 数据库安全代理访问
为实现数据库的安全访问, 在数据库传统访问方式中以代理形式添加加密、认证及防火墙等安全技术, 组成数据库新的访问结构。
2.1 系统总体结构
数据库安全访问代理主要用于对用户身份进行认证, 以及为数据库访问提供传输加密等服务, 用户对数据库的访问请求都需要利用数据库安全访问代理向其需要目的地转发。服务器端接收用户数据库访问请求后, 运行数据库相应服务后向客户传送访问结果。
数据库访问请求根据协议格式向数据报提供至数据认证客户端, 由数据认证客户端根据协议格式提供访问结果。
数据加密认证工作由客户端完成, 实现强大数据加密功能以确保数据安全。通过客户端发出的数据库访问请求由服务器接收, 该请求经客户端加密。解密后数据传至代理服务器, 结果执行完毕返回后加密回送客户端。
由上述描述可知代理系统处于广域网中, 数据库访问中广域网是最薄弱环节, 易出现各种安全问题。广域网通过代理后传输加密数据, 通过认证签名技术可有效避免窃取篡改数据, 使系统数据安全性有效提高。向数据库服务器提出代理客户数据访问请求由数据库访问代理服务器实现, 接受应答后执行相应数据库操作。
2.2 安全访问代理特点
在数据库与具体应用之间, 安全访问代理起到数据库中间件的作用。在代理系统中实现对访问请求的控制管理, 并与数据库结合实现充分发挥其性能的目的。如数据库连接池的建立就是克服传统的C/S结构弊端, 具有可重用、灵活、易管理维护等优点。远程过程调用中间件在C/S计算上, 具有客户机的灵活性, 使其比数据库中间件在更复杂的C/S计算环境中广泛应用。
2.3 安全访问代理作用
安全访问代理由系统接收访问请求后, 将对数据库的访问请求映射至代理系统, 系统对这些请求不进行复杂处理, 结合代理能实现安全控制的特征, 以及对外接收数据库访问的请求。数据库系统对代理访问请求接受后实现隔离与安全保护。另外, 还能加到其它己应用的信息系统中, 使系统安全性明显提高。
2.4 防火墙
目前网络最严重的问题是黑客攻击, 其后果造成信息被窃取、系统瘫痪甚至网络堵塞。数据库安全访问代理能够实现应用级网关防火墙功能, 使数据库在广域网中得到保护, 通过代理服务器完成对数据库的访问。代理服务器运用防火墙技术实现对黑客攻击的抵御, 同时结合数据加密与身份认证等安全技术提高系统安全性。
同时位于同一局域网中的代理服务器与数据库能够有效避免广域网中的用户访问及非法攻击, 起到保护数据安全的重要作用。
2.5 SSL加密认证技术
在代理系统中的数据加密、身份认证与签名等安全措施都是通过SSL技术来实现。应用程序一般采用IPC与各层次安全协议进行通信, 并工作于不同传输层协议中。
2.6 多层结构
为避免因传统C/S结构的不足对系统应用造成的不利影响, 出现了一种分割式应用程序, 即三层 (N层) C/S模型结构。应用程序被系统分割为不同逻辑组件, 主要分为用户服务、业务处理与数据服务三层。因安全访问代理加入系统而形成多层结构, 应使其单独形成一层, 利用标准数据库访问接口与其它层连通, 提高系统灵活性, 使数据安全访问代理的设计复杂性大大降低。
2.7 ODBC技术
ODBC对众多数据库的支持与操作的主要愿意是因目前主流的多数数据库都是基于关系数据库的基础。其基本思想是提供相对独立的程序以利于数据信息提取, 并对应用程序实现数据的有效输入方法。其接口具有互操作性的优势, 使软件设计师可在非特定数据源条件下建立基于ODBC应用的相应程序。同时在应用程序方面, 为使各驱动程序与数据源都能实现对ODBC函数的调用与SQL语句集的支持, 其接口对级别进行了一致性定义, 使ODBC API与ODBC SRL语法实现一致。
2.8 应用透明性
对数据库的具体应用是否采用数据库安全访问代理与其对数据库采用何种访问方法无区别称为安全代理访问应用透明性。技术透明性能够实现向上继承, 这是其最大的优点。应用透明性主要是采用标准数据库访问技术进行实现的, 对数据库的任一访问操作都是通过访问代理系统映射为同一数据库访问而进行实施的, 由于映射的一一对应, 原开发的应用程序不需做任何改动, 这也使系统方案设计的灵活性大大提高。
2.9 数据压缩传输
数据传输在安全访问代理中主要是利用因特网来实现的, 因特网带宽比局域网窄很多, 很容易造成数据库访问拥塞, 对数据库效率产生不小影响。因此, 可通过采用数据压缩传输方式进行解决, 数据压缩是SSL的重要组成部分, 这样可在一定程度上提高数据传输效率, 目前压缩比基本上可达到四比一左右。
结束语
计算机网络发展至今, 黑客攻击、数据窃取等已覆盖几乎所有的信息系统, 这些安全问题需要加强安全控制及培训, 提高安全意识。目前, 可基于数据库安全访问代理相关技术在数据与其应用间建立一个数据库访问多层结构, 能够实现代理相对独立, 使系统复杂度有效降低。安全代理访问技术在一定程度上可提高数据库安全, 对于保护数据被非法窃取, 避免黑客攻击等具有积极的意义。
参考文献
[1]宋红君, 秦利波.数据库安全技术策略与多级安全代理模型[J], 华北科技学院学报, 2005.2.[1]宋红君, 秦利波.数据库安全技术策略与多级安全代理模型[J], 华北科技学院学报, 2005.2.
[2]贺达, 洪飞龙, 鄢田云等.数据库应用系统中安全代理的研究与实现[J].网络安全技术与应用, 2005, 2.[2]贺达, 洪飞龙, 鄢田云等.数据库应用系统中安全代理的研究与实现[J].网络安全技术与应用, 2005, 2.
[3]谷震离, 杜根远.SQLserver数据库应用程序中数据库安全性研究[J].计算机工程与设计, 2007.10.[3]谷震离, 杜根远.SQLserver数据库应用程序中数据库安全性研究[J].计算机工程与设计, 2007.10.
[4]金烨, 曹珍富.一个新的用于移动代理的签名方案[J].计算机工程, 2010.6[4]金烨, 曹珍富.一个新的用于移动代理的签名方案[J].计算机工程, 2010.6
[5]周世忠.浅谈网络数据库安全研究与应用[J].电脑知识与技术, 2010.5.[5]周世忠.浅谈网络数据库安全研究与应用[J].电脑知识与技术, 2010.5.
[6]汪新建, 罗绯, 李明.网络数据库的应用与安全认识[J].西南军医, 2009.1.[6]汪新建, 罗绯, 李明.网络数据库的应用与安全认识[J].西南军医, 2009.1.
数据安全访问 篇9
在ASP.NET平台下访问SQL Server数据库的安全。通过在位于6大网络安全榜首的SQL注入攻击的原理、特点和攻击方法基础之上, 寻找采取哪种相应的防范措施, 有效防止SQL Injection的同时寻找到最安全的读取数据的方法。
1 SQL 注入攻击
SQL Injection利用了应用程序数据库层的安全漏洞。根据微软技术中心等对其进行的描述:(l) 脚本注入式攻击,(2) 恶意用户输入用来影响被执行的SQL脚本。可知它是在输入的字符串之中注入SQL指令, 在设计不良的程序当中忽略了检查, 那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行, 攻击者利用这个漏洞可进行非法数据库操作, 控制操作系统或者服务器。分析如下实例其中主要是验证用户的登录名和密码:
string sqlCommand = " select * from Logins where username ='" + txbUsername.Text + " 'and password ='" + txbPassword.Text + " '" ;
输入正确的用户名和密码登录成功后, 则会提示Welcome:用户名。当攻击者填入O’Lea的用户名进行登录时, 会抛出SqlException异常, 显示Lea附件有语法错误。利用这些现象可在User Name文本框中输入’or 1=1--在Password文本框中输入任何数据或者不输入。SQL命令现为如下形式:
select * from Logins where username=’’or 1=1--‘andpassword= ‘’;
此刻在查询执行时就相当于select * from Logins whereusername= ‘’or 1=1; 因为SQL语法中字符串“--”相当于注释的意思。此表达式的结果始终为true。当攻击者发现此SQL注入漏洞以后在仅知道用户名的情况下即可非法登录网站。
当在User Name文本框中输入’having 1=1--时, 可以通过错误页面的提示, 即选择列表中的例‘Logins.username’无效, 因为该列没有包含在聚合函数或GROUP BY子句中。通过这条错误提示可以清楚地看到数据库的表名和列名。
在User Name输入:‘union select (select * from Loginsfor xml auto) ,’’from Logins --时, 通过查看HTML页面的源代码Logins表的所有内容会嵌入其中。通过此示例可以看出SQL注入攻击带来的危害性不言而喻。
2 安全访问数据库的方法
通过分析应用程序访问数据库时存在的SQL注入攻击隐患的分析, 可以针对性地提出以下几项解决方案。
2.1 参数化存储过程
注入式攻击漏洞产生的原因是通过字符串连接动态地构造查询, 使用参数化存储过程不仅仅过滤掉了危险字符, 还通过利用存储过程是存储在数据库里面的SQL集, 实现了对相应的数据访问权限的限制。
在数据库中构造如下存储过程:
CREATE PROCEDURE dbo.GetLogin
( @username varchar (25) , @password varchar (25))
AS SELECT * FROM Logins
WHERE username = @username ANDpassword = @password
在源代码中把存储过程的名称赋给Command对象并且告诉Command.CommandType对象调用的是一个存储过程,然后通过SqlParameter集合类型给参数 @username和 @password赋值。
SQLParameter的集合类型 , 它提供了类型和长度检查 ,并且自动转义用户输入。当调用存储过程时, 数据库将把赋值给parm. Value的输入看做文字值 , 所以不需要转义用户输入, SQLParameter也强制要求类型和类型长度。如果用户输入值与描述的类型和大小不一致, 代码将抛出一个异常。必须尽可能利用类型和长度检查, 通过强制的类型和长度检查限制用户输入数据。现在, 再次尝试之前的注入查询, 之前的副作用将不会再次产生。
2.2 限定 SQL 权限
Web应用程序不能具有完全控制数据库的权限 , 应该授予Web应用程序执行所需功能的最小特权和权限。例如当在做一个 报表应用 程序时 , 就可以不 用赋予其INSERT、DELETE等其他权限, 通过使攻击者因缺乏权限而将危害降到最低。对于数据库用户需要的权限, 可以通过角色来设置权限, 把权限设置在具体的角色上, 再次为该角色添加用户并授予权限。
CREATE ROLE auditors AUTHORIZATION db_owner//db_owner拥有了auditors的角色
EXEC sp_addrolemember‘auditors’,’afeila’ //添加用户帐//号afeila到auditors角色
GRANT EXECUTE ON GetLogin TO auditors //授予auditors组//角色存储过程权限
2.3 使用视图
当遇到访问数据的底层架构的情况时, 例如, 需要访问一些即席报告工具来直接访问架构 (表自身的结构), ObjectRelationship Mappingtoos (ORM) 同样不适合用于存储过程, 这时, 可用视图来加强安全性。之所以视图的访问权限与底层表的访问权限完全分隔开, 是因为视图一张虚拟不存在的表,是对表执行查询后的结果。
在一个包含 (员工编号、姓名、薪水) 的员工表 (employee) 中, 除了经理外不允许其他人查看数据, 这时在不使用存储过程情况下, 可以选择视图来限制访问。首先, 授予允许访问人员的访问权限 (Admini角色允许访问), 使用以下命令: GRANT SELECT ON employee To Admini
然后删除所有其他人的访问权限, 命令如下:
DENY SELECT ON employee To Public
但是当TechnicalSupport角色在完成一份报告时, 需要访问employee表的一部分时候, 就可以创建一个能够支持该表的视图。授予该角色访问视图的权限, 使用以下命令: CREATE VIEW employeeList创建视图employeeList。然后使用语句GRANT SELECT ON employeeList TO TechnicalSupport把视图的权限赋予相应的角色。这时, 所有属于TechnicalSupport角色的账户都可以使用这个视图来支持他们的报告了。
2.4 使用 LINQ 查询技术
ADO.NET是.NET Framework与数据库交互的关键组件 ,它提供统一的接口访问多种流行的数据库。在.NET 4.0以后,Microsoft将LINQ与ADO.NET结合, 利用LINQ的高效查询、类型安全等特点, 提供了更加丰富和高效的数据库查询操作。
LINQ (Language- Integrated Query, 语言集成查询 ), 使用C# 中引入的声名性语法编写的查询表达式, 使其成为C#中的一种元素, 将查询表达式作为C# 的一个对象, 在编程时直接使用LINQ, 当程序运行的时候, LINQ to ADO.NET把查询表达式转换成SQL语句并执行, 改变了SQL与数据库的交互方式, 最终以对象的形式将查询结果返回到应用程序中。
LINQ作为.NET 4.0的特性, 不仅仅能对服务器端数据库等外部数据源的查询, 最主要的是实现了对内存数据的查询和分析。主要包括3个组件如图1所示, LINQ to Object、LINQ to ADO.NET和LINQ to XML。其中LINQ to Object组件为LINQ的核心组件, 将查询表达式与C# 语言集成, 能够对实现了接口为IEnumerable
了解了LINQ的基本框架以后, 现在通过下面的一个客户搜索实例, 来探讨下如何通过LINQ to SQL来防护SQL注入式攻击。首先, 通过VisualStudio2012集成的O/R设计器, 创建数据库中有关数据的对象模型。在项目名称上选择“添加”|“新建项”, 在新打开的对话框中选择“LINQ to SQL类”, 输入项目名称即可向项目中添加了在O/R设计器下面的类。本示例中为UserLog.dbml文件。此时视图上没有任何数据。然后, 将“服务资源管理器”中的数据库表“Logins”, 拖拉到O/R设计器上 , 增加了一个名为UserLog.designer.cs的文件 ,这个文件以代码的形式定义了将要使用的类, 而不是编写代码直接与数据库进行交互。
在LinqTest.aspx页面, 执行下面的LINQ查询表达式。
GridView1.DataSource =from logins in db.Logins
where logins.username ==LinqUsername.Textselect logins.password;
在使用了LINQ to SQL之后, 如果我们将用户名输入作为查询值, 查找此用户的密码, 由LINQ在运行时生成并在服务器上执行的SQL语句看起来将会是如下这个样子:
SELECT [t0] . [username] , [t0] . [password]
FROM [dbo] . [Logins]
WHERE [t0] . [username] = @p0}
可以看出, WHERE子句自动被加上了参数, 因此, 用传统的SQL注入式攻击是无法造成破坏的。不管用户将什么值作为输入提交给搜索页面, 这个查询是安全的, 它不允许用户的输入执行服务器上的命令。如果输入了前面例子中用来实施SQL注入攻击的字符串, 查询并不会返回任何信息。
3 结语
数据安全访问 篇10
ASP.Net技术是一种用于创建Web应用程序的编程模型。运行时可以和.Net Framework类库集一起配合用于创建动态Web页。大多数ASP.NET Web应用程序都涉及数据访问。许多应用程序都会收集数据并将其存储在数据库或文件中, 要存储的数据通常基于来自用户的信息。由于原始数据可能来自不受信任的来源, 信息是以持久格式存储的, 并且希望确保未经授权的用户不能直接访问数据源, 因而需要特别注意与数据访问有关的安全问题。本文主要探讨从连接字符串、使用集成安全性连接到SQL Server/Microsoft Access数据库、XML文件等操作, 来提高Web应用程序中的数据访问的安全性。
2、连接字符串
在数据库的各种应用程序开发中, 连接数据库是数据库应用程序中最重要的一步。由于连接字符串可能包含敏感数据, 如数据库名、登录名、密码等, 因此连接字符串应当遵循以下若干准则:
(1) 将连接字符串存储在Web.config文件中
要避免通过声明SqlDataSource控件或其他数据源控件的属性的方式来设置连接字符串, 而应当将连接字符串存储在站点的Web.config文件中。这种做法有两个有点: (1) 数据源控件可以从配置文件中引用连接字符串的名称, 而不是包括连接字符串作为控件属性; (2) 由于连接字符串的管理集中进行, 在连接字符串信息更改时无需重新访问各页, 因此更易于管理站点。
(2) 加密连接字符串
使用ASP.NET IIS注册工具 (Aspnet_regiis.exe) 可以加密连接字符串。Aspnet_regiis.exe工具位于%systemroot%Microsoft.NETFramework版本号的文件夹中。在Windows命令行, 使用以下选项运行:
-pe选项, 向其传递字符串"connectionStrings"以加密connectionStrings元素。
-app选项, 向其传递应用程序的名称。
下面的代码示例演示如何为名为SampleApplication的应用程序加密Web.config文件的connectionStrings节。
当该命令完成时, 可以查看Web.config文件的内容。connectionStrings配置节将包含加密信息而不是明文形式的连接字符串, 这样就保证在使用数据源控件时连接字符串的安全。
(3) 不要以纯文本形式存储连接字符串
为了确保与数据库服务器之间的连接的安全性, 应当使用受保护的配置来对配置文件中的连接字符串信息进行加密。
ASP.NET应用程序中存储敏感信息的主要位置之一是Web.config文件。为了帮助保护配置文件中的信息, ASP.NET提供了一项称为“受保护配置”的功能, 可以使用受保护配置来加密Web应用程序配置文件 (如Web.config文件) 中的敏感信息 (包括用户名和密码、数据库连接字符串和加密密钥) 。对配置信息进行加密后, 即使攻击者获取了对配置文件的访问, 也可以使攻击者难以获取对敏感信息的访问, 从而改进应用程序的安全性。
例如, 未加密的配置文件中可能包含一个指定用于连接到数据库的连接字符串的节, 如下面的示例所示:
可以通过使用ProtectedConfigurationProvider类对Web.config文件的内容进行加密和解密, 使用受保护配置对连接字符串值进行加密的配置文件不以明文形式显示连接字符串, 而是以加密形式存储它们, 在对页进行请求时, .NET Framework对连接字符串信息进行解密, 并使其可供应用程序使用。
3、连接数据库
连接Sql Server数据库应该遵循以下安全性原则:
(1) 使用集成安全性连接到SQL Server
使用集成安全性, 而不要使用显式的用户名和密码连接到SQL Server实例, 这有助于避免危及连接字符串的安全以及泄漏用户ID和密码。因此要确保运行ASP.NET的进程的标识是默认进程帐户或受限用户帐户。如果不同的网站连接到不同的SQL Server数据库, 那么使用集成安全性可能并不实际。例如, 在Web宿主网站中, 通常会为每个客户分配一个不同的SQL Server数据库, 但所有用户均以匿名用户的身份使用Web服务器。在这种情况需要使用显式凭据来连接到SQL Server实例。
(2) SQL Server数据库权限
为用来连接到应用程序所使用的SQL Server数据库的用户ID分配最低特权。
(3) 限制SQL操作
数据绑定控件可以支持各种数据操作, 包括在数据表中选择、插入、删除和更新记录等。将数据控件配置为仅执行页上或应用程序中所需的最低功能。例如, 如果控件不应该允许用户删除数据, 则不要在数据源控件中包括删除查询, 也不要在控件中启用删除功能。
(4) SQL Server Express Edition
在将某个进程附加到SQL Server Express Edition数据库 (.mdf文件) 时, 该进程必须具备管理权限。通常情况下, 这种做法使得SQL Server Express Edition数据库不适合用在成品网站上, 因为ASP.NET进程不会 (也不应当) 使用管理特权运行。因此, SQL Server Express Edition数据库只能用于下面的情况中:
(1) .在开发Web应用程序时用作测试数据库。在准备好部署应用程序时, 可以将数据库从SQL Server Express Edition转移到SQL Server的成品实例中。
(2) .如果正在运行可以使用模拟功能的网站并且可以控制所模拟的用户的特权, 那么可以使用该版本。实际上, 此策略仅当应用程序运行于局域网 (而非公共网站) 上时才可行。
(3) .将.mdf文件存储在站点的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。还应在IIS中将.mdf扩展名映射到ASP.NET, 并在站点的Web.config文件中使用以下元素将该扩展名映射到ASP.NET中的HttpForbiddenHandler处理程序:
(5) Microsoft Access数据库
Microsoft Access数据库 (.mdb文件) 所包括的安全功能比SQL Server数据库少。对于商务网站, 尽量不要使用Access数据库。但是, 如果确实需要在Web应用程序中使用.mdb文件, 请遵循以下准则:
(1) .将.mdb文件存储在站点的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。还应在IIS中将.mdb扩展名映射到ASP.NET, 并在站点的Web.config文件中使用以下元素将该扩展名映射到ASP.NET中的HttpForbiddenHandler处理程序:
(2) .为读写.mdb文件的用户帐户添加适当的权限。如果网站支持匿名访问, 这通常是本地ASPNET用户帐户或NETWORK SERVICE帐户。由于Access必须创建一个.ldb文件以支持锁定, 因此用户帐户必须对包含.mdb文件的文件夹具备写权限。
(3) .如果数据库采用密码保护, 那么不要使用AccessDataSource控件来建立与数据库的连接, 因为AccessDataSource控件不支持凭据的传递。在这种情况下, 应使用ODBC提供程序和SqlDataSource控件, 并在连接字符串中传递凭据。
4、XML文件
如果将数据存储在XML文件中, 则应将XML文件放在网站的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。并且需要防止恶意用户输入, 如果应用程序要接受用户输入, 则需要确保输入中不包含可能危及应用程序的恶意内容。恶意用户输入可用于发动下面两类攻击:
·脚本注入攻击
脚本注入攻击尝试向应用程序发送可执行的脚本, 意欲使其他用户运行该脚本。典型的脚本插入攻击是向数据库中存储脚本的页发送脚本, 以使查看数据的其他用户在不经意间运行该代码。
·SQL注入攻击
SQL注入攻击尝试创建SQL命令以取代或扩充应用程序内置的命令, 从而危及数据库 (可能还有运行数据库的计算机) 的安全。
对于所有用户输入, 请遵循以下准则: (1) 尽可能使用验证控件, 以限定用户输入可接受的值。 (2) 在运行服务器代码之前, 请始终确保IsValid属性的值为true。如果值为false, 则意味着一个或多个验证控件未通过验证检查。 (3) 应始终执行服务器端验证 (即使浏览器也执行客户端验证) 以防止用户跳过客户端验证环节。对于CustomValidator控件尤其应如此;不要使用“仅客户端验证”逻辑。 (4) 始终在应用程序的业务层再次验证用户输入。不要依赖于调用进程来提供安全的数据。例如, 如果正在使用ObjectDataSource控件, 则可向执行数据更新的对象添加冗余验证和编码。
若要避免脚本注入攻击, 请遵循以下准则: (1) 采用HtmlEncode方法对用户输入进行编码, 该方法可将HTML转换为文本表示形式 (例如, 将<b>转换为<b>) , 这有助于防止在浏览器中执行标记。 (2) 在使用参数对象将用户输入传递给查询时, 可以为数据源控件的预查询事件添加处理程序并在这些事件中进行编码。例如, 如果处理SqlDataSource控件的Inserting事件, 可以在该事件中, 在执行查询之前对参数值进行编码。 (3) 若正在使用带绑定字段的GridView控件, 则可将BoundField对象的HtmlEncode属性设置为true。这会使GridView控件在行处于编辑模式下时对用户输入进行编码。 (4) 对于可以进入编辑模式的控件, 就使用模板。例如, GridView、DetailsView、FormView、DataList和Login控件可以显示可编辑的文本框。但是, 除GridView控件之外, 这些控件不会自动验证用户输入或对用户输入进行HTML编码。因此, 要为这些控件创建模板, 在模板中包括输入控件 (例如TextBox控件) 并添加验证控件。此外, 在提取控件的值时, 应对其进行编码。
若要避免SQL注入攻击, 请遵循以下准则: (1) 不要通过将字符串 (尤其是那些包括了用户输入的字符串) 串联在一起来创建SQL命令, 而应当使用参数化查询或存储过程。 (2) 如果要创建参数化查询, 则可使用参数对象来建立参数的值。
5、缓存与加密视图状态数据
在启用了客户端模拟并根据客户端标识检索数据源中的结果时, 应避免在Cache对象中存储敏感信息。如果启用了缓存, 则单个用户的缓存数据会被所有用户看到, 并且敏感信息可能公开给有害源。如果identity配置元素的impersonate特性设置为true且对Web服务器上的应用程序禁用匿名标识, 则说明启用了客户端模拟。
数据绑定控件 (例如GridView控件) 有时需要保存被视为敏感内容的信息。例如, GridView控件可能要在DataKeys属性中维护一个键的列表, 即使该信息并不显示。在往返行程之间, 控件会将该信息存储在视图状态中。因此要对视图状态信息进行编码, 并与页的内容一起存储, 未经授权的源无法解码和查看视图状态信息。如果必须在视图状态中存储敏感信息, 可以要求页对视图状态数据进行加密。若要加密数据, 请将页的ViewStateEncryptionMode属性设置为true。
6、总结
尽管遵循编码和配置最佳做法可以提高应用程序的安全性。但还有一点也很重要, 那就是应经常执行Microsoft Windows和Internet信息服务 (IIS) 的最新安全更新以及Microsoft SQL Server或其他数据源软件的所有安全更新, 以使Web服务器始终保持在最新状态。
摘要:数据访问在Web程序中占有十分重要位置, 其安全性也决定着整个Web系统的安全。文章就基于ASP.NET数据访问的安全性问题进行了详细的阐述, 主要探讨从连接字符串、使用集成安全性连接到SQL Server/Microsoft Access数据库、XML文件等操作, 来提高ASP.NET Web应用程序中的数据访问的安全性。
关键词:ASP.NET,数据访问,安全性
参考文献
[1]KAUFFMAN J, THANGARATHINAM T.ASP.Net数据库入门经典[M].4版.肖奕, 译.北京:清华大学出版社, 2007.
[2]LIBERTY J, HURWITZ D.Programming ASP.Net中文版[M].3版.瞿杰, 赵立东, 张昊, 等, 译.北京:电子工业出版社, 2008.
数据安全访问 篇11
摘 要:Visual Basic 作为一种流行的编程软件,凭其简单易学得到初学者的青睐并被广泛应用。VB主要提供了三种数据访问技术,包括 DAO数据访问模式、远程数据对象RDO模式以及基于开放式数据源 ODBC的ADO数据访问技术,本文通过对以上几种数据库访问技术的分析比较,提出ADO技术的优势。
关键词:VB DAO RDO ADO
中图分类号:TP311.13 文献标识码:A 文章编号:1673-8454(2009)13-0083-02
Visual Basic(简称VB)是微软公司推出的可视化编程工具之一,是目前世界上使用比较广泛的RAD(Rapid Application Develop)工具。VB在数据库应用开发方面的能力十分强大,并且微软还设计了多种数据访问的方法。数据访问是通过数据访问接口实现的,数据访问接口是数据提供方和使用方的中介,没有合适的数据访问接口,就无法进入数据库。VB访问数据库的方法很多,本文重点介绍DAO,RDO和ADO这三种常见的数据库访问的方法。
一、VB中数据的访问技术简介
1.DAO(Data Access Objects) 数据访问对象
DAO是允许程序员操作Microsoft Jet数据库引擎的第一个面向对象的接口,最初是为了实现对ACCESS 数据库的访问而开发的程序接口。它采用层次结构,提供了丰富的数据对象,通过DAO/Jet功能可以访问ISAM(顺序索引查找方法)数据库,使用DAO/ODBC Direct功能可以实现远程RDO功能,DAO可通过ODBC像直接连接到其他数据库一样,直接连接到Access数据库,但DAO不能触发事件。
DAO提供了管理系统所需的全部操作的属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等工具。在操作中VB把DAO模型封装成Data控件,通过设置相应的DatabaseName属性和RecordSource属性就可以将Data控件与数据库中的记录源连接起来了,这样就可以使用Data控件来对数据库进行操作。DAO最适用于单系统应用程序或在小范围本地分布使用,所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。
2.RDO(Remote Data Objects) 远程数据对象
RDO是一个到ODBC的、面向对象的数据访问接口。它依赖 ODBC API、选定的 ODBC 驱动程序以及后端数据库引擎实现大部分的智能和功能。它具备DAO的基本功能,保持了DAO的简单特点,是专为访问远程ODBC关系数据源而设计的。它同易于使用的DAO style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。
VB从5.0版本开始使用RDO接口访问远程数据库,和DAO一样,在VB中也把其封装为RDO控件,其使用方法与DAO控件的使用方法完全一样。虽然DAO也可以访问远程数据库,而且可以通过使用ODBC Drivers 代替DAO/jet 显著提高数据访问速度,但是,在使用ODBC Drivers时,将无法使用某些 Microsoft Jet数据库的功能,因此,从VB5.0开始,大多使用RDO访问远程数据库。RDO适合开发一些大的关系数据库,如SQL Server、Oracle等,特别适用于用户/服务器应用程序的开发。
3.ADO(ActiveX Data Object)Active数据对象
ADO是DAO和RDO的后继产物,它设计为一种极简单的格式,即通过ODBC的方法同数据库接口,可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件,是一个便于使用的应用程序层接口。ADO是为Microsoft最新和最强大的数据访问范例OLE DB而设计的,OLE DB是新的底层接口,程序中使用了大量的COM接口,而ADO封装了这些接口,时下流行的快速应用程序开发工具、数据库工具、应用程序开发环境和脚本语言都可以访问这种接口。
从VB6.0开始使用ADO进行数据访问,ADO是基于面向对象模型的访问技术,用它产生的应用程序占用内存少,目前已经成为当前数据库开发的主流。它适合于各种客户/服务器应用系统和基于 Web 的应用系统中,尤其在一些脚本语言中访问数据库操作是ADO的主要优势。由于ADO 的设计综合了RDO和DAO的最佳性能,它的语法简单,非常易于学习,因此,ADO正在逐渐代替DAO与RDO的数据访问接口。
二、数据库访问技术对比分析
DAO是用来实现访问Access数据库的Jet引擎接口,其操作是针对记录和字段,它对于单一的数据库应用系统非常有效;RDO是用来访问ODBC面向对象的接口,其操作针对行和列,主要用于开发大型关系数据库应用程序;ADO访问数据库是通过访问OLE DB数据并提供程序来进行的,能够处理任何类型的数据,是一种通用的数据访问范例。
1.数据库对象模型的差异
DAO 模型是设计关系数据库系统结构的对象类的集合,是一种Jet数据库引擎的面向对象的接口。Microsoft DAO Jet 数据库中包括有DB Engine对象、Workspace对象、Database对象等,最顶层的对象是 DB Engine对象,模型中其他对象都是DBEngine 对象的“子”对象。RDO 模型与DAO模型很相似,最明显的区别是RDO对象模型中包括有RDO Engine对象、RDO Environment对象、RDO Connection对象等14 个可供使用的主要对象。
ADO模型可以看作是RDO模型的精华版,它扩展了DAO和RDO所使用的对象模型,它包含较少的对象、更多的属性方法参数以及事件。模型中只有3个对象成员Connection、Command、Recordset,以及几个集合对象Error、Parameter、Field和Property等。
2.访问数据库方式的不同
DAO 技术主要实现对ISAM类型数据库的访问,如对Foxpro、Access、DBase等数据库的访问,并允许Visual Basic开发者通过ODBC直接连接到Access表,这是一种最为简便的访问已有数据库的方法,在VB 6.0中实现得非常巧妙。DAO Jet服务的另一个优势就是它包含了自己的查询引擎,即不需要远程的或基于服务器的数据库系统(如SQL Server或Oracle)的支持就能完成数据请求。如果程序需要在单机环境下运行,DAO Jet数据服务是最好的选择。
ADO技术基于通用对象模型(COM),它提供了多种语言的访问技术,同时,由于ADO提供了访问自动化接口,所以,ADO可以用描述的脚本语言来访问VBScript,VCScript等。
DAO、RDO、ADO数据访问技术的区别如表1所示。
三、VB访问数据库的原则
在数据访问接口中三种访问技术各有各的特点,至于实际使用哪一种接口方式,在很大程度上依赖于用户的应用程序的具体情况而定。要做到具体问题具体分析,根据具体的环境、条件、要求而采用适当的方案,应用中注意以下几个原则:
1.代码的重用和运行的效率
比如通过使用ODBC数据源连接数据库的方法,可在变换多种数据库类型的情况下,不用频繁修改代码。而用VB SQL通过DB-Library就做不到。当然ODBC接口并不是VB访问数据库运行效率最高的方法。
2.实现的简便性,易维护性
如果数据量不大,而且要求开发周期短的情况,建议使用DAO+Access,虽然DAO功能并不强大,但是它对Jet引擎进行了加速优化处理,所以这种搭配应该是比较好的选择。如果我们设计的方法复杂,那么设计出来的应用程序也会很复杂,维护时就很困难。比如:本地需要访问ISAM 或Jet 类型数据源,那么就使用DAO/Jet,而没有必要使用通过ODBC的方法。
3.安全性原则
这一条应根据环境和条件决定。例如局域网的网络安全性要好于广域网,因而可直接利用数据控件如RDC,这样实现起来方便快捷,广域网需要大量的错误捕获,用RDC就不如用RDO易控制错误。
四、结束语
由于OLE DB的ADO对象模型具有简单性、可扩充性、数据访问的一致性等优点,它正在逐步代替老的DAO和RDO数据访问接口,成为新的标准数据访问接口,其应用必将越来越广。但是ADO并不支持DAO的所有功能,在ADO的演化过程中,马上把大多数DAO应用程序移植到ADO上可能为时太早,例如当前的ADO并不支持数据定义(DDL)、用户、组等。微软的新名词层出不穷,最新又推出了UDA,随着网络技术和数据库技术的不断发展,现在的应用系统对数据集成的要求越来越高,我们要灵活掌握各种数据库访问技术,更好地完成数据库的开发。
参考文献:
[1]姚小兵.VB中ADO技术的应用[J].电脑与信息技术,2005,13(4):22-24.
[2]杜玲玲,罗红星.VB下利用ADO实现对SQL Server的访问[J].江西电力职业技术学院学报,2005,18(2):39-41.
数据安全访问 篇12
随着Oracle数据库的不断应用, 在带来便捷的同时, 企业更加重视它的安全性。当计算机的运行环境发生变化时, 即使受到人为原因入侵, 数据库都不应该受到损坏, 并且能够实现及时进行备份与修复, 保护企业数据安全。本文重点对其安全性问题进行研究, 对目前普遍存在的安全访问提出建议与技术分析, 协助企业维持好信息安全。
1 Oracle 数据库概述
Oracle数据库能够存储大量的数据, 对其进行有效管理, 同时可以利于不同的权限对信息进行共享, 起着安全防护的作用, 目前在物流与通信行业中都得到了广泛的应用。在Oracle数据库中, 数据库软件可以进行不断优化, 为了实现快速分析, 在进行新的数据储存时, 对应的图形等数据形式也需要同时做出调整与变化, 这种自处理功能大大减少了人工对数据的处理, 而且提高了精确性。
Oracle数据库主要有开发与管理两大模块。在Oracle数据库的开发过程中, 主要是指对存储的过程进行写入, 对触发器进行设计, 对Oracle数据库的管理主要是指通过科学的思维, 准确地对数据库存的每一个局部都进行分析, 通过经验积累不断分析可能会出现隐患的位置。[1]
2 Oracle 数据库的安全管理措施
2.1 网络系统层次安全管理措施
Oracle数据库的安全根本是网络系统的安全, 它对于数据库的安全起着决定性的作用。网络系统安全稳定, 会保证数据库能够正常行使功能。首先可以通过防火墙技术进行设置, 通过防火墙来对一些可疑的站点进行检测, 在网络内部与外部进行保护, 防止非法访问, 不但保护了外部非法信息的进入, 同时也保护内部信息不会流露到网络中。其次通过密码保护来对网络系统进行防护。在用户设置安全问题或密码, 可以有效避免网络系统受到攻击;第三通过远程拒绝访问的方法, 充分发挥权限作用, 避免外部信息侵入。[2]
2.2 用户操作系统的安全管理措施
在企业的数据库运行过程中, 经常会使用到内部终端访问的情况, 为了避免信息出现意外, 需要对访问的用户进行权限设置。采用用户管理运行的模式, 避免合法的用户受到损害。用户操作系统的安全管理措施主要包括用户帐号、对象授权与角色方面。
角色管理策略主要是指当Oracle数据库受到多个用户访问时, 需要创建角色, 进一步规范访问权限, 达到良好的运行状态。DBA可以为所有的用户提供权限, 进行全面管理。除了角色管理外, 还可以创建用户账号。使用帐户与动态口令二者结合的方式重新设置数据库的访问权限, 避免数据库受到破坏, 同时也避免了多余的用户对系统造成干扰。
2.3 数据库自身的控制管理
在计算机数据库安全管理过程中, 对数据库自身的控制管理是重要组成部分。由于计算机软件硬件的脆弱性, 在运行过程中有可能会发生故障。数据库自身的安全管理就是要在即使发生故障时, 也不能让内部的数据发生损坏的情况, 避免信息丢失。这时需要提前进行备份。当数据库的服务器发生故障时, 数据库可以进行备份处理, 通过调节与自身修复, 达到有效控制。[3]
3 Oracle 数据库的安全访问管理技术分析
Oracle数据库对安全访问的设置与管理能够较高提高系统的安全性。这其中包括的主要内容为Oracle安全认证模式与设置、数据库访问权限的建立、角色管理。本章重点对普通用户的访问进行管理。
普通用户的数据库只能在数据库运行后经过身份验证与登录, 后才能进行访问。数据库管理员经过身份验证、操作系统验证以及密码文件身份认证。Oracle采用了三个层次的安全策略。第一是登录服务器;第二是成为合法用户后访问数据库, 第三是在数据库的用户管理中拥有一定的权限。Oracle数据库的用户确认主要有两种认证方式, 首先是基于Windows NT的认证模式, 其次是混合认证的模式。Oracle数据库完全能够在Windows NT服务器上运行, NT具有良好的认证性能, 该系统主要是利用用户安全性机制进行账号管理, Oracle数据库的用户也可以使用NT的用户以及密码。[4]
4 Oracle 数据库的数据备份管理技术分析
4.1 Oracle 数据库的数据备份
在实际的工作过程中, 数据转移是一项非常复杂的工程, 所需要的管理与架构都是非常重要的。
历史数据转移过程中首先要对目前的系统进行完善分区, 合理考虑好时间因素, 保证高效、简捷地实现数据迁移。分区时采用分而治之的思路, 通过索引与大表进行小块管理。这种技术手段有利于大量数据提供了可能, 降低了系统管理时间。Oracle数据库对于大规模数据处理具有良好的特性。让历史数据的迁移更为快捷方便高效, 操作性更容易。在现代的数据库信息数据中, 新的数据增长非常快, 促使了历史数据不断优化, 因为它们占用了大量的空间与系统资源。系统的技术人员与管理人员需要进行科学规划, 将历史数据进行迁移, 提高系统的性能, 通过对数据的科学分区以及储存来提高可靠性。[5]
4.2 Oracle 数据库的数据恢复管理
在数据库的恢复管理中, 首先要对它的破坏程度进行分析, 通过两种主要的数据恢复方式进行管理, 第一种是实例恢复, 第二种就是介质恢复。前者主要是通过自主操作的数据库对访问控制文件进行位置确认, 对日志文件进行重组, 如果实例恢复不成功的话, 则需要技术人员对数据库启动时的报警信息进行检查确认后进行。检查与处理后日志文件与数据文件将会及时恢复。第二种恢复方式主要是指数据库文件或部分数据无法读取时, 通过介质进行恢复。首先要明确Oracle数据库的归档方式。介质就是通过这些不同的归档方式让数据库恢复到最开始的状态。部分介质恢复就是指安全恢复无法进行时, 或特殊需求时进行的一种恢复方式。
5 基于专网与互联数据库交换框架下的安全防范应用
目前随着非法用户对计算机信息的改编, 通过多种途径将非法信息植入到企业的计算机中, 企业的专网与数据库通过互联网进行连接, 有可能会受到病毒以及其他非法文件的攻击。目前流行的几种杀毒软件可以很好地起到防护作用。同时定期对个人电脑进行清理, 文明上网, 对于可疑的网页不好奇不打开。专网与数据库通过网络进行连接给了非法访问篡改更大的机会, 需要每一个用户都能提高防范意识, 避免受到病毒的攻击。[6]
同时数据库的研究也会更加深入, Oracle数据库的版本将会进一步提高, 通过不断进行加密设计与综合管理的办法来对网络信息安全进行防范。
6 结语
随着社会的发展, 企业间的数据库建设更加重要, 技术人员与管理人员在数据库的维护与安全防范方面需要做到最大程度, 来确保信息安全。随着科技的发展, 会有更多的软件与硬件实现信息安全防护。对数据库的安全访问、登录数据分析、实时备份管理等都会进一步优化, 解决目前存在的流程困扰与问题, 实现对企业形象的建设与提升。
参考文献
[1]周若男, 吴海军.探析Oracle数据库的安全访问与备份管理[J].计算机光盘软件与应用, 2013, 08:167-169.
[2]洪灵玲.解析ORACLE数据库安全管理策略[J].电脑知识与技术, 2013, 20:4586-4587.
[3]张建勤.基于Oracle数据库安全策略研究[J].计算机光盘软件与应用, 2013, 10:98-99.
[4]褚孔统, 宋建宇, 王国强.基于代理服务的Oracle数据库安全访问[J].指挥信息系统与技术, 2012, 02:72-76+82.
[5]冯娜, 付宁.浅谈ORACLE数据库安全管理策略[J].数字技术与应用, 2012, 10:183.