使用product_user_profile來實現使用者許可權的設定

zecaro發表於2010-11-06
我們有時候在以普通使用者登入SQL*Plus的時候,會碰到下面的錯誤提示:   Error accessing PRODUCT_USER_PROFILE   Warning: Product user profile information not loaded!   You may need to run PUPBLD.SQL as SYSTEM   其實在實際意義上這只是一個警告而已,並不是真正的錯誤,遇到這個提示,並不會影響我們正常使用SQL*Plus,也不會對資料庫功能產生影響。   如果資料庫是使用dbca建立的那麼不用擔心這個問題,通常是我們手動建立資料庫的情況下,忘了執行一些指令碼才導致出現這樣的警告。PRODUCT_USER_PROFILE其實有很強大的功能,這是SYSTEM模式下的一個表,在此表中存在的資料可以讓客戶端程式登入的時候檢查是否在命令的執行上有什麼限制。基本上我們是以它來限制SQL*Plus這個客戶端程式(目前好像也只有這個程式才會去自動檢查這張表:D)   如果不想看到這個警告,作如下操作:   以SYSTEM使用者登入SQL*Plus,然後執行PUPBLD.SQL,這個檔案通常在$ORACLE_HOME/sqlplus/admin目錄中。   SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql   執行完畢以後,可以desc product_user_profile來驗證一下改表已經建立,並且熟悉一下表的結構。   以上不是這篇小文章的重點,下面我們要利用這張表來限制SCOTT使用者不能執行DROP命令,即使SCOTT使用者擁有DROP TABLE的許可權。   SQL> insert into product_user_profile (    2 product, userid, attribute, char_value)    3 values (    4 'SQL*Plus','SCOT%','DROP','DISABLED');   1 row inserted   Executed in 0.01 seconds   SQL> commit;   Commit complete   Executed in 0 seconds   然後退出SYSTEM使用者,用SCOTT使用者登入,作個測試:   SQL> create table t_test_profile(    2 id number);   Table created.   Elapsed: 00:00:00.10   SQL> drop table t_test_profle;   SP2-0544: invalid command: drop   這就是product_user_profile的作用,回顧一下:   1。如果我們把DROP改成CREATE或者UPDATE那麼就對使用者禁止了這些命令。   2。從上面的insert語句,我們可以看到對於使用者的限制支援萬用字元,所有以SCOT開頭的使用者都不能執行指定的命令。   3。修改了product_user_profile內容,使用者必須重新登入SQL*Plus,修改才會生效,也就是隻有在登入的時候,SQL*Plus才會檢查一遍product_user_profile表中的內容。
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-677645/,如需轉載,請註明出處,否則將追究法律責任。

相關文章