【DIRECTORY】普通使用者建立Oracle DIRECTORY資料庫物件的許可權需求及探索

swq618發表於2016-10-17
本文以普通使用者建立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/29674916/viewspace-2126569/,如需轉載,請註明出處,否則將追究法律責任。

相關文章