sqlplus / as sysdba報錯ORA-01031: insufficient privileges的原因分析
今天碰到一個奇怪的小問題,看起來是一個非常簡單的問題。
我先說一下問題背景。有一臺DB伺服器,因為需要搭建備庫,現在找了一臺已有的機器臨時用一下,這臺臨時的伺服器上已經安裝了Oracle軟體是11.2.0.4.0,而我們需要安裝的備庫版本是11.2.0.3.0所以為了相容,所以需要在臨時的伺服器上再安裝一套Oracle軟體,把11.2.0.4的ORACLE_HOME切換過來,直接從主庫複製了安裝目錄,開始克隆安裝。
克隆安裝的步驟其實內部就是在做relink,當然這個也沒什麼問題,很快就操作完成了。
在$ORACLE_HOME/clone/bin下執行下面的命令即可,$ORACLE_HOME,$ORACLE_BASE根據需要配置
perl clone.pl ORACLE_BASE=/DATA/app/oracle ORACLE_HOME=/DATA/app/oracle/product/11.2.3/db_1 ORACLE_HOME_NAME=OraDb11g_home2
簡單驗證sqlplus -v沒有任何問題。
$ sqlplus -v
SQL*Plus: Release 11.2.0.3.0 Production
但是嘗試sqlplus / as sysdba的時候卻丟擲了一個錯誤。這個問題看起來比較奇怪,記得之前碰到過,但是全然不記得是怎麼處理的了。然後重新來過。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
這個步驟才開始驗證引數檔案,密碼檔案還沒有開始做校驗,為什麼會丟擲這個問題呢。但是使用sysoper就看起來沒有問題了。
$ sqlplus / as sysoper
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:21:07 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
對於這個問題,還得從幾個小的細節說起,一個就是作業系統認證,對於作業系統認證對於Windows和Linux,Unix都會有一些不同的設定,但是思路都是相通。
在Linux下對應有作業系統的使用者組,使得sysdba和作業系統使用者組繫結起來。至於哪個是dba組,哪個是oper組,為什麼sysoper就可以登入,而sysdba卻不可以。這個可以參考一個檔案。
為了突顯出對比的效果來,我找出了正常執行的主庫,config.c的內容如下:
$ORACLE_HOME/rdbms/lib/config.c
$ cat config.c
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
/* Refer to the Installation and User's Guide for further information. */
/* IMPORTANT: this file needs to be in sync with
rdbms/src/server/osds/config.c, specifically regarding the
number of elements in the ss_dba_grp array.
*/
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};
而在備庫機器上,config.c的內容如下:
$ cat config.c
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
/* Refer to the Installation and User's Guide for further information. */
/* IMPORTANT: this file needs to be in sync with
rdbms/src/server/osds/config.c, specifically regarding the
number of elements in the ss_dba_grp array.
*/
#define SS_DBA_GRP "dba"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};
由此一來,可以看出為什麼sysoper的可以正常登入了。
來簡單對比一下主庫的使用者組情況,發現確實存在一個使用者組為dba
[oracle@rolequery product]$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper),503(asmadmin),504(asmdba)
而在備庫中只有oinstall的使用者組
[oracle@BX_133_45 lib]$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
那麼這個問題怎麼修復呢,可以在備庫中建立一個對應的使用者組,然後把oracle使用者加入dba組中,
# groupadd dba
# usermod -a -G dba oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),505(dba)
這個時候最好還是再relink一下,還是使用克隆安裝的部分,不過需要在OraInventory中需要手工刪除一下原本的安裝資訊,刪除inventory.xml中的Oracle_HOME即可。
但是這個時候還是存在ORA-01031: insufficient privileges的問題,是修改的使用者的問題沒有解決徹底嗎。
其實還有一個就是sqlnet.authentication的服務認證,MOS(730067.1)是這麼描述的。
sqlnet.authentication_services must be set to (ALL) or to (BEQ, ) for this to work. On Windows this parameter must be set to (NTS).
這個時候再來看一看配置$ cat sqlnet.ora
# sqlnet.ora Network Configuration File: /home/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /DATA/app/oracle
所以SQLNET.AUTHENTICATION_SERVICES= (NTS)的設定存在問題的。註釋掉之後,再次登入就沒有問題了。
[oracle@BX_133_45 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:36:31 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
那麼是不是就是因為SQLNET.AUTHENTICATION_SERVICES直接導致的,使用者組不同行不行呢,都已經試到這個份上了,我就繼續玩玩。
刪除原有的dba組,再次嘗試就會看到原有的問題。
# groupdel dba
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
# su - oracle
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
我繼續想,是不是直接修改config.c就可以了,不需要再建立一個dba組了,行不行?
$ vi config.c
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
然後再次登入,發現還是有問題。所以這兩者在我的這個問題裡都是缺一不可。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:11:14 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
看起來一個很簡單的問題,沒有很快解決,看起來還是有些尷尬啊,不過知道了原委,發現這些東西還是需要好好理解。
我先說一下問題背景。有一臺DB伺服器,因為需要搭建備庫,現在找了一臺已有的機器臨時用一下,這臺臨時的伺服器上已經安裝了Oracle軟體是11.2.0.4.0,而我們需要安裝的備庫版本是11.2.0.3.0所以為了相容,所以需要在臨時的伺服器上再安裝一套Oracle軟體,把11.2.0.4的ORACLE_HOME切換過來,直接從主庫複製了安裝目錄,開始克隆安裝。
克隆安裝的步驟其實內部就是在做relink,當然這個也沒什麼問題,很快就操作完成了。
在$ORACLE_HOME/clone/bin下執行下面的命令即可,$ORACLE_HOME,$ORACLE_BASE根據需要配置
perl clone.pl ORACLE_BASE=/DATA/app/oracle ORACLE_HOME=/DATA/app/oracle/product/11.2.3/db_1 ORACLE_HOME_NAME=OraDb11g_home2
簡單驗證sqlplus -v沒有任何問題。
$ sqlplus -v
SQL*Plus: Release 11.2.0.3.0 Production
但是嘗試sqlplus / as sysdba的時候卻丟擲了一個錯誤。這個問題看起來比較奇怪,記得之前碰到過,但是全然不記得是怎麼處理的了。然後重新來過。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
這個步驟才開始驗證引數檔案,密碼檔案還沒有開始做校驗,為什麼會丟擲這個問題呢。但是使用sysoper就看起來沒有問題了。
$ sqlplus / as sysoper
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:21:07 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
對於這個問題,還得從幾個小的細節說起,一個就是作業系統認證,對於作業系統認證對於Windows和Linux,Unix都會有一些不同的設定,但是思路都是相通。
在Linux下對應有作業系統的使用者組,使得sysdba和作業系統使用者組繫結起來。至於哪個是dba組,哪個是oper組,為什麼sysoper就可以登入,而sysdba卻不可以。這個可以參考一個檔案。
為了突顯出對比的效果來,我找出了正常執行的主庫,config.c的內容如下:
$ORACLE_HOME/rdbms/lib/config.c
$ cat config.c
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
/* Refer to the Installation and User's Guide for further information. */
/* IMPORTANT: this file needs to be in sync with
rdbms/src/server/osds/config.c, specifically regarding the
number of elements in the ss_dba_grp array.
*/
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};
而在備庫機器上,config.c的內容如下:
$ cat config.c
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
/* Refer to the Installation and User's Guide for further information. */
/* IMPORTANT: this file needs to be in sync with
rdbms/src/server/osds/config.c, specifically regarding the
number of elements in the ss_dba_grp array.
*/
#define SS_DBA_GRP "dba"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};
由此一來,可以看出為什麼sysoper的可以正常登入了。
來簡單對比一下主庫的使用者組情況,發現確實存在一個使用者組為dba
[oracle@rolequery product]$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper),503(asmadmin),504(asmdba)
而在備庫中只有oinstall的使用者組
[oracle@BX_133_45 lib]$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
那麼這個問題怎麼修復呢,可以在備庫中建立一個對應的使用者組,然後把oracle使用者加入dba組中,
# groupadd dba
# usermod -a -G dba oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),505(dba)
這個時候最好還是再relink一下,還是使用克隆安裝的部分,不過需要在OraInventory中需要手工刪除一下原本的安裝資訊,刪除inventory.xml中的Oracle_HOME即可。
但是這個時候還是存在ORA-01031: insufficient privileges的問題,是修改的使用者的問題沒有解決徹底嗎。
其實還有一個就是sqlnet.authentication的服務認證,MOS(730067.1)是這麼描述的。
sqlnet.authentication_services must be set to (ALL) or to (BEQ, ) for this to work. On Windows this parameter must be set to (NTS).
這個時候再來看一看配置$ cat sqlnet.ora
# sqlnet.ora Network Configuration File: /home/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /DATA/app/oracle
所以SQLNET.AUTHENTICATION_SERVICES= (NTS)的設定存在問題的。註釋掉之後,再次登入就沒有問題了。
[oracle@BX_133_45 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:36:31 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
那麼是不是就是因為SQLNET.AUTHENTICATION_SERVICES直接導致的,使用者組不同行不行呢,都已經試到這個份上了,我就繼續玩玩。
刪除原有的dba組,再次嘗試就會看到原有的問題。
# groupdel dba
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
# su - oracle
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
我繼續想,是不是直接修改config.c就可以了,不需要再建立一個dba組了,行不行?
$ vi config.c
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
然後再次登入,發現還是有問題。所以這兩者在我的這個問題裡都是缺一不可。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:11:14 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
看起來一個很簡單的問題,沒有很快解決,看起來還是有些尷尬啊,不過知道了原委,發現這些東西還是需要好好理解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1969382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlplus "/ as sysdba" 連不上,報ora-01031:insufficient privileges解決方法SQL
- linux環境下sqlplus sys/sys@ORCL as sysdba報錯 ORA-01031: insufficient privilegesLinuxSQL
- SQL> conn sys/sys@vm_sigle as sysdba; 報ORA-01031: insufficient privileges錯誤SQL
- oracle rac dg庫報錯ORA-01031: insufficient privilegesOracle
- Oracle遠端登入報錯:ora-01031:insufficient privilegesOracle
- conn / as sysdba 出現ORA-01031: insufficient privileges 解決辦法
- ORA-01031: insufficient privileges錯誤解決方法
- SYS使用者登入Oracle報錯ORA-01031: insufficient privilegesOracle
- 儲存過程編譯報錯:PL/SQL:ORA-01031:insufficient privileges儲存過程編譯SQL
- [20240826]奇怪ORA-01031 insufficient privileges報錯.txt
- SYS遠端連線出錯ORA-01031:Insufficient privileges
- ORA-01031: insufficient privileges的解決方法
- ora-01031:insufficient privileges解決方法
- create view receive "ORA-01031: insufficient privileges"View
- Linux oracle ORA-01031: insufficient privilegesLinuxOracle
- Oracle 軟體克隆後sysdba登入提示沒有許可權ora-01031: insufficient privilegesOracle
- ORA-01031: 資料庫恢復時的insufficient privileges錯誤QS資料庫
- sys使用者遠端登入報ORA-01031 insufficient privileges
- Oracle所有者不是dba 引起sqlplus / as sysdba 登入報錯ORA-01031OracleSQL
- linux as 2.1 ORA-01031: insufficient privileges 解決方法Linux
- 在AIX 平臺下遇到ORA-01031: insufficient privilegesAI
- RMAN system 遠端連線 ORA-01031: insufficient privileges
- 11gR2 Restart Database SRVCTL啟動DB報ORA-01031: insufficient privilegesRESTDatabase
- sqlplus / as sysdba無法登入的奇怪報錯SQL
- Oracle的SYS使用者登入報許可權不足(ORA-01031: insufficient privileges)Oracle
- 再談ORA-01031 when sqlplus '/as sysdba'SQL
- ORA-01031: insufficient privileges重新配置sys登入密碼密碼
- sys使用者執行 grant授權提示ORA-01031: insufficient privileges
- oracle 10g linux 遠端登入 ORA-01031: insufficient privilegesOracle 10gLinux
- 使用SYS使用者遠端登陸報許可權不足的解決:ORA-01031: insufficient privileges
- SYSDBA and SYSOPER Privileges in Oracle [ID 50507.1]Oracle
- sqlplus / as sysdba登入提示ORA-01031: 許可權不足SQL
- sqlplus / as sysdba 提示許可權不足(ORA-01031)問題處理SQL
- sqlplus -prelim/ as sysdba用法SQL
- 隨筆 sqlplus / as sysdbaSQL
- sqlplus / as sysdba 登入報許可權不足 for windowsSQLWindows
- 建立資料庫時“Insufficient privileges”的解決方法DK資料庫
- windows 下用 as sysdba登陸報錯Windows