1. AS SYSDBA就是以系统管理员的身份登录。此时忽略用户名跟密码。就算你SQLPLUS / AS SYSDBA,或者CONN / AS SYSDBA,没有用户名跟密码也是行的。
例如我新建用户jack,密码jackhub,没有授予任何权限登录oracle。
SQL> conn jack/jackhub as sysdba
Connected.
既然as sysdba连接会忽略用户名跟密码,那么此时连接上的user应该不是jack。
SQL> show user;
USER is "SYS"
可见,实际上是以SYS用户的角色登录的。
2. 验证方式,以上我们任何user都可以以sysdba的角色登录,好像是没有什么安全验证一样的,实际是配置问题。
将sqlnet.ora(位于$ORACLE_HOME/NETWORK/ADMIN目录中)中的sqlnet.ora文件中SQLNET.AUTHENTICATION_SERVICES参数决定验证方式。
这不是oracle的安全漏洞!!而是认证方式不同,一般对sysdba的管理有两种方式:操作系统认证和密码文件认证。
将SQLNET.AUTHENTICATION_SERVICES= (NTS),即选择了os认证方式。这样数据库的安全性就是基于操作系统的安全性之上的。既然用connect internal可以登入系统,那用connect XXXXX/XXXX as sysdba登入又何妨?