1.在数据库未open状态下,登陆验证的是使用密码文件
验证测试 (通过命令:
orapwd file=orapwprod password=[密码] force=y,创建密码后
使用sqlplus sys as sysdba 登录时,密码验证的密码文件,不会验证数据库中sys的密码)
2.猜测:如果是使用dba权限登陆,是要验证密码文件(未验证)。
SQLNET.AUTHENTICATION_SERVICES 参数 default :ALL
linux 平台
SQLNET.AUTHENTICATION_SERVICES=none
官方解释:
-
none
for no authentication methods, including Microsoft Windows native operating system authentication. When is set to , a valid user name and password can be used to access the database.
使用 sqlplus / as sysdba 不能登陆
sqlplus sys as sysdba 密码可以登陆
sqlplus sys@192.168.56.52:1521/prod as sysdba 可以连接
sqlplus c##test 可以登陆
sqlplus c##test @192.168.56.52:1521/prod 可以连接
sqlplus c##test as sysdba 不能登陆(v$pwfile_user 只有sys用户)
sqlplus c##test @192.168.56.52:1521/prod as sysdba 不可以连接(v$pwfile_users 只有sys用户)
SQLNET.AUTHENTICATION_SERVICES=ALL
官方解释:all
for all authentication methods
使用sqlplus / as sysdba 可以登陆
sqlplus sys as sysdba 密码 可以登陆
as sysdba 这种方式优先使用os认证,不使用密码
使用sqldevloper sys用户 dba角色可以登陆
使用sqldevloper c#test 普通角色可以登陆 但是dba角色不能登陆
sqlplus c##test @192.168.56.52:1521/prod 不能登陆, as sysdba 也不能登陆
sqlplus sys@192.168.56.52:1521/prod as sysdba 不能登陆
使用带有ip的方式连接,都是验证的数据库的用户密码,不是密码文件。
总结:
本地连接 | 远程(不同主机)连接 | |||||||
OS身份 验证 | 使用密码文件 | 使用sqldevloper | sqlplus username/password@host[:port][/service_name][:server_type][/instance_name] | |||||
SQLNET. AUTHENTICATION_SERVICES值: | sqlplus / as sysdba | sqlplus sys as sysdba | sys dba角色 | 普通用户 | 普通用户 dba角色 | sys dba角色 | 普通用户 | 普通用户 dba角色 |
NONE | × | √ | √ | √ | × | √ | √ | × |
ALL(默认值) | √ | √ | √ | √ | × | √ | √ | × |
未设置 |
在参数REMOTE_LOGIN_PASSWORDFILE=exclusive ,v$pwfile_user 只有sys用户 的情况下。
(在未设置的情况下,使用sqlplus sys/“密码” as sysdba 不论密码输入什么都可以登陆,不知道为什么,奇怪)