Oracle 学习资料库
本教程的目标是 演示虚拟专用数据库的强大数据访问限制功能,限定特定的用户访问特定数据。
大约 30 分钟
本教程包括下列主题:
| |
概述 | |
| |
情景 | |
| |
||
| |
启用针对 ORDERS 表的 VPD 策略 | |
| |
测试针对 ORDERS 表的 VPD 策略 | |
| |
查看针对 ORDERS 表的策略 | |
| |
启用针对 CUSTOMERS 表的相关列和列筛选 VPD 策略 | |
| |
在 CUSTOMERS 表上测试 VPD 策略 | |
| |
在 CUSTOMERS 表上查看策略 | |
| |
清理 | |
| |
总结 | |
将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:此操作会同时加载所有屏幕截图,网速较慢时,响应时间可能会比较长。)
注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
虚拟专用数据库 (VPD) 提供了角色和视图无法提供的行级访问控制。对于互联网访问,虚拟专用数据库可以确保在线银行的客户只能看到他们自己的帐户。Web 托管公司可以在同一 Oracle 数据库中维护多个公司的数据,但只允许每个公司查看其自身数据。
在企业内部,虚拟数据库可在应用程序部署方面降低拥有成本。可以在数据库服务器一次实现安全性,而不用在访问数据的每个应用程序中分别实现安全性。因为是在数据库中实施安全性,所以不管用户访问数据的方式如何,安全性较以前更高。访问即席查询工具或新报表生成程序的用户不再能绕过安全环节。虚拟专用数据库是一项重要技术,使企业能够构建托管的、基于 Web 的应用程序。实际上,许多 Oracle 应用程序本身使用 VPD 实施数据分隔,包括 Oracle SalesOnline.com 和 Oracle Portal 等程序。
将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(WHERE 子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。
你可以通过编写一个存储过程将 SQL 谓词附加到每个 SQL 语句(用于控制该语句的行级别访问权限)来实施 VPD。例如,如果 John Doe(他属于 Department 10)输入 SELECT * FROM emp 语句,则可以使用 VPD 添加 WHERE DEPT = 10 子句。这样,您便可以通过对查询进行修改来限制访问某些行的数据。
虚拟专用数据库确保无论用户以何种方式访问数据(通过应用程序、报表编写工具或 SQL*Plus),都将强制实施同一强大的访问权限控制策略。这样,使用 VPD ,银行便可以确保客户只看到他们自己的帐户,电信公司可以安全地隔离客户记录,人力资源应用程序可以支持复杂的员工记录数据访问原则。
在本教程中,您将创建两个不同的管理员用户:
| sec_admin |
该用户将创建策略函数,将策略应用于表并为该表创建索引以提高性能。
|
| hr_sec |
该用户在验证 CUSTOMERS 或 EMPLOYEES 表中包含某些数据库用户和角色后,将创建这些数据库用户和角色。
|
在本教程中,您将创建一组用户和角色来演示 VPD 如何工作。要创建用户和角色,请执行以下步骤:
| 1. |
打开一个终端窗口,执行以下命令:
cd /home/oracle/wkdir
sqlplus /nolog
@create_admin_users_and_roles
set echo off
|
|
您将在 ORDERS 表上应用 VPD 策略,限制内部用户(员工)和外部用户(客户)只访问各自的信息。执行以下步骤:
| 1. |
从终端窗口中,执行以下脚本:
@enable_vpd_policy
The enable_vpd_policy.sql script contains the following:
connect sec_admin/welcome1;
|
|
| 2. |
从终端窗口中,执行以下脚本:
@apply_vpd_policy
The apply_vpd_policy.sql script contains the following:
begin
|
|
现在,您可以测试该策略。执行以下步骤:
| 1. |
用户 Matthias 的 CUSTOMER_ID 为 106。安全性策略根据 CUSTOMERS 表在应用程序上下文中验证他的登录名,然后只允许访问 ORDERS 表中他自己的订单。从终端窗口中,执行以下脚本:
@select_orders_as_matthias
connect "MATTHIAS.HANNAH@GREBE.COM"/welcome1;
|
|
| 2. |
Louise Doran 是一位 EMPLOYEE_ID=160 的销售代表。您将运行一个查询,以只显示她自己的客户下的订单。从终端窗口中,执行以下脚本:
@select_orders_as_ldoran
connect LDORAN/welcome1;
|
|
| 3. |
Karen Partner 是一位 EMPLOYEE_ID=146 的销售经理。您将运行一个查询,以只显示她的销售代表团队的客户下的订单。从终端窗口中,执行以下脚本:
@select_orders_as_kpartner
connect KPARTNER/welcome1;
|
|
| 4. |
您将以 OE 所有者的身份运行一个查询,以查看 ORDERS 表中的订单数量。从终端窗口中,执行以下脚本:
@select_count_orders_as_oe
connect oe/oe;
|
|
| 5. |
现在,以 Steven King 的身份运行同一查询。 注意,结果是一个相同的数字,并且他可以查看所有订单。 这是因为他是总裁,因此可以查看所有内容。从终端窗口中,执行以下脚本:
@select_count_orders_as_sking
connect SKING/welcome1;
|
|
VPD 策略将 WHERE 子句附加到所有对受保护表的查询。 要验证 WHERE 子句是否正确(您的审计员可能会询问此问题),请执行以下步骤:
| 1. |
从终端窗口中,执行以下脚本:
@vpd_where_clause_orders
connect system/oracle
注意: 将策略应用于该表后,将根据策略函数中定义的 WHERE 子句筛选授权用户执行的所有查询。 为提高性能,可以对 WHERE 子句中使用的列上的受保护表应用索引。 在本教程中,默认情况下已经将多个索引应用于 ORDERS 表。
|
|
在本部分中,您将启用并应用一个相关列和列筛选 VPD 策略。 该策略应用于 CUSTOMERS 表,以便只有员工可以访问他们实际所需的信息。 客户将不被授予任何访问权限。 机密信息(例如,CREDIT_LIMIT)的访问权限由策略规定。执行以下步骤:
| 1. |
从终端窗口中,执行以下脚本:
@enable_vpd_policy2
connect sec_admin/welcome1;
|
|
| 2. |
现在,您可以将该策略应用于表。 为提高性能,添加了参数“context_sensitive”,以便仅当应用程序上下文的内容更改时(例如,当新用户登录时)执行该函数。在终端窗口中,执行以下脚本:
@apply_vpd_policy2
begin
|
|
现在,您可以测试该策略。执行以下步骤:
| 1. |
Matthias Hannah 正在使用 customer_role,它根本不包含 CUSTOMERS 表的访问权限。在终端窗口中,执行以下脚本:
@select_customers_as_matthias
connect "MATTHIAS.HANNAH@GREBE.COM"/welcome1;
|
|
| 2. |
Eleni Zlotkey 是一位 EMPLOYEE_ID=149 的销售经理。她将只能查看她所负责的客户的信贷限额, 而看不到所有其他信贷限额。在终端窗口中,执行以下脚本:
@select_customers_as_ezlotkey
connect EZLOTKEY/welcome1;
向上稍稍滚动可以看到另一个 ACCOUNT_MGR_ID。注意,信贷限额已被隐藏。
|
|
| 3. |
您将运行一个查询以查看 Steven King 的客户列表。 由于他是总裁,因此可以看到所有内容。在终端窗口中,执行以下脚本:
@select_customers_as_sking
connect SKING/welcome1;
向上稍稍滚动可以看到,Steven King 可以查看任何 ACCOUNT_MGR_ID 的所有信贷限额。
|
|
VPD 策略将 WHERE 子句附加到所有针对受保护表的查询。 要验证 WHERE 子句是否正确(您的审计员可能会询问此问题),请执行以下步骤:
| 1. |
在终端窗口中,执行以下脚本:
@vpd_where_clause_customers
connect system/oracle
注意: 将策略应用于该表后,将根据策略函数中定义的 WHERE 子句筛选授权用户执行的所有查询。 为提高性能,可以对 WHERE 子句中使用的列上的受保护表使用索引。 在本教程中,默认情况下已经将多个索引应用于 CUSTOMERS 表。
|
|
执行以下步骤以清理数据库:
| 1. |
在终端窗口中,执行以下脚本:
@vpd_cleanup
connect hr_sec/welcome1;
|
|
在本教程中,您学习了如何执行下列任务:
| |
启用 VPD 策略 | |
| |
查看策略 | |
| |
应用带有相关列和列筛选的 VPD 策略 | |
将光标置于该图标上可以隐藏所有屏幕截图。
热门下载 | ||
更多融合中间件下载 | ||