初始化引數REMOTE_LOGIN_PASSWORDFILE

bitifi發表於2017-03-09

初始化引數REMOTE_LOGIN_PASSWORDFILE設定Oracle資料庫的密碼驗證方式。

 

 

這個引數最常見的設定為EXCLUSIVE,這也是資料庫的預設設定:

bash-3.00$ ls -l orapwtest1
-rw-r-----   1 oracle   oinstall    1536 Apr 14 14:12 orapwtest1
bash-3.00$ export ORACLE_SID=test1
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 4 16 17:23:32 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> show parameter remote_login

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE
SQL> grant sysdba to test;

授權成功。

SQL> host
$ cd $ORACLE_HOME/dbs
$ ls -l orapwtest1
-rw-r-----   1 oracle   oinstall    1536 Apr 16 17:24 orapwtest1
$ strings orapwtest1
Z[\]
ORACLE Remote Password file
INTERNAL
8D7F004CD7D32C58
D3CE9AB10E42F19D
TEST
7A0F2B316C212D67

如果將REMOTE_LOGIN_PASSWORDFILE設定為NONE,則禁止密碼檔案驗證方式,新增SYSDBA許可權的時候系統會報錯:

$ exit

SQL> conn test/test@test1 as sysdba
已連線。
SQL> alter system set remote_login_passwordfile = none scope = spfile sid = 'test1';

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> conn test/test@test1 as sysdba
ERROR:
ORA-12514: TNS:
監聽程式當前無法識別連線描述符中請求的服務


SQL> conn / as sysdba
已連線到空閒例程。
SQL> startup
ORACLE
例程已經啟動。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             212523432 bytes
Database Buffers          557842432 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> grant sysoper to test;
grant sysoper to test
*
1 行出現錯誤:
ORA-01994: GRANT
失敗: 口令檔案缺失或已禁用


SQL> show parameter remote_login

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      NONE

可以看到將REMOTE_LOGIN_PASSWORDFILE設定為NONE,嘗試使用密碼檔案驗證方式登陸會失敗,且授權或回收SYSDBASYSOPER許可權會失敗。

如果將REMOTE_LOGIN_PASSWORDFILE設定為SHARED,則任何使用這個密碼檔案的資料庫都不能進行授權回收SYSDBASYSOPER許可權的操作,但是這些資料庫可以使用這個密碼檔案來進行驗證。

這種方式一般用於管理RAC資料庫,或者同一臺伺服器上的多個不同資料庫例項。

下面看一下將REMOTE_LOGIN_PASSWORDFILE設定為SHARED的情況:

SQL> alter system set remote_login_passwordfile = shared scope = spfile sid = 'test1';

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> conn / as sysdba
已連線到空閒例程。
SQL> startup
ORACLE
例程已經啟動。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             212523432 bytes
Database Buffers          557842432 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> conn test/test@test1 as sysdba
已連線。
SQL> grant sysoper to test;
grant sysoper to test
*
1 行出現錯誤:
ORA-01999:
口令檔案不能在 SHARED 模式下更新


SQL> show parameter remote_login

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      SHARED
SQL> exit
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
斷開
bash-3.00$ mv orapwractest1 orapwractest1.bak
bash-3.00$ ln orapwtest1 orapwractest1    
bash-3.00$ ls -l orapwractest1
-rw-r-----   2 oracle   oinstall    1536 Apr 16 17:24 orapwractest1
bash-3.00$ export ORACLE_SID=ractest1
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 4 16 18:07:35 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

已連線到空閒例程。

SQL> startup
ORACLE
例程已經啟動。

Total System Global Area 1603887104 bytes
Fixed Size                  2095208 bytes
Variable Size             741722008 bytes
Database Buffers          855638016 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> conn test/test@ractest1 as sysdba
已連線。
SQL> grant sysoper to test1;
grant sysoper to test1
                 *
1 行出現錯誤:
ORA-01917:
使用者或角色 'TEST1' 不存在


SQL> grant sysoper to test;

授權成功。

SQL> conn test/test@test1 as sysoper
已連線。

可以看到使用SHARED方式啟動的資料庫,可以利用密碼檔案進行驗證,但是不能授權或回收SYSDBASYSOPER許可權。

隨後,啟動另一個資料庫,且將這個資料庫的密碼檔案指向剛才test資料庫所使用的密碼檔案,這樣兩個資料庫就共享了同一個密碼檔案了。

不過對於TEST資料庫,採用了SHARED方式,因此不能執行SYSDBASYSOPER的授權,而對於RACTEST資料庫,採用了預設的REMOTE_LOGIN_PASSWORDFILE設定,因此可以對這個密碼檔案進行修改,而這個修改在另外的資料庫中,可以馬上生效。

如果將RACTEST資料庫也設定為SHARED方式啟動,那麼沒有資料庫可以修改這個密碼檔案了。

 

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

相關文章