您好,登錄后才能下訂單哦!
密碼文件(password file)是一個可選的文件,允許遠程SYSDBA或管理員訪問數據庫。
啟動Oracle時,還沒有數據庫可以用來驗證密碼。在本地系統上啟動Oracle時,Oracle會利用操作系統來執行這種認證。安裝Oracle時,會要求完成完成的人指定管理員“組”。在Unix/Linux上,這個組一般默認為dba,在Windows上默認為OSDBA,不過也可以是平臺上任何合法的組名。這個組很特殊,因為這個組中的任何用戶都可以作為SYSDBA連接Oracle,而無需指定用戶名或密碼。
[root@rhel6 ~]# id mysql uid=496(mysql) gid=495(mysql) groups=495(mysql),500(oinstall) [root@rhel6 ~]# su - mysql -bash-4.1$ export ORACLE_HOME=/u02/app/oracle/product/11.2.4/db1 -bash-4.1$ export ORACLE_SID=orcl -bash-4.1$ cd $ORACLE_HOME/bin -bash-4.1$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 15 21:32:05 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied Enter user-name: ^C -bash-4.1$ su Password: [root@rhel6 bin]# usermod -G dba mysql [root@rhel6 bin]# id mysql uid=496(mysql) gid=495(mysql) groups=495(mysql),501(dba) [root@rhel6 bin]# exit exit -bash-4.1$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 15 21:32:36 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options sys@ORCL>show user USER is "SYS"
現在可以連接數據庫做管理工作,或啟動關閉數據庫。如果要從另外一臺機器通過網絡完成這個操作會怎么樣呢?下面我使用@連接串來連接:
C:\Users\victor>sqlplus /@orcl as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 21:42:04 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied
在網絡上,對于SYSDBA的操作系統認證不再奏效,即使把很不安全的REMOTE_OS_AUTHENT參數設置為TRUE也不例外。所以操作系統認證不可行。因此密碼文件應運而生了。
密碼文件保存了一個用戶名和密碼列表,這些用戶名和密碼分別對應于通過網絡遠程認證為SYSDBA的用戶。Oracle必須使用這個文件來認證用戶,而不是數據庫中存儲的正常密碼列表。
下面驗證這種情況。首先,設置REMOTE_LOGIN_PASSWORDFILE,有三個值:NONE,意味著沒有密碼文件,不存在“遠程SYSDBA登錄”、SHARED,多個數據庫可以使用同樣的密碼文件、EXCLUSIVE,只有一個數據庫使用一個給定的密碼文件。這里設置為EXCLUSIVE。
alter system set remote_login_passwordfile=exclusive scope=spfile;
修改這個參數需要重啟數據庫。
使用orapwd創建和填寫這個初始的密碼文件,密碼文件位于$ORACLE_HOME/dbs目錄中。
[oracle@rhel6 dbs]$ which orapwd /u02/app/oracle/product/11.2.4/db1/bin/orapwd [oracle@rhel6 dbs]$ orapwd Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n> where file - name of password file (required), password - password for SYS will be prompted if not specified at command line, entries - maximum number of distinct DBA (optional), force - whether to overwrite existing file (optional), ignorecase - passwords are case-insensitive (optional), nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only). There must be no spaces around the equal-to (=) character. [oracle@rhel6 dbs]$ pwd /u02/app/oracle/product/11.2.4/db1/dbs [oracle@rhel6 dbs]$ orapwd file=orapw$ORACLE_SID password=oracle entries=20 [oracle@rhel6 dbs]$ ls -l orapw$ORACLE_SID -rw-r----- 1 oracle oinstall 3584 Dec 15 21:55 orapworcl
目前該文件中只有一個用戶,也就是用戶SYS,盡管數據庫上還有其他SYSDBA賬戶,但它們還不在密碼文件中。不過基于以上設置我們可以作為SYSDBA通過網絡連接Oracle,即使Oracle沒有啟動,并且可以遠程啟動Oracle。
C:\Users\victor>sqlplus sys/oracle@orcl as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:00:24 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. 已連接到空閑例程。 SQL> startup ORACLE 例程已經啟動。 Total System Global Area 784998400 bytes Fixed Size 2257352 bytes Variable Size 754978360 bytes Database Buffers 20971520 bytes Redo Buffers 6791168 bytes 數據庫裝載完畢。 數據庫已經打開。
注意:如果上邊這一步遇到ORA-12505 "TNS:listener does not currently know of SID given in connect descriptor"說明沒有配置數據庫實例的靜態監聽。
創建了密碼文件,那我們能不能看看密碼文件里到底記錄了什么內容呢,會不會把我們的密碼泄漏呢?
密碼文件是一個二進制文件是不能直接查看的,Linux上可以使用strings命令查看
[oracle@rhel6 dbs]$ strings orapworcl ]\[Z ORACLE Remote Password file INTERNAL AB27B53EDC5FEF41 8A8F025737A9097A mHD2
從輸出可以看出密碼文件中沒有使用明文記錄我們的密碼而是記錄了一些串碼。
其實這個密碼文件還和數據庫中的一個視圖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. USERNAME 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) sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE --給用戶zx賦予SYSDBA權限可以看到v$pwfile_users多了一條記錄,而密碼文件orapworcl也多了一行串碼。 sys@ORCL>grant sysdba to zx; Grant succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE FALSE FALSE sys@ORCL>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl ]\[Z ORACLE Remote Password file INTERNAL AB27B53EDC5FEF41 8A8F025737A9097A mHD2 7B06550956254585 --給用戶zx賦予SYSOPER的權限,可以看到v$pwfile_users的zx行狀態發生了變化,但是orapworcl沒有變化 sys@ORCL>grant sysoper to zx; Grant succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE TRUE FALSE sys@ORCL>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl ]\[Z ORACLE Remote Password file INTERNAL AB27B53EDC5FEF41 8A8F025737A9097A mHD2 7B06550956254585 --移除密碼文件再移回來,移除密碼文件后v$pwfile_users變為空,移回后v$pwfile_users又有記錄。 sys@ORCL>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl sys@ORCL>select * from v$pwfile_users; no rows selected sys@ORCL>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE TRUE FALSE --測試zx用戶遠程以SYSDBA登錄 C:\Users\victor>sqlplus zx/zx@orcl as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:34:09 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show user; USER 為 "SYS" --回收用戶zx的SYSDBA和SYSOPER權限,v$pwfile_users中的zx記錄行沒有了,密碼文件orapworcl沒有變化 sys@ORCL>revoke sysdba,sysoper from zx; Revoke succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE sys@ORCL>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl ]\[Z ORACLE Remote Password file INTERNAL AB27B53EDC5FEF41 8A8F025737A9097A mHD2 7B06550956254585 --再次測試zx用戶遠程以SYSDBA登錄,現在無法登錄 C:\Users\victor>sqlplus zx/zx@orcl as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:35:17 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied
參考:http://www.xifenfei.com/2011/12/vpwfile_users%E5%92%8C%E5%AF%86%E7%A0%81%E6%96%87%E4%BB%B6%E5%85%B3%E7%B3%BB.html
《9i10g11g編程藝術 深入數據庫體系結構》
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。