Oracle 身份驗證方式有如下幾種:
- 操作系統身份驗證
- 口令文件驗證
- 口令身份驗證
- 外部身份驗證
- 全局身份驗證
前兩項技術僅供管理員使用,最后一項技術要求使用 LDAP 目錄服務器。LDAP 目錄服務器是 Oracle Internet Directory(OID),作為 Oracle 應用服務器的一部分發布。
1. 操作系統和口令文件身份驗證
要為賬戶啟用操作系統和口令身份驗證(二者是相配的),必須為用戶授予 SYSDBA 或者 SYSOPER 權限:
GRANT [ sysdba | sysoper ] TO username ;
如果向用戶授予這些權限之一或者所有權限,則會將用戶口令從數據字典復制到外部口令文件中,此時,即使數據庫未處於打開狀態,實例也可以讀取口令。
要使用口令文件身份驗證,用戶可以在使用 SQL*Plus 時通過以下語法連接:
CONNECT username / password [ @db_alias ] AS [ SYSOPER | SYSDBA ] ;
注意,可使用口令文件身份驗證,通過 Oracle Net 連接到遠程數據庫。
要使用操作系統身份驗證,用戶必須被確認為有權限訪問 Oracle 二進制文件的操作系統用戶之后,且在使用 SQL*Plus 時通過以下語法連接之前首先登陸到數據庫服務器:
CONNECT / AS [ SYSOPER | SYSDBA ] ;
與 SYSDBA 和 SYSOPER 以同一種方式運行的第三種權限是 SYSSAM,此權限僅適用於 ASM 實例。
2. 口令身份驗證
在使用 SQL*Plus 時,通過口令身份驗證進行連接的語法如下:
CONNECT username / password [ @db_alias ]
這是 Oracle 一般用戶使用得最多的一種身份驗證方式。在使用口令身份驗證進行連接時,實例將針對在數據字典中的用戶賬戶存儲的口令。驗證給定的口令。為此,數據庫必須處於打開狀態;從邏輯上講,在使用口令身份驗證連接時,不可能發出 STARTUP 命令或者 SHUTDOWN 命令。不允許 SYS 用戶以口令身份驗證的方式進行連接,SYS 只能使用口令文件、操作系統或LDAP 身份驗證。
3. 外部身份驗證
如果使用外部身份驗證創建用戶賬戶,Oracle 會將身份驗證委托給外部服務。它不會提示輸入口令。如果為啟用 Advaned Security 選項,則唯一可以使用得外部身份驗證方形式是操作系統身份驗證。如前所述,這是 SYSDBA 和 SYSOPER 賬戶的要求,但也可以用於普通用戶。此技術使用與操作系統用戶賬戶同樣的名稱創建 Oracle 用戶賬戶,但在前面加料OS_AUTHENT_PREFIX 實例參數指定的字符串。此參數默認為 OPS$ 字符串。可以用下列語句查詢:
SQL> show parameter os_authent_prefix NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ os_authent_prefix string ops$ SQL> 或者: SQL> select value from v$parameter where name='os_authent_prefix' 2 / VALUE -------------------------------------------------------------------------------- ops$
創建外部操作系統身份驗證的用戶很簡單,假如有一個操作系統用戶名為 dragon,則:
對於 LINUX 系統: create user ops$dragon identified externally; 對於 WINDOWS 系統,假如登陸 ID 是 Dragon,域名是 MIS: create user "OPS$MIS\DRAGON" identified externally;
創建好用戶后,以 dragon 身份登錄到操作系統,然后在直接輸入:sqlplus / 進行登錄並連接到數據庫。
4. 全局身份驗證
一個用於管理身份的新興標准時使用 LDAP 服務器。Oracle Internet Directory(OID) 就是 Oracle 符合 LDAP 標准的一個產品,全局用戶就是在 LDAP 目錄中定義的用戶。
5. 跟身份驗證相關的幾個參數和配置
查看是否允許遠程登錄使用口令文件進行身份驗證,有三個取值: SHARED/EXCLUSIVE/NONE,為 NONE 的話表示不允許遠程使用口令文件驗證,如遠程用SYS賬號連接 Oracle 將會報錯,如下面。
SQL> show parameter remote_login_passwordfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE SQL>
SQL> alter system set remote_login_passwordfile='NONE' scope=spfile 2 / System altered. SQL> startup force 進行遠程連接,報錯,實際是參數值被更改: SQL> conn sys / ora10g @byisdb.rac1 as sysdba ERROR: ORA-01017: invalid username/password; logon denied
查看使用口令文件進行身份驗證的用戶列表:
SQL> select * from v$pwfile_users 2 / USERNAME SYSDB SYSOP ------------------------------ ----- ----- SYS TRUE TRUE
$ORACLE_HOME/network/admin/sqlnet.ora 配置文件中 SQLNET.AUTHENTICATION_SERVICES 參數,有三個取值:
- NONE:作用是不允許通過 OS 系統用戶登錄數據庫,需要提供用戶名及密碼;
- ALL:作用是允許所有的登錄方式;
- NTS:作用是允許本地操作系統用戶認證;