使用安全的应用程序角色实施安全性策略

目的

本教程演示了如何使用数据库角色实现口令保护的角色和安全的应用程序角色。

所需时间

大约 30 分钟

主题

本教程包括下列主题:

 概述
 情景
 创建用户并设置表访问权限

使用数据库角色

 使用安全的应用程序角色
 清理
 总结

查看屏幕截图

 将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:此操作会同时加载所有屏幕截图,网速较慢时,响应时间可能会比较长。)

注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。

概述

角色是一种用于在 Oracle 数据库中管理权限的强大方法。 可以将角色授予用户和其他角色。 将角色授予用户后,角色可以被设置为默认角色,当用户成功地通过数据库访问权限验证时将激活与角色关联的权限。 如果未将角色设置为默认角色,可以使用“set_role”命令调用它。

在本教程中,您将学习如何使用“安全的应用程序角色”防止将角色授予未授权用户。

返回主题列表

情景

本教程介绍了 OSRD 的两位员工(即 Karen Partners 和 Louise Doran)如何尝试获取 oe.orders 表中的信息。 角色“ots_role”中定义了该表的访问权限。 由于 Karen 是 Louise 的经理,因此 Karen 将能够访问 oe.orders 中的信息,而 Louise 却不能。

返回主题列表

创建用户并设置表访问权限

在开始创建并分配角色之前,需要创建用户并设置相应表的访问权限。执行以下操作:

1.

打开一个终端窗口,执行以下命令和脚本:

                               
cd wkdir
sqlplus /nolog
@sec_approles_create_users
                            

@sec_approles_create_users 脚本包含以下命令:

connect system/oracle


drop user "LOUISE.DORAN@OSRD.COM" cascade;
drop user "KAREN.PARTNERS@OSRD.COM" cascade;

create user "LOUISE.DORAN@OSRD.COM" identified by welcome1;
create user "KAREN.PARTNERS@OSRD.COM" identified by welcome1;

grant connect, create session to "LOUISE.DORAN@OSRD.COM";
grant connect, create session to "KAREN.PARTNERS@OSRD.COM";

connect hr/hr
update employees set email='LOUISE.DORAN@OSRD.COM' where email='LDORAN';
update employees set email='KAREN.PARTNERS@OSRD.COM' where email='KPARTNER';


2.

现在,您可以设置将在本教程中使用的表的访问权限。执行以下脚本:

                               
@sec_approles_set_access
                            

@sec_approles_set_access 脚本包含以下命令:

connect oe/oe


revoke select on oe.orders from public;
revoke select on oe.customers from public;


connect hr/hr
grant select on hr.employees to public;


返回主题列表

使用数据库角色

在本主题中,您将创建一个数据库角色,并将该角色授予 Karen 而不是 Louise。执行以下步骤:

1.

您首先需要创建角色。 从终端窗口中执行以下 SQL 脚本:

                               
@sec_approles_create_role
                            

@sec_approles_create_role 脚本包含以下命令:

connect system/oracle
drop role ots_role;
create role ots_role;


2.

接下来,您需要授予 oe.ordersoe.customersselect 访问权限。 然后,向每个用户授予此角色并将他们的配置文件设置为 none。 从终端窗口中执行以下 SQL 脚本:

                               
@sec_approles_grant_role
                            

@sec_approles_grant_role 脚本包含以下命令:

connect oe/oe
grant select on oe.orders to ots_role;
grant select on oe.customers to ots_role;


connect system/oracle
grant ots_role to "KAREN.PARTNERS@OSRD.COM";
alter user "KAREN.PARTNERS@OSRD.COM" default role none;

grant ots_role to "LOUISE.DORAN@OSRD.COM";
alter user "LOUISE.DORAN@OSRD.COM" default role none;

 

3.

您现在可以设置 Karen 的角色并对 oe.orders 表执行 select。 从终端窗口中执行以下 SQL 脚本:

                               
@sec_approles_test_role_karen
                            

@sec_approles_test_role_karen 脚本包含以下命令:

connect "KAREN.PARTNERS@OSRD.COM"/welcome1;
set role ots_role;
select sales_rep_id, order_total from oe.orders order by order_total desc;


4.

请注意如果在执行 select 之前不设置角色将会发生什么情况。执行下面的 SQL 脚本:

                               
@sec_approles_test_wo_role_louise
                            

@sec_approles_test_wo_role_louise 脚本包含以下命令:

connect "LOUISE.DORAN@OSRD.COM"/welcome1;
select sales_rep_id, order_total from oe.orders order by order_total desc;

 

5.

由于 Louise 未被授予“ots_role”,因此她没有该角色中定义的表的访问权限。 但她只需知道该角色的名称 ('ots_role') 和命令“set role”便可以自行解决此“问题”。 换言之,她非常轻松地获得了她不应知道的信息的访问权限。 运行以下脚本:

                               
@sec_approles_test_w_role_louise
                            

