Oracle 学习资料库
本教程演示了如何使用数据库角色实现口令保护的角色和安全的应用程序角色。
所需时间
大约 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; |
| 1. |
您首先需要创建角色。 从终端窗口中执行以下 SQL 脚本:
@sec_approles_create_role
@sec_approles_create_role 脚本包含以下命令: connect system/oracle drop role ots_role; create role ots_role; |
| 2. |
接下来,您需要授予 oe.orders 和 oe.customers 的 select 访问权限。 然后,向每个用户授予此角色并将他们的配置文件设置为 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.orders 和 oe.customers 的 select 访问权限。 然后,向每个用户授予此角色并将他们的配置文件设置为 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
|
| 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
|
在本课程中,您学习了如何:
| |
使用数据库角色 | |
| |
使用安全的应用程序角色 | |
热门下载 | ||
更多融合中间件下载 | ||