我的測試環境是:
RedHat Linux as5.3+ORACLE11gr2
sqlnet.ora中配了一個認證(SQLNET.AUTHENTICATION_SERVICES)
[oracle@ocm ~]$ cd $ORACLE_HOME/network/admin
vi sqlnet.ora(具體内容如下:)
SQLNET.AUTHENTICATION_SERVICES=(all)
根據官方文檔對ALL解釋是:all for all authentication methods,是指所有的認證,那應包括作業系統認證,使用者名密碼認證。一會我們來一一驗證!!!
那麼我現在來測試一下:
我的監聽是:
[oracle@ocm ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-MAY-2013 11:36:19
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 01-MAY-2013 18:11:19
Uptime 0 days 17 hr. 25 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/ocm/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm.example.com)(PORT=1521)))
Services Summary...
Service "oca" has 1 instance(s).
Instance "ocm", status READY, has 1 handler(s) for this service...
Service "ocm" has 1 instance(s).
Service "ocp" has 1 instance(s).
The command completed successfully
我的tnsnames.ora是:
vi tnsnames.ora
gyj =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocm)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ocm)
)
)
1.第一種測試:作業系統認證,OK!可以登入資料庫!
[oracle@ocm ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 2 11:40:15 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
2.第二種測試:不走監聽的使用者名密碼認證,OK!可以登入資料庫!
[oracle@ocm ~]$ sqlplus gyj/gyj
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 2 11:41:16 2013
gyj@OCM>
3.第三種測試,走監聽的使用者密碼認證,報錯了!,不可以登入資料庫!
[oracle@ocm ~]$ sqlplus gyj/gyj@gyj
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 2 11:48:18 2013
ERROR:
ORA-12641: Authentication service failed to initialize
Enter user-name:
那我來試試tsnping,這個沒問題呀!
[oracle@ocm ~]$ tnsping gyj
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 02-MAY-2013 11:48:50
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/11.2.0/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ocm)))
OK (10 msec)
那我把sqlnet.ora中的認證這行注釋掉
[oracle@ocm admin]$ vi sqlnet.ora
再用走監聽的使用者密碼認證,OK!可以登入資料庫!
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 2 11:46:27 2013
要讨論訴話題就是:ALL怎麼了解?為啥走監聽的使用者密碼認證,就不行呢?還需要配什麼呢?對于 sqlnet.ora的知識點很多注意點,我們這裡就讨論認證ALL的用法?
我再來測試一下,我把LINUX端的作為資料庫伺服器,把windows端的作為資料庫用戶端:
這樣的環境,我要用WINDOWS端的oracle用戶端去連遠端的LINUX上的資料庫伺服器,隻能用走監聽的使用者密碼來連接配接資料庫:
好,那我在window端,配置sqlnet.ora的,直接把sqlnet.ora給重命名為sqlnet.ora.bak,使之不起作用:
D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN

用戶端成功登入遠端的資料庫
OK,成功登入資料庫了,對于sqlnet.ora在伺服器端我無須任何配置(對我現在讨論的問題來說,因為sqlnet.ora是個複雜的東東,是以我這裡隻讨論認證,并且是all),對于認證是在用戶端控制,說白了是自已控制自己的。。。
接下來,我再windows這裡再修重命名回 sqlnet.ora.bak ---->sqlnet.ora,并添加内容:
好我再從用戶端登入一把,看是否報錯:
果然報錯了。。。。。
其實這個問題跟平台無關,主要是想了解一下這個ALL,到底内部是幹嘛的。。。從英語翻譯上來說ALL是所有認證,難道走監聽的使用者名密碼就不屬于這個範圍之内嗎?
莫非Oracle用sqlnet.ora中的認證SQLNET.AUTHENTICATION_SERVICES= (ALL),用這個設定來控制遠端用戶端連接配接的資料庫嗎?????
還是另有其它配置??????