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; 

然后重新编译,成功.

继续阅读 →