Oracle Database Vault關閉方法(二)

開啓了Oracle Database Vault 以後,dba的權限將大大受限,除了dba自己相關的東西可以查,基本不可以訪問其他object的權限。之所以放到第二章,相信很多剛使用Database Vault的同學會我一樣,發現很多東西不能用了。create user,alter user,這些基本操作也都不能通過dba用戶執行了,dvsys用戶又被鎖住無法解鎖,DBA用戶現在啥都幹不了,這就尷尬了。所以接下來就是教大家如何最快的禁用Database Vault 的方法。

這裏版本沒有寫,因爲11g和12C的禁用方法差別很大。

1、首先是12C的,12C有了一個比較人性的方法,直接一個存儲過程(Procedure)dbms_macadm.disable_dv搞定,注意使用dbv_owner 即我們安裝創建的用戶。

SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                      VALUE                              CON_ID
------------------------------ ------------------------------ ----------
Oracle Database Vault          TRUE                                    0

已選擇 1 行。

SQL> conn dbv_owner/dbv_owner 
已連接。
SQL> exec dbms_macadm.disable_dv;

PL/SQL 過程已成功完成。

SQL> conn / as sysdba
已連接。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。

Total System Global Area 1426063360 bytes
Fixed Size                  2924400 bytes
Variable Size             872415376 bytes
Database Buffers          536870912 bytes
Redo Buffers               13852672 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                      VALUE                              CON_ID
------------------------------ ------------------------------ ----------
Oracle Database Vault          FALSE                                   0

已選擇 1 行。
禁用後所有用戶的解鎖操作都可以正常進行了,包括dvsys用戶,在啓用的狀態下dba用戶是無法解鎖dvsys用戶的。
2、11g沒有提供直接禁用的存儲過程,需要執行一些腳本,按照官網給的方法也很簡單。oracle官方文檔禁用DV

首先需要關停所有實例,監聽,dbconsole,如果有RAC的也都停掉。

SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                      VALUE
------------------------------ ------------------------------
Oracle Database Vault          TRUE

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !

[oracle@oddpc lib]$ cd $ORACLE_HOME/rdbms/lib
[oracle@oddpc lib]$ make -f ins_rdbms.mk dv_off ioracle
/usr/bin/ar d /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libknlopt.a kzvidv.o
/usr/bin/ar cr /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libknlopt.a /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/kzvndv.o 
chmod 755 /u01/app/oracle/product/11.2.0/dbhome_1/bin

 - Linking Oracle 
rm -f /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/oracle
gcc  -o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/oracle -m32 -L/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/stubs/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/ -lirc -lipgo    -Wl,-E /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/opimai.o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ssoraed.o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ttcsoi.o  -Wl,--whole-archive -lperfsrv11 -Wl,--no-whole-archive /u01/app/oracle/product/11.2.0/dbhome_1/lib/nautab.o /u01/app/oracle/product/11.2.0/dbhome_1/lib/naeet.o /u01/app/oracle/product/11.2.0/dbhome_1/lib/naect.o /u01/app/oracle/product/11.2.0/dbhome_1/lib/naedhs.o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/config.o  -lserver11 -lodm11 -lcell11 -lnnet11 -lskgxp11 -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 -lknlopt `if /usr/bin/ar tv /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libknlopt.a | grep xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap11" ; fi` -lslax11 -lpls11  -lrt -lplp11 -lserver11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 `if [ -f /u01/app/oracle/product/11.2.0/dbhome_1/lib/libavserver11.a ] ; then echo "-lavserver11" ; else echo "-lavstub11"; fi` `if [ -f /u01/app/oracle/product/11.2.0/dbhome_1/lib/libavclient11.a ] ; then echo "-lavclient11" ; fi` -lknlopt -lslax11 -lpls11  -lrt -lplp11 -ljavavm11 -lserver11  -lwwg  `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lmm -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lztkg11 `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11   -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `if /usr/bin/ar tv /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libknlopt.a | grep "kxmnsd.o" > /dev/null 2>&1 ; then echo " " ; else echo "-lordsdo11"; fi` -L/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ -lctxc11 -lctx11 -lzx11 -lgx11 -lctx11 -lzx11 -lgx11 -lordimt11 -lclsra11 -ldbcfg11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 -locr11 -locrb11 -locrutl11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11  -loraz -llzopro -lorabz2 -lipp_z -lipp_bz2 -lippdcemerged -lippsemerged -lippdcmerged  -lippsmerged -lippcore  -lippcpemerged -lippcpmerged  -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lsnls11 -lunls11  -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lasmclnt11 -lcommon11 -lcore11 -laio    `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/11.2.0/dbhome_1/lib -lm    `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/sysliblist` -ldl -lm   -L/u01/app/oracle/product/11.2.0/dbhome_1/lib
test ! -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle ||\
           mv -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracleO
mv /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/oracle /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
chmod 6751 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
這裏注意我沒有監聽,如果你啓動了監聽注意停掉先,這裏看似很長其實只有一句命令make -f ins_rdbms.mk dv_off ioracle執行後面都是自動輸出的,繼續回到sqlplus界面

[oracle@oddpc lib]$ exit
exit

SQL> startup
ORACLE instance started.

Total System Global Area  585879552 bytes
Fixed Size                  1346476 bytes
Variable Size             352322644 bytes
Database Buffers          226492416 bytes
Redo Buffers                5718016 bytes
Database mounted.
Database opened.
SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                      VALUE
------------------------------ ------------------------------
Oracle Database Vault          FALSE


可以看到已經禁用了。如果服務器是windows 服務器,則只需要ORACLE_HOME/bin下重命名oradvll.dll 該文件即可完成啓用或者禁用。

禁用完以後我們就可以解鎖dvsys用戶或者進行其他所有的操作了。

注:在進行oracle補丁或者版本升級的時候最好禁用Database Vault 防止文件執行失敗。

如果想要重新啓動Database Vault的方法如下:

12C 使用dbv_owner用戶執行如下存儲過程

SQL> exec dbms_macadm.enable_dv;
11g 則在$ORACLE_HOME/rdbms/lib下執行如下命令

make -f ins_rdbms.mk dv_on lbac_on ioracle
兩種方法都需要重啓數據庫和監聽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章