- 浏览: 1343737 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 90
ORA-06512: at "UNIFLOW.SET_MY_APP_CTX", line 5
ORA-06512: at line 1
应用程序环境
使用客户端标识符有它的优点,但也存在严重的安全威胁:这种设置假定用户将值设为真正的用户 id,但这一点无法得到保证。恶意攻击的用户可以连接然后将该值设为不同的用户 id,严重地破坏审计跟踪的真实性。在 web 应用程序中,使用 cookie 存储客户端标识符使得破坏更困难(如果不是不可能);但是在普通的应用程序中,仅仅使用客户端标识符,安全性可能不尽人意。我们需要一种更安全的方法来捕获审计跟踪中的应用程序用户。
进入解决方案:应用程序环境.应用程序环境类似于会话变量;一旦设置了,任何时候都可以在会话中访问它们。可以在另一个会话中设置一个不同的值,而在整个会话中都看不到这个值。环境具有的属性类似于表的列;但与表不同的是,环境不是片段对象,属性可以在运行时而不是设计时定义。
可以使用下列 SQL 创建应用程序环境:
create context my_app_ctx using set_my_app_ctx;
注意,子句 using set_my_app_ctx 意味着环境中的属性只能通过名为 set_my_app_ctx 的过程来操作,该过程定义如下:
create or replace procedure set_my_app_ctx
(
p_app_user in varchar2 := USER
)
is
begin
dbms_session.set_context('MY_APP_CTX','APP_USERID', p_app_user);
end;
此过程通过调用 dbms_session.set_context API,简单地将属性 APP_USERID 设置为输入参数传递的值。因此,如果用户直接调用此 API,其结果会如何呢?
SQL> exec dbms_session.set_context('MY_APP_CTX','APP_USERID', 'JUNE')
BEGIN dbms_session.set_context('MY_APP_CTX','APP_USERID', 'JUNE'); END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 78
ORA-06512: at line 1
注意错误 ORA-01031:insufficient privileges 有点令人误解。用户的确对 SYS.DBMS_SESSION 有执行权限,但是通过调用它来设置环境属性是违法的,因此出现了错误。但是,当用户调用受信任的过程来设置环境属性:
SQL> execute set_my_app_ctx ('AAAA')
PL/SQL procedure successfully completed.
设置成功了。因为环境属性只能通过它的过程(正确叫法是 受信任的过程)来设置。这是应用程序环境一个非常重要的属性,将在 FGA 中得到使用。
一旦设置了环境属性,可以通过调用函数 SYS_CONTEXT 来检索它。在上述代码中设置完环境后,可以通过下列语句来查看环境:
select sys_context('MY_APP_CTX','APP_USERID') from dual;
该语句返回属性值。如果可以通过安全的方式设置环境,则可以利用环境来设置客户端标识符。
基于我们现有的知识,以下是可能的解决方案:
应用程序执行过程代码,该代码自动地将应用程序环境设置为正确的值。在上述示例中,使用了用户 id 的环境属性,但另一个属性—如用户的角色—可能已经被使用了。可以在一个环境中定义多个属性。可以将属性作为启用的角色使用。受信任的过程可以包括各种类型的安全检查,从而使得它安全且真实可信。如果安全检查失败了,则不能设置所需的角色。因此,即使用户可以使用 APPUSER 帐号成功地登录,他也不能够操作数据,因为没有启用适当的角色。注意,角色必须经过过程认证,而不能是普通的角色。这种角色由命令 CREATE ROLE USING 创建;用户通过调用 而不是 SET ROLE 命令启用角色。
此过程也设置客户端标识符,因此没有必要授予公众对 dbms_session 的执行权限,即使对此用户也没有必要。由于用户没有权限调用 API,他们不能直接设置客户端标识符—客户端标识符将被自动设置,并且传递到细粒度的审计跟踪。
ORA-06512: at "SYS.DBMS_SESSION", line 90
ORA-06512: at "UNIFLOW.SET_MY_APP_CTX", line 5
ORA-06512: at line 1
应用程序环境
使用客户端标识符有它的优点,但也存在严重的安全威胁:这种设置假定用户将值设为真正的用户 id,但这一点无法得到保证。恶意攻击的用户可以连接然后将该值设为不同的用户 id,严重地破坏审计跟踪的真实性。在 web 应用程序中,使用 cookie 存储客户端标识符使得破坏更困难(如果不是不可能);但是在普通的应用程序中,仅仅使用客户端标识符,安全性可能不尽人意。我们需要一种更安全的方法来捕获审计跟踪中的应用程序用户。
进入解决方案:应用程序环境.应用程序环境类似于会话变量;一旦设置了,任何时候都可以在会话中访问它们。可以在另一个会话中设置一个不同的值,而在整个会话中都看不到这个值。环境具有的属性类似于表的列;但与表不同的是,环境不是片段对象,属性可以在运行时而不是设计时定义。
可以使用下列 SQL 创建应用程序环境:
create context my_app_ctx using set_my_app_ctx;
注意,子句 using set_my_app_ctx 意味着环境中的属性只能通过名为 set_my_app_ctx 的过程来操作,该过程定义如下:
create or replace procedure set_my_app_ctx
(
p_app_user in varchar2 := USER
)
is
begin
dbms_session.set_context('MY_APP_CTX','APP_USERID', p_app_user);
end;
此过程通过调用 dbms_session.set_context API,简单地将属性 APP_USERID 设置为输入参数传递的值。因此,如果用户直接调用此 API,其结果会如何呢?
SQL> exec dbms_session.set_context('MY_APP_CTX','APP_USERID', 'JUNE')
BEGIN dbms_session.set_context('MY_APP_CTX','APP_USERID', 'JUNE'); END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 78
ORA-06512: at line 1
注意错误 ORA-01031:insufficient privileges 有点令人误解。用户的确对 SYS.DBMS_SESSION 有执行权限,但是通过调用它来设置环境属性是违法的,因此出现了错误。但是,当用户调用受信任的过程来设置环境属性:
SQL> execute set_my_app_ctx ('AAAA')
PL/SQL procedure successfully completed.
设置成功了。因为环境属性只能通过它的过程(正确叫法是 受信任的过程)来设置。这是应用程序环境一个非常重要的属性,将在 FGA 中得到使用。
一旦设置了环境属性,可以通过调用函数 SYS_CONTEXT 来检索它。在上述代码中设置完环境后,可以通过下列语句来查看环境:
select sys_context('MY_APP_CTX','APP_USERID') from dual;
该语句返回属性值。如果可以通过安全的方式设置环境,则可以利用环境来设置客户端标识符。
基于我们现有的知识,以下是可能的解决方案:
应用程序执行过程代码,该代码自动地将应用程序环境设置为正确的值。在上述示例中,使用了用户 id 的环境属性,但另一个属性—如用户的角色—可能已经被使用了。可以在一个环境中定义多个属性。可以将属性作为启用的角色使用。受信任的过程可以包括各种类型的安全检查,从而使得它安全且真实可信。如果安全检查失败了,则不能设置所需的角色。因此,即使用户可以使用 APPUSER 帐号成功地登录,他也不能够操作数据,因为没有启用适当的角色。注意,角色必须经过过程认证,而不能是普通的角色。这种角色由命令 CREATE ROLE USING 创建;用户通过调用 而不是 SET ROLE 命令启用角色。
此过程也设置客户端标识符,因此没有必要授予公众对 dbms_session 的执行权限,即使对此用户也没有必要。由于用户没有权限调用 API,他们不能直接设置客户端标识符—客户端标识符将被自动设置,并且传递到细粒度的审计跟踪。
发表评论
-
exp和imp,oracle9i导出导入数据,数据库备份,创建用户,删除用户
2009-04-16 21:57 3598执行下面这句,是创建用户 create user testkk ... -
Oracle批量创建用户和导入导出的脚本
2008-12-26 10:36 2531-- 在cmd下执行 SELECT 'exp ' || ... -
sys用户使用@连接符提示无效权限的错误ORA-01031:
2008-12-26 10:30 2762问题:有同事反映,新安装的数据库使用 conn sys/ora ... -
Oracle创建主键时处理重复数据的程序
2008-12-26 10:29 2228/**************************** ... -
Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
2008-08-23 08:40 45301. Oracle10g安装过程中出现“无 ... -
Oracle to_date用法
2008-06-26 15:29 3498Oracle to_date用法 日期格式参数 含义说明 D ... -
Java学习常用网站收集
2008-05-14 17:22 3294有网友说Java学习需要官方网站,想一下,发现有些框架的官方网 ... -
ORACLE数据库命名编码规范
2008-05-13 22:37 2237我在“管理”的论坛找到了答案,谁还有更多的,请指教!!! * ... -
ADO&ADO.NET 读取 Oracle 数据集
2008-05-13 22:22 2267使用 ADO.NET 访问 Oracle 9i 存储过程 ht ... -
通过批处理文件启动Oracle服务
2008-05-13 22:16 2115自己家里的机子配置不高,所有Oracle服务都是手动启动、关闭 ... -
Oracle常用及非常用函数
2008-05-12 17:11 5826感于总有些网友提出一 ... -
Oracle 9i的闪回查询概述
2008-05-11 23:59 2524Oracle 9i的闪回查询概述 ... -
使用分析单
2008-05-11 23:41 1083分析函数计算基于行组的值,并可以用来实现rownum伪列表述的 ... -
使用伪列Rownum
2008-05-11 23:31 1587对员工表进行排序,之后显示工资最多的前3名。 这么简单的问题想 ... -
oracle-merge用法详解
2008-05-11 22:28 2208Oracle9i引入了MERGE命令,你能够在一个SQL语句中 ... -
Oracle 数据字典(2)
2008-05-11 19:21 1487创建表的SQL语句如下-- 创建数据表create table ... -
Oracle 数据字典(1)
2008-05-11 19:14 1959Oracle数据库字典介绍 Oracle数据字典是有表和 ... -
AFTER DELETE Trigger
2008-05-11 07:33 3387An AFTER DELETE Trigger means t ... -
Oracle中常见数据类型转换
2008-05-11 07:28 1673To | From | CH ... -
PL/SQL学习笔记一
2008-05-11 07:22 16711、 PL/SQL的塊結構 Declare ...
相关推荐
作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_...
Oracle 18c bug 执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY报错_ITPUB博客.mhtml
NULL 博文链接:https://duqiangcise.iteye.com/blog/648491
oracle dbms_lob
支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。
dbms_comp_advisor.getratio 预估压缩比例的存储过程脚本 11gR2以前使用,11gR2后可以使用系统自带的存储。
以下是对Oracle中dbms_metadata.get_ddl的用法进行了详细的分析介绍,需要的朋友参考下
通过此版本可以把oracle时区版本调整到为最新版本,一般配合时区补丁使用 可以参考https://blog.csdn.net/weixin_43885834/article/details/105745901 https://download.csdn.net/download/weixin_43885834/12360971...
dbms_obfuscation_toolkit加密解密数据
ORACLE数据库使用dbms_stats包手动收集关于表的、索引的统计信息。
SESSION#, SERIAL#, USERNAME, sql_redo FROM v$logmnr_contents where SQL_REDO like '%T1%'; 分析的结果其它会话无法访问 用以下方法转储: create table logmnr3 as select * from GV$LOGMNR_...
Oracle统计分析-dbms_stats.pdf
oracle dbms_sql的使用方法,非常使用
简单的dbms_stats操作,简单的dbms_stats操作简单的dbms_stats操作
dbms_logmnr 使用 DBMS_LOGMNR 是 Oracle 中的一个日志分析包,用于分析和解释redo日志文件,以便追踪和诊断数据库中的操作。下面是 DBMS_LOGMNR 的使用方法。 首先,需要安装 LogMiner 工具,包括两个脚本 dbmslm...
在以前查看SQL执行计划的时候,我都是使用set autotrace命令,不过现在看来,DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 这5个函数分别对应不同的显示计划的方式,DBMS_XPLAN包不仅可以获取解释计划,它还...
dbms_random是oracle提供的一个随机函数包,以下介绍一些dbms_random的常用示例: dbms_random.value用法: 生成一个大于等于0,小于等于1的38位小数 代码如下: — FUNCTION value RETURN NUMBER; select dbms_...
使用C语言实现的数据库管理系统。 支持简单类 SQL语言。
Oracle DOM编程 文档,有要的没 Start from toc.htm DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY