ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【DIRECTORY】普通用户创建Oracle DIRECTORY数据库对象的权限需求及探索

【DIRECTORY】普通用户创建Oracle DIRECTORY数据库对象的权限需求及探索

原创 Linux操作系统 作者:逍遥三人 时间:2012-02-08 09:08:30 0 删除 编辑
转载:http://space.itpub.net/519536/viewspace-691051

本文以普通用户创建Oracle DIRECTORY数据库对象所需的权限入手,给大家展示一下自我提示的方法,进而探索一下DIRECTORY数据库对象的“小秘密”。

1.授予普通用户创建DIRECTORY的权限
为保证普通用户具有创建Oracle数据库的directory对象,需要确切知道需要授予用户的权限是什么,我们这里需要的权限是“CREATE ANY DIRECTORY”权限。

如果一时忘记需要的具体权限,可以使用如下参考类SQL语句获得提示。
sys@ora10g> select distinct privilege from dba_sys_privs where privilege like '%DIRECTORY%';

PRIVILEGE
----------------------------------------
DROP ANY DIRECTORY
CREATE ANY DIRECTORY

对普通用户sec用户的授权语句如下。
sys@ora10g> grant CREATE ANY DIRECTORY to sec;

Grant succeeded.

2.尝试在普通用户下创建DIRECTORY数据库对象
sec@ora10g> create directory dir_test as '/home/oracle/secooler';

Directory created.

OK,此时在sec用户下创建DIRECTORY对象成功!

3.创建
DIRECTORY可能遇到的报错信息
如若在创建DIRECTORY之前普通用户sec未获得相应权限,将会收到最为常见的“ORA-01031: insufficient privileges”错误。
模拟再现一下,供大家参考。
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> revoke CREATE ANY DIRECTORY from sec;

Revoke succeeded.

sys@ora10g> conn sec/sec
Connected.
sec@ora10g> create directory dir_test as '/home/oracle/secooler';
create directory dir_test as '/home/oracle/secooler'
*
ERROR at line 1:
ORA-01031: insufficient privileges

4.获得DIRECTORY创建结果信息
用于查询获得DIRECTORY信息的数据库视图“仅有”两个,如下所示。
sys@ora10g> select TABLE_NAME from dict where table_name like '%DIRECTORIES';

TABLE_NAME
------------------------------
ALL_DIRECTORIES
DBA_DIRECTORIES

这里之所以强调“仅有”,是与其他数据库对象视图相比较而言的。
例如,用于获得同名的数据库视图一般都会有三类,如下所示。
sys@ora10g> select TABLE_NAME from dict where table_name like '%SYNONYMS';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

用于查看DIRECTORY数据库对象的视图之所以没有以USER开头的是有其具体缘由的。
请继续跟随我进行探索。
我们使用ALL_DIRECTORIES视图查看刚刚创建成功的DIRECTORY对象。
sec@ora10g> col owner for a6
sec@ora10g> col DIRECTORY_NAME for a15
sec@ora10g> col DIRECTORY_PATH for a30
sec@ora10g> select * from all_directories where DIRECTORY_NAME = 'DIR_TEST';

OWNER  DIRECTORY_NAME  DIRECTORY_PATH
------ --------------- ------------------------------
SYS    DIR_TEST        /home/oracle/secooler

重点关注一下OWNER字段的返回结果,这里显示的内容是“SYS”,并不是我们所期待的那个创建DIRECTORY的当前用户“SEC”!

这样便可以顺理成章的给出不存在以USER开头的“USER_DIRECTORIES”视图的合理解释,因为DIRECTORY数据库对象并不属于某个具体用户,都归SYS用户所有!

5.小结
在对Oracle数据库世界的探索过程中,不要放过任何蛛丝马迹,每一个细节问题都充满了乐趣,值得思考和总结。
在践行的征程中我们追求的是一种甚解的态度!

Good luck.

secooler
11.03.27

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21584437/viewspace-715808/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-07

  • 博文量
    73
  • 访问量
    110102