1、平时,我们大都通过客户端软件(比如PLSQL或者DBVisualizer等)去连接Oracle数据库(图1示),我们只需配置一下数据库的地址和账号密洁船诼抨码等信息即可连接并操作数据库。但有时,我们还是需要登录服务端机器来访问数据库处理一些问题,比如expdp或impdp操作,这时我们需要使用Oracle自身提供给我们的客户端工具 sqlplus 在Windows命令行中登陆数据库(图2示):sqlplus username/password ,那每次登陆都需要需要用户名和密码也太麻烦了吧?尤其是某些DBA将密码设置的真是复杂.....那这个命令是否可以简单点呢?
2、当然可以!我们甚至无需输入用户名和密码,使用命令: sqlplus / as sysdba ,神奇的情况出现了,直接登陆成功了(图1示)!我们可以通过运行 SQL : select user from dual ; 查看当前是使用哪个数据库账号登陆的系统(图2示),结果显示,使用的是 SYS 账号登陆的数据库系统,我们都知道这是一个超级管理员账号,权限很大,那为啥无需输入密码,就可以使用权限这么大的账号登陆呢?
3、其实Oracle也不是没做任何校验,其本质上“借用”了操作系统的权限校验功能。我们先来看看这台机器的用户组信息,在运行命令框中,输入 compmgmt.msc 命令(图1示),然后找到左侧菜单的 Group(用户组),在右侧明细中查看 ora_dba 这个用户组,我们看到其注释为 Oracle DBA Group (图2示)。
4、双击打开这个用户组,我们可以往这个组里添加Windows系统账号,我们也发现我们当前登陆系蕙蝤叼翕统的账号 Administrator 就在这个组中!(图1示)也就是说,但凡在这个组中的Windows系统账号登陆系统后,都可以使用 sqlplus 工具免密登陆 Oracle 数据库!这就是一条信任链,Oracle认为你既然已经在ora_dba这个组中(只有操作系统的管理员才可以往组中添加账号),并且你也能登陆操作系统了(言下之意就是你通过了操作系统的密码校验),那我何必再去校验一遍呢?这其实和多个Web应用之间的单点登陆类似,你登陆一次就已经证明你就是你了,我无需再去校验!