1. 程式人生 > >ora-01031:insufficient privileges/ v$pwfile_users

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:insufficient privileges的錯誤:

1、檢視引數 remote_login_passwordfile is set to SHARED or EXCLUSIVE
SQL> show parameter remote_login_passwordfile


NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
remote_login_passwordfile            string                            EXCLUSIVE---沒有問題


2、檢視使用密碼檔案的使用者中是否有sys使用者

SQL> select * from v$pwfile_users;


no rows selected


SQL> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled
沒有密碼檔案????馬上檢視是否存在密碼檔案

[

[email protected] dbs]$ pwd
/disk2/oracle/product/11.2.0/dbs

發現密碼檔案竟然是:orapwdmaildata---哎密碼檔案錯誤啊,應該是orapw開頭,結果多了d,重建密碼檔案

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID entries=10 password=password

那這裡面的這個檢視 v$pwfile_users到底有什麼作用那????

http://www.xifenfei.com/2025.html--轉載
 

一、V$PWFILE_USERS定義

V$PWFILE_USERS lists all 

users in the password file, and indicates whether the user has been granted the SYSDBA, SYSOPER, and SYSASM privileges.

Column      Datatype    Description

USERNAM    VARCHAR2(30) Name of the user that is contained in the password 

file

SYSDBA     VARCHAR2(5)  Indicates whether the user can connect with SYSDBA privileges (TRUE) or not (FALSE)

SYSOPER    VARCHAR2(5)  Indicates whether the user can connect with SYSOPER privileges (TRUE) or not (FALSE)

SYSASM     VARCHAR2(5)  Indicates whether the user can connect with SYSASM privileges (TRUE) or not (FALSE)

二、v$pwfile_users與密碼檔案關係

