Oracle對於普通賬戶和超級管理員(指sysdba和sysoper)的認證機制不一樣,前者是通過數據字典,后者主要是通過操作系統驗證和密碼文件驗證。因此一般提到操作系統認證或密碼文件認證,針對的都是超級管理員的認證。
操作系統認證
對於操作系統認證,其實蠻簡單的,只需要將該用戶添加到dba(針對sysdba權限)或oper(針對sysoper權限)組中,就可以使用 "sqlplus / as sysdba"方式登陸
在Linux環境下,可通過以下命令添加屬組:usermod -g dba test -->>test是用戶名
能否使用操作系統身份認證,取決於$ORACLE_HOME/network/admin/sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的取值。
SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)
none : 表示關閉操作系統認證,只能密碼認證。
all : 操作系統認證和密碼認證均可。
nts : 用於windows平台。
當 SQLNET.AUTHENTICATION_SERVICES = none時,會報以下錯誤:
[oracle@node1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 9 23:14:18 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied
若用密碼登陸則沒有問題
[oracle@node1 admin]$ sqlplus sys/oracle as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 9 23:17:31 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL>
密碼文件認證
這種方式在實際環境中較為普遍,利用的是orapwd工具創建密碼文件。
在密碼文件認證中,有一個參數十分重要:remote_login_passwordfile,該參數有三個值,默認為exclusive
none----不使用密碼文件認證
exclusive---需要密碼文件認證 自己獨占使用
shared ---需要密碼文件認證 不同實例dba用戶可以共享密碼文件
密碼文件的默認位置為:$ORACLE_HOME/dbs
密碼文件的查找順序:orapw<sid> --> orapw --> Failure
所以在創建密碼文件時filename只能為orapw<sid>或者orapw
外部認證(External Authentication)
若對用戶采用外部認證,則只有用戶的賬號由Oracle管理,密碼和用戶登錄的認證則通過外部服務來管理。外部認證常見的有操作系統認證和網絡認證。
外部認證之操作系統身份驗證
此技術使用與操作系統用戶同樣的名稱創建Oracle用戶,但前面加上了os_authent_prefix參數指定的字符串,默認為ops$,下面我們來看看官檔對該參數的說明:
OS_AUTHENT_PREFIX specifies a prefix that Oracle uses to authenticate users attempting to connect to the server. Oracle concatenates the value of this parameter to the beginning of the user's operating system account name. When a connection request is attempted, Oracle compares the prefixed username with Oracle usernames in the database.
The default value of this parameter is OPS$ for backward compatibility with previous versions. However, you might prefer to set the prefix value to "" (a null string), thereby eliminating the addition of any prefix to operating system account names.
可見,用ops$只是為了向前兼容。
下面,我們來實驗一下。
一、創建操作系統用戶
[root@node1 ~]# useradd test
二、創建Oracle用戶並授予相應的權限
SQL> create user ops$test identified externally;
SQL> grant create session to ops$test;
三、用test用戶登錄數據庫
[test@node1 ~]$ /u01/app/oracle/product/11.2.0.4/db_1/bin/sqlplus / Error 6 initializing SQL*Plus SP2-0667: Message file sp1<lang>.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
報以上錯誤,根據提示,我們為ORACLE_HOME設置相應的值
在/home/test/.bash_profile中添加如下值:
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1
重新用test用戶登錄數據庫
[test@node1 ~]$ /u01/app/oracle/product/11.2.0.4/db_1/bin/sqlplus / SQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 10 01:14:53 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specified Enter user-name:
又報TNS:net service name is incorrectly specified錯誤。
懷疑沒有指定相應的SID,在/home/test/.bash_profile中添加如下值:
export ORACLE_SID=orcl
重新用test用戶登錄
[test@node1 ~]$ /u01/app/oracle/product/11.2.0.4/db_1/bin/sqlplus / SQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 10 01:18:22 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> show user USER is "OPS$TEST"
終於成功登錄!
這個是在本地環境下的操作系統認證,即test與oracle數據庫在同一個主機上。
倘若不在同一個主機上,必須將remote_os_authent設置為TRUE。
外部認證之網絡認證
Network authentication is performed using Oracle Advanced Security, which can be configured to use a third-party service such as Kerberos. If you are using Oracle Advanced Security as your only external authentication service, then the REMOTE_OS_AUTHENT parameter setting is irrelevant, becauseOracle Advanced Security only allows secure connections.
關於外部認證,我們來看看官方文檔的說明
1> More choices of authentication mechanism are available, such as smart cards, fingerprints, Kerberos, or the operating system. 2> Many network authentication services, such as Kerberos support single sign-on, enabling users to have fewer passwords to remember. 3> If you are already using some external mechanism for authentication, such as one of those listed earlier, then there may be less administrative overhead to use that mechanism with the database as well.
Easy Connect
[oracle@node3 ~]$ sqlplus system/oracle@192.168.2.12:1521/sz.being.com
其中,192.168.2.12是數據庫所在主機的IP,1521是數據庫所在主機的監聽端口,sz.being.com是數據庫提供的服務名
總結:
1> 操作系統認證優先於密碼文件認證。譬如在oracle用戶下,我用sqlplus 123/456 as sysdba也可登錄到數據庫中,即便123不是數據庫用戶。
2> 與Oracle數據庫在同一主機上的用戶,只需要知道用戶和密碼即可登錄數據庫,譬如在test1用戶下,執行sqlplus scott/tiger和sqlplus sys/oracle as sysdba均可登錄到數據庫,前者是通過數據字典進行驗證,后者通過密碼文件進行驗證。
參考文檔:
1. Database Administrator Authentication
2. Administering Authentication