今天在做看OCP的时候有道题是关于应用安全角色的,不是很明白,在网上找了个例子按照步骤验证了下.
QUESTION 48
You want to create a role to meet these requirements:
1. The role is to be protected from unauthorized usage.
2. The password of the role is not to be embedded in the application source code or stored in a table.
Which method would you use to restrict enabling of such roles?
A. Create the role with external authentication.
B. Create the role as a secure application role.
C. Create the role as a password-protected role.
D. Create a role and use Fine-Grained Access Control (FGAC) to secure the role.
Correct Answer: B
Section: (none)
Explanation

有点:启用角色时通过包,而不是通过密码。
1.建立一个名为secure_user的应用用户,只有create session权限或其他权限,但不具有查询ldy用户下表的权限。
create user secure_user identified by oracle;
grant create session to secure_user;
 
2.创建1个安全角色,此时认证使用的过程包不需要已经存在(auth_role)。赋予对hxl.tb_test01表的查询权限。
create role secure_role identified using hxl.auth_role;
grant select on hxl.tb_test01 to secure_role;
 
3.创建权限信息表。目的是为了限制应用用户从指定IP连接上来才具有安全角色权限。
表结构如下
create table hxl.auth_roles
(
username varchar2(50),
role varchar2(50),
ip_address  varchar2(50),
enabled  number
);
表内容如下:
insert into ldy.auth_roles values ('SECURE_USER','SECURE_ROLE','192.168.2.84',1);
192.168.2.84这个是我客户端机器的ip,下面的存储过程需要通过该ip限制授权

4.创建验证的包和包体
需要包含AUTHID CURRENT_USER子句:
create or replace procedure ldy.auth_role
AUTHID CURRENT_USER
as
cursor vc is
SELECT role
FROM ldy.AUTH_ROLES
WHERE username = upper(sys_context('userenv','current_user'))
AND ip_address = upper(sys_context('userenv','ip_address'))
AND enabled=1;
v_role ldy.auth_roles.role%TYPE;
begin
open vc;
loop
 fetch vc into v_role;
  IF vc%ROWCOUNT = 0 THEN
    raise_application_error(-20123,'This IP has Invalid Privilege',false);
  END IF;
 exit when vc%notfound; /*客户端ip和用户都满足查询条件才设置权限*/
 dbms_session.set_role(v_role);
end loop;
exception
  when others then
  dbms_output.put_line(dbms_utility.format_error_stack);
END;

5.分配权限

grant execute on hxl.auth_role to secure_user;
grant select on hxl.auth_roles to secure_user;
grant secure_role to secure_user;
alter user secure_user default role all except secure_role;
 
6.测试连接
从IP 192.168.2.84连接
$ sqlplus secure_user/oracle@three_slnngk

SQL> exec hxl.auth_role;
 
PL/SQL procedure successfully completed.
 
SQL> select count(*) from hxl.tb_test;
 
  COUNT(*)
----------
     10
 
从其他IP连接
$ sqlplus secure_user/oracle@three_slnngk

SQL> exec hxl.auth_role;
 
PL/SQL procedure successfully completed.
 
SQL> select count(*) from hxl.tb_test;
select count(*) from hxl.tb_test
                         *
ERROR at line 1:
ORA-00942: table or view does not exist
 
 
-- The End --

oracle安全应用角色例子的更多相关文章

  1. oracle预定义角色

    角色是相关权限的集合,使用角色能够简化权限的管理.简而言之就是oracle可以事先把一系列权限集中在一起(角色),打包赋予给用户,那么用户就具有了角色的一系列权限. oracle预定义角色有25种,它 ...

  2. Oracle只读用户角色的建立

    授予某模式下对象读权限给角色,就可以建立Oracle只读用户角色,下文对该方法的实现步骤作了详细的介绍,供您参考学习. 下面为您介绍的是Oracle只读用户角色的建立方法,该方法供您参考,如果您在Or ...

  3. Oracle 用户、角色管理简介

    Oracle 用户.角色管理简介 by:授客 QQ:1033553122 创建用户 形式1:创建名为testacc2的用户 CREATE USER testacc2 IDENTIFIED BY abc ...

  4. oracle中解决角色PLUSTRACE不存在

    在sqlplus中用autotrace查看执计划时出现如下错误提示: SYS@CDB$ROOT> conn scott/tiger@pdborcl Connected.会话已更改. SCOTT@ ...

  5. oracle regexp_like介绍和例子

    oracle regexp_like介绍和例子 学习了:http://www.cnblogs.com/einyboy/archive/2012/08/01/2617606.html ORACLE中的支 ...

  6. C#Winform连接Oracle数据库 , 及角色讲解

    http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html 一.连接方法 (1)System.Data.OracleClient 注意1:此方法在.NET ...

  7. oracle数据字典-权限-角色

    每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...

  8. oracle中的存储过程例子

    用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获. . 建立一个存储过程 ...

  9. ORACLE - 用户和角色的权限管理

    在ORACLE中,创建用户后需要授权才能使用. 一.用户管理 1. 用户和角色信息查询 --查询所有用户 SQL> select * from dba_users; --经授予的用户或角色的系统 ...

随机推荐

  1. c# 利用MailKit.IMap 收取163邮件

    最近我要做一个爬虫.这个爬虫需要如下几个步骤: 1 填写注册内容(需要邮箱注册) 2 过拖拽验证码(geetest) 3 注册成功会给邮箱发一封确认邮箱 4 点击确认邮箱中的链接 完成注册 我这里就采 ...

  2. python regularexpress

    这个正则表达式,我还真没有接触过,在python首次学习 //test.py 1 import re 2 3 print (re.match('www', 'www.myweb.com').span( ...

  3. react native中使用ScrollableTabView

    第一步,下载依赖 npm install react-native-scrollable-tab-view --save 第二步,引入 import ScrollableTabView, { Scro ...

  4. 安装redis脚本

    #!/bin/bash#Function: Install redis#Author: DengYong#Date: 20151126 cd /root/packagewget http://down ...

  5. Javascript-do_while....

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. caffe在Linux下生成均值文件

    参照博客:https://blog.csdn.net/sinat_28519535/article/details/78533319

  7. python base64加密文本内容(1)

    仅仅使用base64加密安全系数太低了,我们还可以自定义base64加密后的文本进行一些变化,提高安全系数,在解密时再回复某些变化 1,先实现一个base64加密 import base64 impo ...

  8. WEBGL threejs 1

    首先感谢国内的这些研究者,先驱们~~~~~ 文章内容来自于webgl中文网,感谢~~~ -------------------------------------------------------- ...

  9. grad-cam 、cam 和热力图,基于keras的实现

    http://bindog.github.io/blog/2018/02/10/model-explanation/ http://www.sohu.com/a/216216094_473283 ht ...

  10. Fantasia (点强连通分量建图 + 树形DP)

    简化一下题意,我们先看成一副强连通的图,这时候应该是最简单了,去点任意点都是其他的乘积.那再加强一点难度,改为两个强连通图连接的非强连通图呢?那应该就是找出关键的那个点,并求出两边的乘积.但是一个一个 ...