@sec_approles_test_wo_role_louise 脚本包含以下命令:

set role ots_role;
select sales_rep_id, order_total from oe.orders order by order_total desc;

 

返回主题列表

使用安全的应用程序角色

在本主题中,您将创建并使用一个安全的应用程序角色。执行以下步骤:

1.

您首先需要创建角色。 从终端窗口中执行以下 SQL 脚本:

                               
@sec_approles_sar_create_role
                            

@sec_approles_sar_create_role 脚本包含以下命令:

connect system/oracle
drop role ots_role;
create role ots_role IDENTIFIED USING sec_roles;


2.

接下来,您需要授予 oe.ordersoe.customersselect 访问权限。 然后,向每个用户授予此角色并将他们的配置文件设置为 none。 从终端窗口中执行以下 SQL 脚本:

                               
@sec_approles_grant_role
                            

@sec_approles_grant_role 脚本包含以下命令:

connect oe/oe
grant select on oe.orders to ots_role;
grant select on oe.customers to ots_role;
connect system/oracle
grant ots_role to "KAREN.PARTNERS@OSRD.COM";
alter user "KAREN.PARTNERS@OSRD.COM" default role none;

grant ots_role to "LOUISE.DORAN@OSRD.COM";
alter user "LOUISE.DORAN@OSRD.COM" default role none;

 

3.

现在,您可以创建安全性应用程序角色过程。 从终端窗口中,执行以下 SQL 脚本;注意,此过程可以执行所有类型的安全性检查。 在本示例中,您首先将“session_user”与 hr.employees 表中的电子邮件地址进行比较。 然后,检查员工的 manager_id。仅当 manager_id=100 时,该过程才设置用户的角色,否则将不设置角色。

                               
@sec_approles_sar_create_proc
                            

@sec_approles_sar_create_proc 脚本包含以下命令:

connect system/oracle
                              
CREATE OR REPLACE procedure sec_roles authid current_user
as
v_user varchar2(50);
v_manager_id number :=1;
begin
v_user := (sys_context ('userenv', 'session_user'));
select manager_id into v_manager_id from hr.employees where email=v_user;
if v_manager_id = 100
then
dbms_session.set_role('ots_role');
else null;
end if;
exception
when no_data_found then v_manager_id:=0;
end sec_roles;
/

 

4.

您需要授予此过程的执行权限。 从终端窗口中执行以下 SQL 脚本;在本示例中,OSRD 的内部安全性策略可以确定是否将此过程的执行权限授予所有员工:

                               
@sec_approles_sar_grant_proc
                            

@sec_approles_sar_grant_proc 脚本包含以下命令:

connect system/oracle
GRANT EXECUTE ON sec_roles to "KAREN.PARTNERS@OSRD.COM";
GRANT EXECUTE ON sec_roles to "LOUISE.DORAN@OSRD.COM";


5.

现在,您可以测试 Karen 的访问权限。执行下面的 SQL 脚本:

                               
@sec_approles_sar_test_role_karen
                            

@sec_approles_sar_test_role_karen 脚本包含以下命令:

connect "KAREN.PARTNERS@OSRD.COM"/welcome1;
execute system.sec_roles;
select sales_rep_id, order_total from oe.orders order by order_total desc;

 

6.

现在,您可以测试 Louise 的访问权限。执行下面的 SQL 脚本:

                               
@sec_approles_sar_test_role_louise
                            

@sec_approles_sar_test_role_louise 脚本包含以下命令:

connect "LOUISE.DORAN@OSRD.COM"/welcome1;
execute system.sec_roles;
select sales_rep_id, order_total from oe.orders order by order_total desc;

 

返回主题列表

清理

执行以下步骤清理环境。 如果您要在执行本 OBE 后执行任何其他 OBE,则必须执行以下步骤:

1.

从终端窗口中,执行以下 SQL 脚本:

                               
@sec_appsrole_cleanup
                            

@sec_appsrole_cleanup 脚本包含以下命令:

connect system/oracle
                              
drop role ots_role;
drop procedure sec_roles;
drop user "KAREN.PARTNERS@OSRD.COM" cascade;
drop user "LOUISE.DORAN@OSRD.COM" cascade;
update employees set email='LDORAN' where email='LOUISE.DORAN@OSRD.COM';
update employees set email='KPARTNER' where email='KAREN.PARTNERS@OSRD.COM';
exit;


返回主题列表

总结

在本课程中,您学习了如何:

 使用数据库角色
 使用安全的应用程序角色

返回主题列表

 将鼠标置于该图标上可以隐藏所有的屏幕截图。

 

 

Left Curve
热门下载
Right Curve
Left Curve
更多融合中间件下载
Right Curve