1 說明
當我們使用PL/SQL工具以SYS用戶登錄數據庫時,發現提示密碼不正確:
ORA-01017: invalid username/password; logon denied
怎么辦?
2 直接修改登錄密碼
使用這個方法前,必須和數據庫管理員確認,確實是不記得密碼了,並且修改之后要告知其余使用人,密碼被修改,防止挨罵~~
在數據庫服務器,使用sqlplus / as sysdba,通過操作系統認證,直接登錄數據庫,這里不需要驗證密碼,然后修改SYS用戶密碼:
alter user sys identified by oracle;
這里是把SYS用戶密碼設置成了oracle。
3 修改認證方式
Oracle登錄驗證方式包括口令驗證和操作系統認證。
操作系統認證,就是Oracle認為操作系統用戶是安全的,在使用sqlplus登錄時,不校驗用戶密碼,直接登錄。
口令認證,就是指Oracle認為操作系統用戶是不安全的,需要通過口令文件進行賬號密碼驗證。Oracle的口令文件一般存放在$ORACLE_HOME/dba/目錄下,名字為orapw+sid。
Oracle通過初始化參數remote_login_passwordfile限制口令文件的使用,這里詳細介紹下:
1)NONE
remote_login_passwordfile=none表示,登錄時禁用口令文件驗證,sysdba用戶只能通過操作系統認證登錄數據庫,其他方式的登錄,比如PL/SQL,就會報前面提到的ORA-01017錯誤。
操作系統認證方式涉及sqlnet.ora($ORACLE_HOME/network/admin目錄下)中的參數SQLNET.AUTHENTICATION_SERVICES:
a) NONE:關閉操作系統認證,只能通過口令文件認證;----
b) ALL: linux/unix平台下,采用操作系統認證,但遠程sysdba登錄仍然需要口令文件認證。
c) NTS: windows平台下操作系統認證。
2) EXCLUSIVE
remote_login_passwordfile=exclusive表示,獨占模式使用口令文件,這個是默認值,用在單數據庫的單實例環境中。這種模式下,可以對sysdba用戶進行增加、修改、刪除,同時可以修改sysdba用戶密碼,記錄到密碼文件中。
查看被授予sysdba權限的用戶:
SELECT USERNAME FROM V$PWFILE_USERS WHERE SYSDBA='TRUE';
口令文件中添加/刪除sysdba權限用戶
REVOKE SYSDBA FROM non-SYS-user;
GRANT SYSDBA TO non-SYS-user;
3) SHARED
這種模式下,可以在多個數據庫間共享使用口令文件,口令文件不可被修改,包括不能修改sys用戶密碼。Oracle建議首先將需要sysdba權限的用戶在excusive模式下設置好,然后修改remote_login_passwordfile修改為shared共享口令文件。
修改方法:
alter system set remote_login_passwordfile=shared scope=spfile;
然后重啟數據庫。
通過上面分析,我們可以看到,如果PL/SQL登錄時,明明密碼是正確的,但是就是登錄不進去,並且說密碼不正確,我們就要在數據庫服務器上使用sqlplus登錄,然后查看系統參數remote_login_passwordfile是否啟動了可口令文件驗證,一般應該設置為exclusive。同時關注sqlnet.ora的參數SQLNET.AUTHENTICATION_SERVICES。
4 小結
SYS用戶忘記密碼,或者明明密碼正確,但是登錄時報密碼錯誤,不用愁了。