Oracle handbook系列之虚拟专用数据库VPD的使用详解
- 格式:doc
- 大小:72.50 KB
- 文档页数:4
oracle orapwd命令使用说明Oracle orapwd命令使用说明介绍本文将为您详细介绍Oracle数据库中orapwd命令的使用说明。
orapwd命令是Oracle数据库管理工具中的一部分,用于管理数据库的密码文件。
安装orapwd命令已经包含在Oracle数据库的安装文件中,无需额外安装。
创建密码文件要创建密码文件,可以使用以下命令:orapwd file=<password_file> password=<password> ent ries=<number_of_entries>参数说明: - file:指定要创建的密码文件的路径和文件名。
- password:指定密码文件的密码。
- entries:指定密码文件可以存储的最大密码数。
修改密码文件密码如果需要修改密码文件的密码,可以使用以下命令:orapwd file=<password_file> password=<new_password>参数说明: - file:指定要修改密码的文件的路径和文件名。
- password:指定新的密码。
删除密码文件要删除密码文件,可以使用以下命令:orapwd file=<password_file> delete参数说明: - file:指定要删除密码的文件的路径和文件名。
查询密码文件信息要查询密码文件的信息,可以使用以下命令:orapwd file=<password_file> display参数说明: - file:指定要查询密码的文件的路径和文件名。
总结通过本文,我们了解了orapwd命令的基本使用方法,包括如何创建、修改和删除密码文件,以及如何查询密码文件信息。
熟练掌握这些知识,将有助于有效管理Oracle数据库的密码。
注意事项在使用orapwd命令时,需要注意以下几点:1.谨慎操作:orapwd命令可以更改数据库中的密码文件,因此在使用命令前,请确保您具有足够的权限,并且仔细核对命令参数,以免造成不必要的损失或安全风险。
Oracle VaultOracle数据库作为目前最成熟的商业数据库,在稳定其核心功能的同时也针对数量众多的用户群提出了很多安全运维工具解决方案。
在数据层面,Oracle有三个代表新的技术:Virtual Private Database(VPD)、Label Security和Oracle Vault。
VPD主要是针对解决应用层面的数据访问需求添加数据访问权限,Label Security是VPD某种程度的拓展升级。
而Vault主要是对Oracle数据库的安全职责进行分离,将数据安全责任从用户甚至sys 身上剥离出去,进行细粒度的安全责任分配。
1、Oracle Vault简述Oracle Vault是官方推荐的security策略之一,它主要用于运维机构中对数据的保护。
传统意义的Oracle 安全是一种“sys上帝”的主宰模型。
我们虽然有各种系统、角色和对象权限,虽然各种安全手册要我们使用非sys用户进行维护工作,但是很多数据库管理员还是在使用sys进行所有工作。
一些数据防护技术,比如VPD虽然可以实现数据层面的控制,但是对sys也是无效的。
更重要的是一些any类的系统权限,如select any table,一旦赋予,用户其实就控制了所有数据表的数据访问。
这个是非常武断的做法,潜藏着很大问题。
在“sys上帝”的前提控制下,这样的局面是控制不住的。
因为一些运维操作,如数据备份、导入导出是避免不了高级访问权限的。
“要么不做、要么别管”就是我们目前很多运维机构的现状。
Oracle Vault提供了sys用户削权的一种选择。
作为Oracle数据库的一个可选组件,Vault是需要额外的文件链接、注册和安装的。
安装vault之后,Oracle会去创建一个全新的用户dbvowner,原有的sys对一些数据的操作和访问权限,也都有进行控制的可能。
Vault中的三个核心要素:Realm (领域)、Factor(因素)和规则(Rule)。
五种类型的策略、列相关策略以及列屏蔽使得 VPD 成为 DBA 的安全工具箱中一种功能更加强大的工具。
虚拟专用数据库 (VPD) 也称为细粒度访问控制,它提供强大的行级安全功能。
它是在Oracle8i 中推出的,已经受到广泛的欢迎,并且在从教育软件到金融服务等各种应用程序得到采用。
VPD 的工作方法是,通过透明地更改对数据的请求,基于一系列定义的标准向用户提供表的局部视图。
在运行时,所有查询都附加了谓词,以便筛选出准许用户看到的行。
例如,如果只允许用户查看帐户管理员 SCOTT 的帐户,则 VPD 设置自动地将查询:select * from accounts;重写为:select * from accounts where am_name = 'SCOTT';DBA 在表 ACCOUNTS 上设置了一项安全策略。
该策略具有一个相关函数,称为policy function,它返回一个用作谓词的字符串 where am_name = 'SCOTT'。
如果您不熟悉该特性的全部功能,我建议您阅读 Oracle 杂志的文章“利用 VPD 保持信息的私密性”。
策略类型生成谓词所需的重复分析是一种在某些情况下可以进行修整的开销。
例如,在大部分实际情况中,谓词并不象 am_name = 'SCOTT' 那样是静态的;它基于用户的身份、用户的权限级别、用户向哪个帐户管理员进行报告等情况,可能更具有动态性。
由策略函数创建并返回的字符串可能会具有很强的动态性,而为了保证其结果,Oracle 必须每次重新执行策略函数,既浪费资源又降低性能。
在这种类型的策略中,谓词每次执行时可能会有很大的差别,该策略称为“动态”策略,在 Oracle9i 数据库以及以前的版本中已经提供了这种策略。
除了保留动态策略之外,Oracle 数据库 10g 还基于谓词的构造推出了几种新类型的策略,为提高性能提供了更好的控制:context_sensitive、shared_context_sensitive、shared_static 和 static。
基于Oracle数据库的作战数据虚拟化安全应用方法研究作者:张连喜王林来源:《信息安全与技术》2013年第04期【摘要】随着作战数据库应用系统中大量重要、敏感数据的增长,数据库中数据的安全显得极为重要。
本文尝试基于Oracle的数据库管理系统进行作战数据安全访问控制,重点介绍通过虚拟专用数据库(Virtual Private Database, VPD)实现多个相关数据库间共享表的安全,以达到“细”粒度访问控制。
【关键词】作战数据;数据安全;虚拟化应用;粒度;访问控制1 引言随着计算机网络及作战指挥系统的快速发展,作战数据库大量重要、敏感数据不断增长,信息资源的利用和保护日益引起人们的重视,尤其作战数据安全显得极为重要。
花费大量人力物力开发建立的作战数据库系统由于安全问题没有有效得到控制只能闲置一旁,这不仅造成了巨大的浪费,而且大大制约了各类指挥信息系统的进一步发展。
如何基于现有信息体系构造数据库安全环境,本文尝试基于Oracle的作战数据库系统进行数据库安全访问控制,重点介绍通过虚拟专用数据库(Virtual Private Database, VPD)实现多个特定数据库间共享表的安全,以达到“细”粒度访问控制。
1.1 数据库访问控制访问控制是对用户访问数据库各种资源(包括基表、视图、各种目录以及实用程序等)的权利(包括创建、撤消、查询、增、删、改、执行等)的控制,这是保障数据库安全的基本手段。
数据库用户按其访问权利的大小,一般可分为三类:1)一般数据库用户(具有CONNECT特权的用户);2)具有支配部分数据库资源的数据库用户(具有RESOURCE特权的用户);3)具有DBA特权的数据库用户。
不同用户对数据库有不同的访问权限,DBMS按用户的访问权限来控制其对数据库的访问,主要解决两个问题,一个是用户的标识与鉴别,一个是授权。
1.2 应用进程安全性作为数据库的开发人员,在设计和实现数据库时都要面对大量的应用安全问题。
Oracle10g中的虚拟专用数据库(VPD)什么是VPD所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同的用户只能查看某个表里的部分数据。
VPD分为以下两个级别:行级别:在该级别下,可以控制某些用户只能查看到某些行数据。
例如对于销售数据表来说,每一名销售人员仅仅能检索自己的销售数据,而不能检索其他用户的销售数据。
列级别:在该级别下,可以控制某些用户不能检索某些列的数据。
例如HR用户下的EMPLOYEES表,包含salary这一个列,表示工资。
由于该列不允许任何用户都可以看到,所以可以在这个列上使用一些设置,这样其他一些用户查看这一列信息时,其数值均为NULL。
利用Oracle的细粒度访问控制,可用一种非常复杂的方式调整安全策略,可将细粒度访问控制用于以下目的:l 通过SELECT、INSERT、UPDATE、DELETE语句实施行访问控制l 建立一个安全策略,它基于某个列的特定值控制访问l 创建与查询执行中动态更改策略相同的方式使用的策略l 创建一组安全策略,成为策略组基于行的VPD基于行的VPD也叫做Fine-Grained Access Control,即FGAC。
FGAC通过定义规则来实现,规则的集合叫做FGAC政策(Policy)。
如果对某个表设置了FGAC,则当用户对该表发出查询或者DML语句时,Oracle都会根据定义的FGAC政策,而自动改写这些SQL语句。
其改写方式为自动在SQL语句后面添加where条件。
使用FGAC策略来限定返回记录的方式具有很多优点。
例如:不需要改写应用程序,对用户完全透明,集中设置,便于管理等。
在使用FGAC时,会涉及到应用程序上下文(Application Context)的概念,使用应用程序上下文可以简化FGAC管理的实现。
应用程序上下文是一个数据库对象,可以把它理解为数据库里的每一个session的全局环境变量。
一旦用户登录到数据库,从而创建出session以后,应用程序上下文就在整个session的生命周期里可用。
oracle中文使用手册Oracle是一款功能强大的关系型数据库管理系统,广泛应用于企业数据管理和应用开发领域。
本手册将详细介绍Oracle数据库的基本概念、常用命令和操作方法,以帮助初学者快速上手和熟练使用Oracle。
1. Oracle简介Oracle是美国Oracle公司开发的一种关系型数据库管理系统。
它是目前企业级应用系统首选的数据库产品之一,被广泛应用于各个行业的数据管理和应用开发中。
Oracle具有可靠性高、性能优异、安全性强等特点,成为大型企业数据处理的首选。
2. 安装与配置在开始使用Oracle之前,首先需要进行安装和配置。
可以从Oracle官方网站下载安装程序,根据提示进行安装。
安装完成后,需要进行一些基本的配置,如创建数据库实例、设置监听器等。
详细的安装和配置过程可以参考Oracle官方提供的文档或手册。
3. 数据库连接与登录使用Oracle数据库前,需要先进行数据库连接和登录。
可以使用SQL*Plus命令行工具或Oracle SQL Developer等图形化界面工具来进行连接和登录。
在连接时需要提供数据库的主机名、端口号和SID等信息,以及合法的用户名和密码。
连接成功后,即可开始对数据库进行操作。
4. SQL基本操作SQL是结构化查询语言,用于在关系型数据库中进行数据的增删改查等操作。
下面介绍一些常用的SQL命令:- 创建表: 使用CREATE TABLE语句可以创建数据表,并指定表的字段、数据类型、约束等信息。
- 插入数据: 使用INSERT INTO语句可以向表中插入数据。
- 更新数据: 使用UPDATE语句可以更新表中的数据。
- 删除数据: 使用DELETE FROM语句可以删除表中的数据。
- 查询数据: 使用SELECT语句可以查询表中的数据。
5. 数据库事务和锁机制数据库事务是指对数据库进行的一系列操作,要么全部执行成功,要么全部不执行。
Oracle提供了事务管理机制,可以确保数据库的一致性和完整性。
OracleVPD实现数据细粒度访问(更好的权限控制)Oracle VPD实现数据细粒度访问(更好的权限控制)分类: Oracle 2010-01-19 21:28 480人阅读评论(0) 收藏举报概述虚拟专用数据库(VPD) 提供了角色和视图无法提供的行级访问控制。
对于互联网访问,虚拟专用数据库可以确保在线银行的客户只能看到他们自己的帐户。
Web 托管公司可以在同一Oracle 数据库中维护多个公司的数据,但只允许每个公司查看其自身数据。
在企业内部,虚拟数据库可在应用程序部署方面降低拥有成本。
可以在数据库服务器一次实现安全性,而不用在访问数据的每个应用程序中分别实现安全性。
因为是在数据库中实施安全性,所以不管用户访问数据的方式如何,安全性较以前更高。
访问即席查询工具或新报表生成程序的用户不再能绕过安全环节。
虚拟专用数据库是一项重要技术,使企业能够构建托管的、基于 Web 的应用程序。
实际上,许多Oracle 应用程序本身使用VPD 实施数据分隔,包括Oracle 和 Oracle Portal 等程序。
虚拟专用数据库如何工作将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。
对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。
策略函数返回一个访问条件(WHERE 子句),即谓词。
应用程序将它附加到用户的SQL 语句,从而动态修改用户的数据访问权限。
你可以通过编写一个存储过程将SQL 谓词附加到每个SQL 语句(用于控制该语句的行级别访问权限)来实施 VPD。
例如,如果 John Doe(他属于 Department 10)输入 SELECT * FROM emp 语句,则可以使用 VPD 添加 WHERE DEPT = 10 子句。
这样,您便可以通过对查询进行修改来限制访问某些行的数据。
虚拟专用数据库确保无论用户以何种方式访问数据(通过应用程序、报表编写工具或SQL*Plus),都将强制实施同一强大的访问权限控制策略。
VPD,Oracle Virtual Private Database,即Oracle虚拟专用数据库,是指通过应用一些策略,使得用户只能访问被允许访问的那部分数据。
其原理相对简单,Oracle根据策略自动为相应用户提交的语句添加Where句,从而控制用户可以访问和操作的数据。
首先我们准备演示用的几张表,并插入少量的测试数据:1.CREATETABLEvpdsample_clothing(2.clothing_idNUMBER,3.typeVARCHAR2(30),4.brandVARCHAR2(30),5.descriptonVARCHAR2(100)6.);7.--8.INSERTINTOvpdsample_clothingVALUES(10002,'jacket','ABC','autumnstyle');9.INSERTINTOvpdsample_clothingVALUES(10003,'t-shirt','XYZ','summerstyle');mit;11.CREATETABLEvpdsample_books(12.book_idNUMBER,VARCHAR2(30),14.authorVARCHAR2(20)15.);16.--17.INSERTINTOvpdsample_booksVALUES(10005,'CountryDriving','PeterHessler');18.INSERTINTOvpdsample_booksVALUES(10006,'Lifewithoutlimits','NickVujicic');mit;(以上两个表模拟一个简单的库存情况,库中有两类物品,服装、图书。
这里我们需要满足两个表中的ID的唯一性(可以通过sequence来实现)。
oracleorapwd命令使用说明Oracle数据库的orapwd命令,主要用来建立密码(口令)文件。
一.查看帮助信息[oracle@oracle11g dbs]$ orapwdUsage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>wherefile - name of password file (required),password - password for SYS will be prompted if not specified at command line,entries - maximum number of distinct DBA (optional),force - whether to overwrite existing file (optional),ignorecase - passwords are case-insensitive (optional),nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).There must be no spaces around the equal-to (=) character.二.密码文件的默认位置1.windows操作系统下默认的位置是$ORACLE_HOME\database目录,默认的文件名是 pwd<ORACLE_SID>.ora,其它的文件名,都是不认的。
2.Unix/linux操作系统下默认的位置是$ORACLE_HOME/dbs目录,默认的文件名是orapw<ORACLE_SID>,其它的文件名,都是不认的。
VPD文档作者: 三Bear 创建日期: 2015-04-10更新日期: 2015-04-10当前版本: 1.0目录目录文档作者:三Bear (1)目录 (2)文档控制 (3)更改记录 (3)审阅 (3)分发人员 (3)VPD概述 (4)一个VPD实例 (5)MOAC (8)MOAC的VPD实现 (8)文档控制更改记录审阅分发人员VPD概述什么是VPD(虚拟专用数据库)VPD(虚拟专用数据库),主要作用是根据运行环境的上下文,隐式的添加条件。
简单的说,VPD就是向特定的数据库对象附加一个安全策略,在对这个对象操作的过程在中,会自动的使用这个安全策略进行验证,同时满足自定义条件和安全策略的操作才会获得预期的结果。
应用程序上下文(Application context)的理解应用程序上下文就像一个全局变量,里面记录了用户的各种登陆信息,以及客户化的各种参数。
VPD就是根据这些数据,来为我们的sql语句隐式的添加判断条件。
VPD的实际意义好处是在数据库层解决细粒度的角色权限访问,避免在中间层写大量代码。
说白了,VPD就是在表里面添加一个策略,也就是一个where条件。
每当我们查询这个表的时候就会触发这个策略,必须满足这个条件的数据才能被查出来。
而且,这个条件是根据上下文环境变化的,不同的环境可能会取不同的数据。
一个VPD实例1)在APPS 中创建表,赋权给PO, ONT用户create table hand_vpd_test_tb1(column1 varchar2(30),db_user varchar2(30));CREATE PUBLIC SYNONYM hand_vpd_test_tb1 FOR apps.hand_vpd_test_tb1 ;grant select ,insert, update on hand_vpd_test_tb1 to po,ont;2)创建策略函数packagecreate or replace package HAND_VPD_TST_SECURITY isFUNCTION Select_Security(Owner VARCHAR2, Objname VARCHAR2) RETURNVARCHAR2;FUNCTION Insert_Security(Owner VARCHAR2, Objname VARCHAR2)RETURNVARCHAR2;end HAND_VPD_TST_SECURITY;create or replace package body HAND_VPD_TST_SECURITY isFUNCTION SELECT_SECURITY(Owner VARCHAR2, ObjnameVARCHAR2)RETURN VARCHAR2 ISPredicate VARCHAR2(2000);BEGINPredicate := 'DB_USER = SYS_CONTEXT(''USERENV'',''CURRENT_USER'')';RETURN Predicate;END Select_Security;FUNCTION INSERT_SECURITY(Owner VARCHAR2, Objname VARCHAR2)RETURN VARCHAR2 ISPredicate VARCHAR2(2000);BEGINPredicate := 'DB_USER = SYS_CONTEXT(''USERENV'',''CURRENT_USER'')';--Predicate := null;RETURN Predicate;END Insert_Security;end HAND_VPD_TST_SECURITY;其中SYS_CONTEXT(''USERENV'',''CURRENT_USER'')是得到上下文USERENV中CURRENT_USER的值。
基于OracleVPD技术实现系统可配置数据屏蔽本次研究基于Oracle VPD技术基础之上,改变了传统的建立视图屏蔽敏感数据的方法,实现了系统可配置数据屏蔽策略。
简述Oracle VPD技术在运用中针对系统配置数据的屏蔽需求,及该技术的运用系统功能需求。
在实现Oracle VPD技术控制的方案策略研究下,实现配置数据的有效屏蔽,满足我院对敏感数据的屏蔽需求。
Abstract:Based on the Oracle VPD technology,this study changed the traditional method of establishing view masking sensitive data and realized the system configurable data masking strategy. Briefly describe the shielding requirements of Oracle VPD technology for system configuration data,and the system function requirements of the technology. Under the research of the solution strategy of implementing Oracle VPD technology control,the effective shielding of configuration data is realized to meet the shielding requirements of sensitive data in our hospital.Key words:Oracle VPD technology;System configuration;Data masking随着各项新型技术设备的不断创新研发,被较为广泛的应用于我国医院的绝大多数日常工作中。
Oracle VPD数据细粒度访问实现方案1.背景为确保2011年XX系统各本地网数据省集中后,在后台数据库层面能有效地隔离各本地网的数据、方便各本地网DBA人员查看和修改自己所在本地网的数据和保证其他本地网数据的安全性.2.技术概述Oracle引进了VPD(虚拟私有数据库)来对数据库进行细密度的访问控制。
VPD又称为精细存取控制(FGAC)、行级安全性控制(RLS),是指使用了行级安全保护能力和应用上下文的数据库,会透明地过滤记录。
VPD的行级安全是通过RLS策略函数,在用户对数据库表或视图的查询中动态地使用谓词(WHERE子句),从而具有在系统执行查询运行时以变化的方式修改查询的能力。
不像传统应用程序安全的设计,VPD的行级安全设计是在数据服务器端一次性地构建安全策略,而不是在应用服务器端为每一个应用程序实施安全策略,这就大大节省了设计成本,也消除了应用级安全问题。
安全策略都被置于在数据库自身里,使得不同的应用程序将不会绕过安全策略,用户也就不再能绕过安全策略,因为无论用户使用何种应用程序,最终都会被数据服务器端的策略函数自动强制实施对用户的访问控制(如图).借助于VPD,用户可以将数据库安全性实施到表或者视图的更小粒度.VPD使得服务器的数据安全地和物理数据分离,每个用户只能访问到自己要访问的信息,就像有一个自己的数据库,其中只有他自己的信息,这种特性非常符合应用程序服务供应商的安全性需求。
3.方案设计步骤3.1.定义安全策略目标结合综合资源系统省集中后,由于XX个本地网的数据都会在同一库中,从数据库层面维护和安全性角度来看是不太可取的,这样的话会有引起误操作和非法获取他人本地网数据信息。
所以从上面2方面的考虑要求.可以简单定义独具特色的安全策略目标:在数据库层面上每个本地网只希望查到或修改自己本地网的数据和自己本地网数据不能被其他本地网的人查到或修改。
3.2.创建访问的相应用户和赋予权限✓以DBA管理员身份登录例如:Connect Sys / **@sdh As Sysdba;✓创建访问的相应用户并赋权例如:以广州和江门为例。
vtd使用手册概述VTD(Virtual Token Descriptor)是一种高性能的XML处理技术。
它能够快速解析大型XML文档,并提供了方便的API来操作XML数据。
本手册将详细介绍VTD的安装和使用方法,以帮助开发人员更好地利用这一强大的工具。
第一部分:安装和配置1. 下载VTD-XML库首先,你需要从VTD-XML的官方网站或其他可信来源下载VTD-XML库的最新版本。
2. 解压缩文件解压缩下载的文件并将其放置在你计划使用VTD的项目目录下。
3. 配置开发环境根据你使用的开发环境,配置相关的编译选项或者包含VTD库相关的文件路径。
第二部分:VTD的基本使用1. 初始化VTD对象在使用VTD之前,你需要初始化一个VTD对象。
首先,创建一个VTDGen实例,并使用VTDGen.setDoc方法加载你想要解析的XML 文件。
2. 解析XML文档调用VTDGen.parse方法解析XML文档。
如果解析成功,可以使用VTDNav对象来遍历和操作XML数据。
3. 导航XML结构使用VTDNav对象的相关方法来导航XML的层级结构。
例如,使用VTDNav.toElement方法可以定位到当前元素的开始标签处。
4. 获取元素数据通过调用VTDNav对象的方法,可以获取当前元素的名称、属性值和文本内容等信息。
例如,使用VTDNav.toString方法可以获取当前元素的文本内容。
5. 遍历XML文档利用VTDNav对象提供的方法,可以沿着XML文档的层级结构进行遍历。
例如,使用VTDNav.toElement方法可以将当前指针移动到下一个同级元素。
第三部分:高级使用技巧1. 使用XPath进行查询VTD提供了XPath的支持,可以通过XPath表达式查询XML文档中的数据。
例如,使用VTDNav的evalXPath方法可以执行一个XPath表达式并返回结果。
2. 更新XML文档VTD支持对XML文档进行修改。
摘要:文章分析了传统数据库访问控制模式的安全设计的局限性和不足,重点介绍了ORACLE数据库的VPD技术优势、原理,最后给出了一个基于角色访问控制的VPD设计方案。
关键词:ORACLE;数据库;访问控制;安全策略;角色访问;VPD中图分类号:TP393.08文献标识码:A文章编号:1005-3638(2007)03-0033-04ProjectofaVPDDesignBasedonRoleAccessControlinOracleWANLi-yong(SchoolofInformation,GanjiangCollegeofJiangxi,Nanchang330108)Abstract:Thepaperanalyzesthelimitationsandshortcomingsofsecuritydesignofthetraditionaldatabaseaccesscontrolmodel,andmainlyintroducestheadvantagesandprinciplesofVPDtechnologyofOracledatabaseandfinallypresentstheprojectofaVPDdesignbasedonroleaccesscontrol.KeyWords:ORACLE;database;accesscontrol;securitytactic;applicationcontext;VPD收稿日期:2007-04-20作者简介:万里勇(1976-),男,江西东乡人,江西赣江职业技术学院信息学院助理工程师,特聘讲师,从事计算机软件、数据库和信息安全研究。
ORACLE中一个基于角色访问控制的VPD设计方案万里勇(江西赣江职业技术学院信息学院,江西南昌330108)1引言随着现代网络和数据库技术的迅速发展,人们广泛地利用数据库技术对大量而复杂的信息进行科学、高效的管理,然而,在人们尽情共享信息带来方便的同时,不法分子利用计算机信息系统的某些漏洞不断威胁着计算机信息的安全。
Oracle的行级安全性为用户提供了他们自己的虚拟专有数据库。
鉴于隐私法,如美国的HIPAA(健康保险移植和责任法案)、Gramm-Leach-Bliley法案、Sarbanes-Oxley 法案及欧共体的安全港法律(Safe Harbour Law),确保适当的信息隐私是当今众多企业迫切关心的一个问题。
其他隐私指令,如Visa的持卡人信息安全计划(Cardholder Information Security Program,CISP)也需求企业确保对信息的访问是得到严格控制的。
Oracle一直都提供授权(或拒绝)用户访问数据库对象的能力,不过这些访问权限是在对象级别上定义的--是对于整张表,而不是对于表中特定的行而定义的。
虽然对于许多应用程式来说这种方法已足够了,但涉及金融、健康或其他类型的个人信息的应用程式通常需要对访问和授权进行更加独立的控制。
Oracle8i中引入的Oracle行级安全性(row-level security,RLS)特性提供了细粒度的访问控制--细粒度意味着是在行一级上进行控制。
行级安全性不是向对表有所有访问权限的用户打开整张表,而是将访问限定到表中特定的行。
其结果就是每个用户看到完全不同的数据集--只能看到那些该用户被授权能查看的数据--所有这些功能有时被称为的Oracle虚拟专有数据库(或称为VPD)特性。
中国.网管联盟使用Oracle的VPD功能不仅确保了企业能够构建安全的数据库来执行隐私政策,而且提供了应用程式研发的一个更加可管理的方法,因为虽然基于VPD的政策限制了对数据库表的访问,但在需要的时候能非常容易地对此做出修改,而无需修改应用程式代码。
例如,假设银行的账户经理(AM)向高净值账户持有者提供个人客户支持。
AM使用制定的银行应用程式来帮助他们检查客户的余额、存款或提取的款项,及对贷款需求做出决定。
银行的政策原来允许所有AM能访问所有账户持有人的信息,但在最近,对该政策做了改动。
使用VPD解决EBS中信息屏蔽问题本文描述的是2005年在一个项目中采用Oracle VPD技术解决同一个OU下按照不同办事处屏蔽销售订单的解决方案。
VPD技术提供了数据库对象(表,同义词,视图)行级别访问的控制。
关于VPD 更多的信息不在此进行描述,有兴趣的同学可以查看Oracle Database Security Guide中的Using Virtual Private Database to Implement Application Security Policies章节。
一,业务需求1.同一个OU下按照不同的办事处进行业务的操作2.各办事处信息必须保证独立3.办事处的人员只能对自己的客户下单二,功能需求由于上面的业务需求,以致需要有下面的功能需求1.给不同的办事处设置不同的订单类型,并保证特定的订单类型只有特定的办事处所有,其它的订单类型为所有办事处拥有,对订单类型进行屏蔽2.办事处只能使用自己的价目表来进行销售,需要对价目表进行办事处的屏蔽3.办事处只能使用自己的客户及客户地址进行销售,需要对客户及客户地址进行屏蔽4.办事处只能够查看和修改自己的订单信息,需要对销售订单进行屏蔽三,技术方案一般情况下,这样的需求在Oracle EBS二次开发中都会被认为是“不合理”的需求,如果顾问最终答应了这样的需求,对于开发人员首先会想到的就是修改相关的Form界面以及一些数据库视图的定义,但在Oracle EBS的二次开发规范中,最重要的一条原则就是不能修改标准功能的程序;而在这个案例中,即使我们修改了一些表面上的功能,如销售订单界面,客户信息查询等等,但是很有可能很多标准的报表或者程序都是没有进行相关屏蔽的,这样对于这项开发来说就是一个不可能完成的任务,也是一个风险非常大,以至于留下很多陷阱的开发。
这时候我想到要是有一个办法,能够从基表动态添加一个条件,将其按照办事处进行条件的筛选,那岂不是“釜底抽薪”,彻底解决了我的问题?VPD通过安全策略(Policy)来动态返回一个条件(WHERE子句)来使得从行级别进行数据的屏蔽,将一个或多个安全策略与表或视图关联后,就实现了Oracle 数据库的VPD功能。
oracledv使用方法Oracle Data Visualization (DV) 是一款强大的数据可视化工具,可以帮助用户轻松地将数据转化为易于理解和分析的可视化图表和仪表盘。
本文将介绍Oracle DV的使用方法,帮助用户快速上手并充分发挥其功能。
1. 创建数据源在使用Oracle DV之前,首先需要创建一个数据源。
用户可以连接到各种数据源,如Oracle数据库、Excel文件、CSV文件等,并选择要使用的数据表或数据集。
通过简单的配置和连接设置,Oracle DV可以轻松地连接到这些数据源。
2. 创建可视化项目一旦数据源连接成功,用户可以开始创建自己的可视化项目。
Oracle DV提供了丰富的可视化选项,包括柱状图、折线图、饼图、地图等。
用户可以根据自己的需求选择适当的图表类型。
3. 数据预处理在创建可视化项目之前,用户可以对数据进行预处理。
Oracle DV 提供了多种数据转换和处理功能,如数据清洗、数据过滤、数据聚合等。
用户可以根据数据的特点和需求对数据进行必要的处理,以获得准确和有意义的可视化结果。
4. 创建图表通过简单的拖放操作,用户可以将数据字段直接拖放到可视化项目中,Oracle DV会自动根据数据类型和图表类型生成相应的图表。
用户可以根据需要调整图表的样式、颜色等,以便更好地展示数据。
5. 创建仪表盘在创建完单个图表后,用户可以将多个图表组合成一个仪表盘。
仪表盘是多个图表的集合,可以更全面地展示数据和洞察趋势。
用户可以通过简单的拖放操作将图表添加到仪表盘中,并根据需要进行布局和排列。
6. 添加交互和过滤器为了使可视化项目更具交互性和灵活性,用户可以添加交互和过滤器。
交互可以是简单的鼠标悬停效果,也可以是复杂的联动和筛选。
通过添加过滤器,用户可以根据特定的条件或维度对数据进行筛选,以获得更具针对性的可视化结果。
7. 数据故事讲解Oracle DV还提供了数据故事功能,用户可以通过故事板的形式将多个图表和仪表盘组织成一个完整的数据故事。
VPD,Oracle Virtual Private Database,即Oracle虚拟专用数据库,是指通过应用一些策略,使得用户只能访问被允许访问的那部分数据。
其原理相对简单,Oracle根据策略自动为相应用户提交的语句添加Where句,从而控制用户可以访问和操作的数据。
首先我们准备演示用的几张表,并插入少量的测试数据:1.CREATETABLEvpdsample_clothing(2.clothing_idNUMBER,3.typeVARCHAR2(30),4.brandVARCHAR2(30),5.descriptonVARCHAR2(100)6.);7.--8.INSERTINTOvpdsample_clothingVALUES(10002,'jacket','ABC','autumnstyle');9.INSERTINTOvpdsample_clothingVALUES(10003,'t-shirt','XYZ','summerstyle');mit;11.CREATETABLEvpdsample_books(12.book_idNUMBER,VARCHAR2(30),14.authorVARCHAR2(20)15.);16.--17.INSERTINTOvpdsample_booksVALUES(10005,'CountryDriving','PeterHessler');18.INSERTINTOvpdsample_booksVALUES(10006,'Lifewithoutlimits','NickVujicic');mit;(以上两个表模拟一个简单的库存情况,库中有两类物品,服装、图书。
这里我们需要满足两个表中的ID的唯一性(可以通过sequence来实现)。
)1.CREATETABLEvpdsample_users(er_nameVARCHAR2(20),er_privilegeNUMBER4.);5.--6.INSERTINTOvpdsample_usersVALUES('Jack',1);7.INSERTINTOvpdsample_usersVALUES('Rose',2);MIT;(这个表存储用户的权限信息,其中的权限即后表vpdsample_privileges中的权限ID字段。
)(这个表存储每个权限ID对应的权限信息,即对哪些对象(服装或图书)有权限。
)第二步,我们要创建一个context(实际上是【context名称空间】)。
可以简单地把context理解为一个定义在内存中的容器,在此容器中我们可以定义若干个键值对,这些键值对可以在一定的范围内被共享(比如同一个session中,或者同一个Oracle实例中)首先,使用system用户登录,赋予创建者相应的权限:grant create any context to user1;然后通过:CREATE OR REPLACE CONTEXT VPD USING pkg_vpdsample ACCESSED GLOBALLY;这里我们创建了一个叫’vpd’的context,’using’后面的是一个PLSQL package的名字,出于安全性考虑,Oracle需要你在创建context时指定一个包名,表示后续对些context 的修改只能通过此包中的存储过程进行修改,不能通过dbms_session.set_context()直接进行修改。
创建context时,package不存在并不会导致编译错误。
最后’accessed globally’是一个可选项,如果未添加此项,表示此context使用范围是某一session;如果指定了此项,则表示该context可以在整个数据库实例范围内共享。
欲删除context同样需要赋予相应的权限:1.grant drop any context to user1;2.drop context VPD;第三步,建立一个package(即上面的pkg_vpdsample),包中的各个函数及存储过程的作用会随后逐一给出:1.CREATEORREPLACEPACKAGEpkg_vpdsample2.IS3.PROCEDUREenable_vpd;4.PROCEDUREdisable_vpd;5.PROCEDUREset_context(p_user_nameINVARCHAR2);6.FUNCTIONgen_vpd_predicate(p_column_nameINVARCHAR2)RETURNVARCHAR2;7.FUNCTIONapply_vpd_clothing(p1invarchar2,p2invarchar2)RETURNVARCHAR2;8.FUNCTIONapply_vpd_books(p1invarchar2,p2invarchar2)RETURNVARCHAR2;9.END;10.11.CREATEORREPLACEPACKAGEBODYpkg_vpdsampleIS12.PROCEDUREenable_vpdIS13.BEGIN14.DBMS_SESSION.set_context(namespace=>'VPD',15.attribute=>'ENABLE',16.value=>'1');17.END;18.19./*======================*/20.PROCEDUREdisable_vpdIS21.BEGIN22.DBMS_SESSION.set_context(namespace=>'VPD',23.attribute=>'ENABLE',24.value=>'0');25.END;26.27./*======================*/28.PROCEDUREset_context(p_user_nameINVARCHAR2)IS29.l_privilegeVARCHAR2(10);30.BEGIN31.SELECTuser_privilege32.INTOl_privilege33.FROMvpdsample_users34.WHEREuser_name=p_user_name;35.DBMS_SESSION.set_identifier(client_id=>l_privilege);36.END;37.38./*======================*/39.FUNCTIONgen_vpd_predicate(p_column_nameINVARCHAR2)RETURNVARCHAR2IS40.l_vpd_flagVARCHAR2(1);41.l_privilegeVARCHAR2(10);42.BEGIN43.l_vpd_flag:=NVL(SYS_CONTEXT('VPD','ENABLE'),'0');44.IFl_vpd_flag=0THEN45.RETURNNULL;46.ELSE47.l_privilege:=SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER');48.IFl_privilegeISNULLTHEN49.RETURN'1=2';50.ELSE51.RETURNp_column_name||'IN(SELECTobject_idFROMvpdsample_privilegesWHEREprivilege_id='||l_privilege||')';52.ENDIF;53.ENDIF;54.END;55.56./*======================*/57.FUNCTIONapply_vpd_clothing(p1invarchar2,p2invarchar2)RETURNVARCHAR2IS58.BEGIN59.RETURNgen_vpd_predicate('clothing_id');60.END;61.62./*======================*/63.FUNCTIONapply_vpd_books(p1invarchar2,p2invarchar2)RETURNVARCHAR2IS64.BEGIN65.RETURNgen_vpd_predicate('book_id');66.END;67.END;enable_vpd,disable_vpd:这两个存储过程用于设置context vpd下的一个自定义属性’enable’,1表是启用vpd,0表禁用vpd,由于我们在创建此context时指定了accessed globally,所以这些属性是可以被跨session访问的。
这两个存储过程调用了dbms_session,因此需要被赋予相应的权限:grant execute on dbms_session to user1;set_context:上面我们提到了context,并且在enable_vpd与disable_vpd中使用了dbms_session.set_context来设置自定义的属性,其实除了这样自定义的context外,Oracle 还提供了预定义的context ’userenv’,该名称空间下有若干预定义的属性,比如’client_identifier’,设置此属性我们不使用set_context,而是使用dbms_session.set_identifier()。
本例中此存储过程根据传入的用户名,查找到该用户的权限ID,并将此ID作为client_identifier保存到context ’userenv’中,以便后续使用。
在实际应用中,此存储过程应该是由外部的应用程序调用的,应用程序可以在登录验证完成后,调用此存储过程写入context。
gen_vpd_predicate:根据传入的字段名称生成一个语法正确的where子句。
这里首先判断了是否启用了vpd,未设置vpd.enable属性的也认为的已经启用了。
随后判断是否已设置userenv.client_identifier属性,如果未设置,则返回一个始终为false的where子句以防止用户查看数据。