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
两种方法都需要重启数据库和监听。

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