Oracle 数据库外部身份认证部分详解

Oracle 数据库外部身份认证

前言

Oracel 数据库外部身份验证即操作系统认证。即如果能登陆到操作系统那么无需其他验证就可以直接登陆OS上的oracle数据库。在安装oracle的服务器上可使用远程OS账户或本地OS账户登陆oracle,默认远程操作系统认证是关闭的。

如果使用外部身份验证创建用户账户,Oracle 会将身份验证委托给外部服务。它不会提示输入口令。就是使用与操作系统用户账户同样的名称创建 Oracle 用户账户,但在前面加OS_AUTHENT_PREFIX 实例参数指定的字符串,此参数默认为 OPS$ 字符串。如果访问本地的数据库的话,用户是需要被加到操作系统的相应用户组中即可,并且在数据库中有对应使用操作系统认证前缀的用户。

比如说,操作系统用户oracle,对应数据库中如果有 ops$oracle的用户存在, 那么此时就可以通过操作系统认证登陆。 只该用户登陆了操作系统,就无需使用用户名密码登陆数据库。

环境

系统:win10 + 数据库: Oracle 11g

1、配置文件

Oracle身份验证的方式通过sqlnet.ora这个文件来控制,默认路径为安装路径\product\11.2.0\dbhome_1\NETWORK\ADMIN,其中两个常用的参数作用:

1、 SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE/ALL),指定用户连接Oracle服务器时使用哪种验证方式。

NONE: 只允许口令文件认证,需要提供用户名及密码;

ALL: 作用是允许所有的登录方式;

NTS: 此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。

注: 如果不设置此参数,对Linux系统,默认支持OS认证和口令文件认证。对Windows系统,默认只支持口令文件认证,不支持OS认证。

2、 NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT),指定CLIENT NAME解析方法的次序,默认是(TNNAMES, ONNAMES, HOSTNAME)。

EZCONNECT连接方式: username/password@hostname:port/service_name 不需要通过tnsname.ora 文件解析;

TNNAMES: 可以通过tnsnames.ora文件解析获得需要访问的主机、端口、dbservice 等信息;

ONNAMES: 表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES;

HOSTNAME: 表示使用host文件,DNS,NIS等来解析。

修改文件: 用记事本打开该文件,一般是不允许修改的。所以右击属性,点击安全,点击编辑,如果在组或用户名里面没有Users(当前登录系统的用户),点击添加在输入对象名称框里输入Users,点击检查名称再确定。如果有的话就点击Users项,在下面的User的权限中勾选修改和读入再确定。(修改之后最好是把刚才改的权限改回来;修改之后的文件应该立即生效,不是很确定,尝试了半天也没有找到确定答案就放弃了)

修改如下(只要有NTS就能使用操作系统认证):
在这里插入图片描述

2、查看用户名及用户组

ORA_DBA组中的域用户和本地用户不需要Oracle用户名和密码就可以登录Oracle,而且该组的用户登录数据库后都具有SYSDBA权限,同理:ORA_OPER组中的成员具有SYSOPER角色的权限。原理是应该建立相应的操作系统组及用户加入该组,win10中我也没有找到具体的用户组的设置,报错说我这一版本将此设置应该到控制面板中的用户账户中查看,(结果弄了半天也没找到啥实质性的办法,猜想应该是安装数据库时默认将该系统的用户添加到了ORA_DBA组中,要么就是在创建操作系统认证前缀的用户时自动添加进去;此处不是很确定,尝试了半天也没有找到确定答案就放弃了,你可以自己试一下或找下正确的解决办法)。

1、查看本机当前用户名
查看本地用户名最简单的命令:
在这里插入图片描述
查看本地用户名的其它命令:
在这里插入图片描述
还可以在查看用户组的时候查看用户名:
在这里插入图片描述
2、查看用户组
在这里插入图片描述
可以看出本地用户已经添加到ora_dba组中。

3、修改注册表

如果想忽略域名认证用户名,可以在服务器端的OS里修改注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1
添加文字列OSAUTH_PREFIX_DOMAIN(注意是OSAUTH,好多直接是AUTH,没有用),值为FALSE。(这么做猜想应该是本地OS认证登录,要是远程OS认证登录(还要修改oracle的参数 remote_os_authent = TRUE)的话在创建操作系统认证前缀的用户时,如果当前用户是域用户,则名称为:域名\用户名,如果是本地计算机用户,则名称为:计算机名\用户名。比如:create “OPS$域名\用户名” identified externally;远程登录试了好长时间也没有弄出来最后也放弃了) 。当然为了安全不推荐这么做。

windows+R 输入regedit进入注册表,进行如下修改:
在这里插入图片描述

4、创建用户测试登录

如果需要实现远程登陆则需要设置 remote_os_authent=TRUE;Oracle的OS层面验证,最直接的关联参数就是os_authent_prefix,默认取值为 ops$ 。这种技术是建立在操作系统用户名与数据库用户名之间的映射规则上。如果尝试连接数据库的操作系统用户名在数据库中对应有一个 添加参数os_authent_prefix作为前缀的数据库用户那么就可以实现OS验证配置,缺省为空,Oracle8i以前,无该参数,而使用 OPS$ 作为用户名前缀。(Oracle用户名长度限制为30个字符)

1、 如下是查看参数和创建用户、给用户授权、查看用户的命令:
在这里插入图片描述
2、 测试登录并查看oracle用户
在这里插入图片描述
如上显示就是设置正确了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值