1. 程式人生 > >sqlplus / as sysdba報錯ORA-01031: insufficient privileges的原因分析

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
[[email protected] product]$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper),503(asmadmin),504(asmdba)
而在備庫中只有oinstall的使用者組
[[email protected]_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)的設定存在問題的。註釋掉之後,再次登入就沒有問題了。
[[email protected]_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
看起來一個很簡單的問題,沒有很快解決,看起來還是有些尷尬啊,不過知道了原委,發現這些東西還是需要好好理解。

相關推薦

sqlplus / as sysdbaORA-01031: insufficient privileges原因分析

-------------------------轉載-------------- 今天碰到一個奇怪的小問題,看起來是一個非常簡單的問題。我先說一下問題背景。有一臺DB伺服器,因為需要搭建備庫,現在找了一臺已有的機器臨時用一下,這臺臨時的伺服器上已經安裝了Oracle軟體是

Oracle安裝後命令行中執行sqlplus / as sysdba出現錯誤ora-01031:insufficient privileges

Win10安裝Oracle後命令行中執行sqlplus / as sysdba出現錯誤ora-01031:insufficient privileges的解決方法 情景描述 剛剛在Win10

sqlplus / as sysdba ora-01031 insufficient privileges

今天在使用sqlplus / as sysdba登陸時,竟然報錯:ora-01031 insufficient privileges。當時我直接就納悶掉了,平時等的時候都好好的啊,怎麼現在就不行了。 這時我想,我這樣是屬於作業系統認證的登陸方法啊,而且使用者也是oracle

Oracle 11g連線sysdba出現ERROR: ORA-01031: insufficient privileges

      今天剛安裝好Oracle 11g,連線資料庫時出現了ERROR: ORA-01031: insufficient privileges       找到自己Oracle的安裝路徑,Oracle\product\11.2.0\dbhome_1\NETWORK\

ORA-01031: insufficient privileges(使用sqlplus / as sysdba登入時報

環境: 系統:Ubuntu 16.04 LTS docker.io docker 映象:wnameless/oracle-xe-11g 簡單記錄: 使用 docker 映象執行為容器之後沒有進行任何配置,接著進入 oracle 容器,當使用 sys 登入 Ora

[Oracle] sqlplus / as sysdba ora-01031 insufficient privileges

一. 問題描述 今天在新機子(WINDOWS)上搭建Oracle環境,完了之後通過SQL*PLUS本地登入時報錯: ora-01031 insufficient privileges   ——-許可權不足 二. 解決過程 錯誤排除 1. 當時首先想到的是oracl

windows下 sqlplus / as sysdba ora-12560的終極解決方法

原創 cmd home sysdba nbsp track software msd oca windows下 sqlplus / as sysdba 報ora-12560的終極解決方法 本文是原創文章。轉載請註明出處:http://blog.csdn.net

conn / as sysdba 出現ORA-01031: insufficient privileges的解決方案

一、檢查sqlnet.ora(WINDOWS下位於%ORACLE_HOME%NETWORKADMIN目錄)是否包含這句:SQLNET.AUTHENTICATION_SERVICES=(NTS),沒有的話加上  sqlnet.ora所在目錄(以Oracle 11g為例):

conn / as sysdba 出現ORA-01031: insufficient privileges 解決辦法

sysdba不能遠端登入這個也是一個很常見的問題了。  碰到這樣的問題我們該如何解決呢? 我們用sysdba登入的時候,用來管理我們的資料庫例項,特別是有時候,伺服器不再本臺機器,這個就更是有必要了。  當我們用sqlplus "/ as sysdba"  是可以登入

standby主從不同步,主庫ORA-01031: insufficient privileges

今天發現物理standby的從庫不能同步主庫的資料了,主庫報錯:ORA-01031: insufficient privileges ORA-01031: insufficient privileges PING[ARC2]: Heartbeat failed to co

windows server 2012 用sysdba登錄 ORA-01031

報錯 rom val test tin 用戶添加 用戶和組 part ise 報錯顯示:C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期三

使用SYS使用者遠端登陸許可權不足的解決:ORA-01031: insufficient privileges

1.監聽及tnsnames.ora正常,普通使用者使用服務名可以登陸資料庫。 [[email protected] admin]$ cat tnsnames.ora mypl =   (DESCRIPTION =     (ADDRESS = (PROTOCOL

ORA-01031: insufficient privileges

ora-01031: insufficient privileges一、問題描述通過sqlplus / as sysdba 無法登陸數據庫,提示權限不足。二、模擬測試1.現象sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue No

ora-01031:insufficient privileges/ v$pwfile_users

  ora-01031:insufficient privileges/ v$pwfile_users 2012年05月09日 14:40:31 aaaaaaaa2000 閱讀數:2436 今天在做dg的時候在主庫上使用sys連線主庫總是報ora-01031

oracle: 淺談orapwd命令,及解決遠端登入ORA-01031: insufficient privileges問題

1、先看下命令說明:orapwd Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

在Linux環境下設定 ora-01031:insufficient privileges解決方法總結

今天需要使用sys使用者處理問題,但是報錯上面ora-01031:insufficient privileges。 在網上有很多方法,這個是自己經過測試的方法步驟。 1:首先檢查檔案sqlnet.ora檔案是否設定正確(檔案地址就是你oracle安裝的目錄)# sqlnet

在Oracle資料庫啟動時提示沒有許可權 ora-01031:insufficient privileges

情況說明 環境:Linux 操作語句: [Oracle@ora11r2 ~]$ sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on Thu Jun 10 18:22:16 2010 Copyri

ora-01031:insufficient privileges解決方法總結

主要是 sqlnet.ora 檔案和 remote_login_passwordfile 引數影響。 一直以來,我記住的一個知識點就是:SQLNET.AUTHENTICATION_SERVICES=(NTS)是使用OS認證的必須條件之一。 今天一個偶然的機會,才知道這個結論是不完全準確的。 在本文的測試中,

oracle:sys、system 無法登入問題:ORA-01031: insufficient privileges

請輸入使用者名稱:  sys/sys as sysdbaERROR:ORA-01031: insufficient privileges 請輸入使用者名稱:  system/system as sysoperERROR:ORA-01031: insufficient pri

ora-01031:insufficient privileges解決方法總結 .

sqlplus "/ as sysdba" 連不上,報ora-01031:insufficient privileges解決方法 注意多個數據庫例項時候,set ORACLE_SID='', 1、檢查sqlnet.ora(WINDOWS下位於%ORACLE_HOME%N