重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天我们简单分析一下Oracle的数据验证机制。在Oracle中,登录数据库服务器是需要进行验证的,通常验证的层次有两个,操作系统OS层次和数据库服务器验证方式。
成都创新互联公司是工信部颁发资质IDC服务器商,为用户提供优质的内蒙古服务器托管服务
我们登录到数据库服务器所在主机后,常常使用下一种方式登录,即使当时数据库实例没有启动。
SQL> conn / as sysdba;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS
没有输入用户名和密码,我们也可以登录DBMS。进一步实验,我们可以发现,即使我们输入错误的密码,也会顺利登录系统。
SQL> conn sys/ddd@orcl as sysdba;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS
但是,这种特性在另一种方式下,就会失效。
SQL> conn sys/wrongcod@orcl;
Not logged on
说明:在某种方式下,sys用户以sysdba身份登录时,是可以绕过DBMS验证机制,直接登入系统。
控制这个功能的参数,在sqlnet.ora(NETWORK\ADMIN)的文件中。有一个参数SQLNET.AUTHENTICATION_SERVICES,用来表示这种验证机制。在Oracle 11g的文档(Oracle Net Services Reference)中,对该参数的说明如下:
“Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services. If authentication has been installed, it is recommended that this parameter be set to either none or to one of the authentication methods. ”
上述说明中,该参数用于指定验证服务的方式。可以设置为多种验证方式,乃至安全验证方法,默认值为none。
取值方面,分为两个层次,OS验证和Oracle Advanced Security。OS验证层次有三个取值:
验证取值 |
含义 |
备注 |
none |
不使用任何验证方式。只能通过合法用户名密码登录系统; |
默认值,如果不在sqlnet.ora中设置,该值就是取值; |
all |
针对所有的验证方法; |
在windows和Linux等多平台均可使用; |
nts |
针对windows NT平台特有验证方式; |
只在windows中使用; |
此外,在Oracle中,还定义了kerberos5、radius和dcegssapi等高级验证机制。设置的方式我们在windows平台上常常看到的:
SQLNET.AUTHENTICATION_SERVICES=(nts)
如果我们将这部分值设置为none,就可以关闭只通过OS进行验证的功能。当我们把这个设置关闭后,尝试登录:
SQL> conn / as sysdba;
ERROR:
ORA-01031: 权限不足
SQL> conn sys/ddd@orcl as sysdba;
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
通过OS进行验证的登录被拒绝,有一点要注意。虽然sqlnet.ora是一个文本文件,但是修改过之后,无需重新启动DBMS就可以直接生效。
有一个问题需要注意一下,我们默认的OS验证登录,本质上并不是不验证,而是通过操作系统层面进行验证。在windows中,安装oracle的用户会自动的加入到一个ora_dba的组中。操作系统层面验证就是验证当前用户是否属于ora_dba组,进行操作。在Unix/Linux中,也存在一个oinstall的组,执行操作也要隶属在该组用户中。
最后,我们要注意,Oracle的这个验证参数是一个容易出现问题的安全漏洞。如果非法用户设法攻破了主机用户名和密码,而Oracle恰恰设置了单一的OS验证,数据库的安全性毫无可言。所以,从安全性的角度看,起码要将这个设置为none,并且将sqlnet.ora文件的修改权限上升为root用户专有,拒绝一般用户修改,拒绝这种单一的验证方式。