[[email protected] ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.3.0 Production on Sun Dec 4 19:08:06 2011

 

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

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

 

--檢視密碼檔案使用者許可權

SQL> select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

 

SQL> show parameter instance_name;       

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------

instance_name                        string      ora11g

 

--檢視系統級別檢視密碼檔案內容

SQL> !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

 

--建立新sysdba使用者,檢視檢視和密碼檔案變化

SQL> create user xff01 identified by xifenfei;

 

User created.

 

SQL> grant sysdba to xff01;

 

Grant succeeded.

 

SQL>  select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

XFF01                          TRUE  FALSE FALSE

 

SQL>  !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

--刪除密碼檔案

SQL> ! mv $ORACLE_HOME/dbs/orapwora11g $ORACLE_HOME/dbs/orapwora11g_bak

 

SQL> !ls $ORACLE_HOME/dbs/orapwora11g

ls: /opt/oracle/product/11.2.0/db_1/dbs/orapwora11g: 沒有那個檔案或目錄

 

--檢視檢視

SQL>  select from v$pwfile_users;

 

no rows selected

 

SQL>  ! mv $ORACLE_HOME/dbs/orapwora11g_bak $ORACLE_HOME/dbs/orapwora11g

 

SQL> !ls $ORACLE_HOME/dbs/orapwora11g

/opt/oracle/product/11.2.0/db_1/dbs/orapwora11g

 

SQL> select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

XFF01                          TRUE  FALSE FALSE

 

--改變sysdba使用者許可權,檢視內容變化

SQL> grant sysoper to xff01;

 

Grant succeeded.

 

SQL>  select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

XFF01                          TRUE  TRUE  FALSE

 

--密碼檔案內容無變化

SQL> !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

SQL> revoke sysdba from xff01;

 

Revoke succeeded.

 

SQL> select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

XFF01                          FALSE TRUE  FALSE

 

SQL> revoke sysoper  from xff01;

 

Revoke succeeded.

 

SQL> select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

XFF01                          FALSE FALSE FALSE

 

SQL> revoke sysoper  from xff01;

 

Revoke succeeded.

 

--回收sysdba,sysoper許可權後,檢視記錄消失

SQL> select from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----- -----

SYS                            TRUE  TRUE  FALSE

 

--密碼檔案內容無變化

SQL>  !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

--刪除其中sysdba使用者

SQL> drop user xff01;

 

User dropped.

 

--密碼檔案內容還是無變化

SQL>  !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

--重啟資料庫密碼檔案依然無變化

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> !strings $ORACLE_HOME/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

1、如果密碼檔案不存在或者名稱錯誤,查詢v$pwfile_users將得到空記錄
2、新增sysdba等許可權使用者,會記錄到密碼檔案和v$pwfile_users中
3、到回收sysdba等許可權使用者,密碼檔案記錄依然存在,但是v$pwfile_users中無對應記錄

三、遠端登入測試

--密碼檔案記錄存在,檢視不記錄不存在,登入失敗

[[email protected] ~]$ sqlplus xff01/xifenfei@ora11g as sysdba

 

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Dec 4 19:42:26 2011

 

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

 

ERROR:

ORA-01031: insufficient privileges

 

Enter user-name

 

--密碼檔案檢視記錄均存在,登入成功

[[email protected] ~]$ sqlplus sys/xifenfei@ora11g as sysdba

 

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Dec 4 19:42:10 2011

 

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

 

Connected to an idle instance.

是否能遠端登入,依照v$pwfile_users為準

四、建立密碼檔案

win:

orapwd file=%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora entries=3 password=manager force=y

linux:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID entries=3 password=manager force=y

 

1、驗證密碼檔案已經修改

SQL> create user xff01 identified by xifenfei;

 

User created.

 

SQL> grant sysdba to xff01;

 

Grant succeeded.

 

SQL> !md5sum $ORACLE_HOME/dbs/orapwora11g

04cedb56b62d94fd7e14124619722348  /opt/oracle/product/11.2.0/db_1/dbs/orapwora11g

 

SQL> !strings /opt/oracle/product/11.2.0/db_1/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

SQL> revoke sysdba from xff01;

 

Revoke succeeded.

 

SQL> !strings /opt/oracle/product/11.2.0/db_1/dbs/orapwora11g

]\[Z

ORACLE Remote Password file

INTERNAL

A1174901D667F113

18698BFD1A045BCC

XFF01

D32693095588EF4F

 

SQL> !md5sum $ORACLE_HOME/dbs/orapwora11g

1f6d120acb913a1877cfb0ab57702744  /opt/oracle/product/11.2.0/db_1/dbs/orapwora11g

2、檢視基表

SQL> col owner for a20

SQL> col object_name for a30

SQL> SELECT owner,object_name,object_type FROM DBA_objects WHERE object_NAME ='V$PWFILE_USERS';

 

OWNER                OBJECT_NAME                    OBJECT_TYPE

-------------------- ------------------------------ -------------------

PUBLIC               V$PWFILE_USERS                 SYNONYM

 

SQL> SELECT table_owner,TABLE_name FROM Dba_Synonyms a WHERE a.synonym_name='V$PWFILE_USERS';

 

TABLE_OWNER                    TABLE_NAME

------------------------------ ------------------------------

SYS                            V_$PWFILE_USERS

 

SQL> SELECT owner,object_name,object_type FROM dba_objects WHERE object_name='V_$PWFILE_USERS';

 

OWNER                OBJECT_NAME                    OBJECT_TYPE

-------------------- ------------------------------ -------------------

SYS                  V_$PWFILE_USERS                VIEW

 

SQL> set long 1000

SQL> set line 200

SQL> SELECT dbms_metadata.get_ddl('VIEW','V_$PWFILE_USERS','SYS'FROM DUAL;

 

DBMS_METADATA.GET_DDL('VIEW','V_$PWFILE_USERS','SYS')

--------------------------------------------------------------------------------

 

  CREATE OR REPLACE FORCE VIEW "SYS"."V_$PWFILE_USERS" ("USERNAME""SYSDBA""SYSOPER""SYSASM"AS

  select "USERNAME","SYSDBA","SYSOPER","SYSASM" from v$pwfile_users

 

SQL> select from v$fixed_table where name ='V$PWFILE_USERS';

 

NAME                            OBJECT_ID TYPE   TABLE_NUM

------------------------------ ---------- ----- ----------

V$PWFILE_USERS                 4294951116 VIEW       65537

 

SQL> select VIEW_DEFINITION from v$fixed_view_definition where view_name='V$PWFILE_USERS';

 

VIEW_DEFINITION

--------------------------------------------------------------------------------------------------------

select  USERNAME , SYSDBA , SYSOPER, SYSASM from GV$PWFILE_USERS where inst_id = USERENV('Instance')

 

SQL> select VIEW_DEFINITION from v$fixed_view_definition where view_name='GV$PWFILE_USERS';

 

VIEW_DEFINITION

------------------------------------------------------------------------------------------------------------

select inst_id,username,decode(sysdba,1,'TRUE','FALSE'),  decode(sysoper,1,'TRUE','FALSE'),

 decode(sysasm,1,'TRUE','FALSE')  from x$kzsrt where valid=1  and username != 'INTERNAL'

 

SQL> set line 100

SQL> desc x$kzsrt

 Name                                                  Null?    Type

 ----------------------------------------------------- -------- ------------------------------------

 ADDR                                                           RAW(8)

 INDX                                                           NUMBER

 INST_ID                                                        NUMBER

 USERNAME                                                       VARCHAR2(30)

 SYSDBA                                                         NUMBER

 SYSOPER                                                        NUMBER

 SYSASM                                                         NUMBER

 VALID                                                          NUMBER

 

SQL> col username for a10

SQL> select from x$kzsrt;

 

ADDR                   INDX    INST_ID USERNAME       SYSDBA    SYSOPER     SYSASM      VALID

---------------- ---------- ---------- ---------- ---------- ---------- ---------- ----------

00002B9563678690          0          1 INTERNAL            1          1          0          1

00002B9563678690          1          1 SYS                 1          1          0          1

00002B9563678690          2          1 XFF01               0          0          0          0

從這裡可以看出V$PWFILE_USERS檢視的基表是x$kzsrt,這裡和我們檢視的密碼檔案一樣,這些記錄都存在,而是在密碼檔案中有不被strings顯示的字元表示了賬號是否啟用,x$kzsrt.valid用1和0標示

https://blog.csdn.net/aaaaaaaa2000/article/details/7549901