使用product_user_profile來實作使用者權限的設定
我們有時候在以普通使用者登入SQL*Plus的時候,會碰到下面的錯誤提示:
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
其實在實際意義上這隻是一個警告而已,oo教教fZOrNV7`i@UIN&"并不是真正的錯誤,遇到這個提示,并不會影響我們正常使用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
執行完畢以後,
垠lz\1b無P件中z管理0s(:I垠
可以desc product_user_profile來驗證一下改表已經建立,并且熟悉一下表的結構。
以上不是這篇小文章的重點,下面我們要利用這張表來限制SCOTT使用者不能執行DROP指令,[n4l絡d網\(8育[m[]Oz^即使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使用者,|vd網教f教管c$2UY##\b
)w\供YU@Zf4網
用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表中的内容。