Tag Archives: Oracle

Oracle 用户授权需谨慎

看到 有人提问关于授权的问题. 不由得想多说几句. Oracle 9i 以及以下版本的数据库,默认的数据库角色有些不太合理的地方. DBA 管理的过程中,如果不太注意的话,可能会带来麻烦或者潜在的隐忧. 比如最常见的 CONNECT 角色.

User => FOO has been granted the following privileges
====================================================================
ROLE => CONNECT which contains =>
SYS PRIV => ALTER SESSION 		grantable => NO
SYS PRIV => CREATE CLUSTER 		grantable => NO
SYS PRIV => CREATE DATABASE LINK 	grantable => NO
SYS PRIV => CREATE SEQUENCE 		grantable => NO
SYS PRIV => CREATE SESSION 		grantable => NO
SYS PRIV => CREATE SYNONYM 		grantable => NO
SYS PRIV => CREATE TABLE 		grantable => NO
SYS PRIV => CREATE VIEW 		grantable => NO

这里面的 ALTER SESSION 就是一个问题. 恶意的用户很容易利用这个权限给系统带来麻烦.举两个例子,一个是 修改当前 Session 的 cursor_sharing 参数值为 FORCE ,然后提交可触发 Oracle Bug 的查询(cursor_sharing 在 FORCE 模式下 Bug 很多) , 很容易让数据库崩溃. 或者恶意用户提交 alter session set hash_area_size … 的修改语句, 给自己设定一个超大的 HASH_AREA_SIZE , 再提交一定的查询,也会给系统性能造成很糟糕的影响.
这个 CONNECT 角色在 Oracle 10g 中已经修改了,只有 create session 的权限.

继续阅读

看图学 Oracle SES

刚才在线学习了一下 Oracle Secure Enterprise Search Administration Tutorial. 目前 Oracle 还不提供 Secure Enterprise Search 10g 的下载, 所以只能看看联机教程过点干瘾.
安装相对比较简单, 和普通的数据库安装很相似.类 Unix 服务器上需要修改核心参数, 最后系统会直接安装一个 DB 到服务器上.
Oracle Secure Enterprise Search 在 Linux 上安装时核心参数的设定
从教程中可以得知搜索引擎的基本由三部分构成:
Oracle数据库服务器 –管理存储与源数据以及搜索索引.
数据库 Listener –监听 Oracle Net 连接.
搜索中间层 — 监听来自 HTTP 的请求. 我从 URL 中判断其实是一个 HTMLDB . Secure Enterprise Search 的管理工具也通过这个中间层来进行.

继续阅读

Oracle Secure Enterprise Search 10g

Oracle 杀入了搜索领域。虽然 Google 在互联网搜索领域独领风骚, 但 Oracle 显然要在企业搜索领域力拔头筹。日前,Oracle 推出了号称划时代的产品:Oracle Secure Enterprise Search(SES) 10g。赶紧找来白皮书研究研究。
这个产品的名字值得捉摸:Security + Enterprise + Search + 10g.
Security Oracle 首先强调了这款产品的安全特性。可以安全的与 Oracle Internet Directory 同步;与微软的活动目录同步;查询结果与爬虫的选项以及索引数据都各自有一些安全特性。比如,关于查询,Oracle 引入了查询时验证的特性,未经授权的用户搜索特定信息的时候,他不应该看到的信息会被搜索引擎过滤掉。这个验证是动态的,用户友好程度应该不错,但是因为是动态验证,性能上会有影响。该特性可以和 ACL 验证方式结合使用,或者单独使用。
Enterprise 软件目标是企业客户。SES 可以处理企业内容几乎所有的数据源(Web Page/ Email /DB table/ API 定制的数据源)。这其中激动人心的是直接搜索数据库表。这应该是 Oracle 的强项,以前还没听说哪个企业产品是直接搜索 DB 内容的。SES 这个特定对很多潜在的企业用户来说是一个卖点。至于运行效率则不得而知。

继续阅读

Revoke 权限后出现的无效对象该如何编译

以前写过一则 Blog , 如何重编译无效的数据库对象. 可是有的时候,因为一些原因,在对一些数据库的 Package 对象的权限做修改之后, 会出现大量的无效对象, 即使反复编译,也是无济于事的.
今天就遇到过一起.

ops$oracle@demo>select object_name,owner,object_type
from dba_objects where  status='INVALID';
OBJECT_NAME OWNER OBJECT_TYPE ---------------------------- -------------------------- ------------------ DRIDDLR CTXSYS PACKAGE BODY
ops$oracle@demo>alter package ctxsys.DRIDDLR compile body;
Warning: Package Body altered with compilation errors. ops$oracle@demo>execute utl_recomp.recomp_serial('CTXSYS'); PL/SQL procedure successfully completed.
ops$oracle@APAYCA>select object_name,owner,object_type
from dba_objects where status='INVALID';
OBJECT_NAME OWNER OBJECT_TYPE ---------------------------- -------------------------- ------------------ DRIDDLR CTXSYS PACKAGE BODY

因为刚刚撤销了 Public 对 DBMS_METADATA 和 DBMS_JOB 的执行权限. 本着最小权限授予原则,所以决定尝试恢复 CTXSYS 对两个包的执行权限.经过测试,

SQL> grant execute on  DBMS_JOB to ctxsys; 

然后重新编译,成功.

继续阅读