本文以普通用户创建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 --
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/519536/viewspace-691051/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/519536/viewspace-691051/