sqlnet.ora:服务端和客户端都可能存在
sqlnet.ora最常用的两个功能是:
1)连接方式: 用于指定客户端的名称解析查询的命名方法的顺序
NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
2)认证方式:SQLNET.AUTHENTICATION_SERVICES
1、认证方式参数SQLNET.AUTHENTICATION_SERVICES
三种认证方式:
1) SQLNET.AUTHENTICATION_SERVICES = (NTS)
这个只对WINDOWS上有用了,操作系统认证,无需输入用户名和密码可登录sys
2)none for no authentication methods. A valid username and password can be used to access the database.
如果设置成(NONE),就表示采用数据库身份验证,还可以设置成(NONE,NTS),其实这样设也没有意义了,只要括号中有NTS,就会采用操作系统验证,NONE就没有用了
3)all for all authentication methods
当客户端与服务端SQLNET.AUTHENTICATION_SERVICES=(ALL)无法 用AA/BB用户名密码登陆。有一边是NONE即可连接
a、服务器端不配置SQLNET.ORA文件,在客户端配置SQLNET.AUTHENTICATION_SERVICES=(ALL),可以正常登陆。
sqlplus 用户名/密码@网络服务名 方式可以登录
b、当客户端与服务端同时配置:SQLNET.AUTHENTICATION_SERVICES=(ALL)无法用AA/BB用户名密码登陆
sqlplus 用户名/密码@网络服务名 方式和简易连接都不可以登录 会报ORA-12641错误
c、将客户端或服务器的之一的sqlnet.ora 改为SQLNET.AUTHENTICATION_SERVICES=(NONE),即可连接
sqlplus用户名/密码@网络服务名 方式和简易连接都可以登录
d、SQLNET.AUTHENTICATION_SERVICES参数注释的情况下
sqlplus 用户名/密码@网络服务名 方式和简易连接都可以登录
2、NAMES.DIRECTORY_PATH(SQLNET.AUTHENTICATION_SERVICES=(none)或者该参数注释)
1)NAMES.DIRECTORY_PATH=(tnsnames),此时只能使用tnsnames中本地名,简易连接将报错,也就是客户端就只会从tnsnames.ora查找你要连接的字符串(网络服务名)记录,如果tnsname.ora文件中没有此记录,则连接不上数据库
sqlplus 用户名/密码@网络服务名 --使用本地名可以连接
sqlplus 用户名/密码@IP或主机名:端口/server_names 使用简易连接的方法,不能连,会报ORA-12154
--默认端口1521情况下,可不加端口号,即sqlplus 用户名/密码@IP或主机名/server_names
2)NAMES.DIRECTORY_PATH=(tnsnames,hostname),此时使用tnsnames中本地名和简易连接都可以
客户端首先会从tnsnames.ora查找你要连接的字符串(如orcl)记录,如果tnsname.ora文件中没有此记录,则尝试把你要连接的字符串(如orcl)当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=连接字符串(如orcl)这个实例,当然这里连接字符串(如orcl)并不是一个主机名,最后会尝试以ezconnect的方式连接数据库
3)NAMES.DIRECTORY_PATH=(tnsnames,ezconnect),此时使用tnsnames中本地名和简易连接都可以
4)该配置在注释的情况下,使用tnsnames中本地名和简易连接都可以;此情况如果没有tnsname.ora,本地名无法连接,简易连接可以