Oracle外部身份认证研究

本文详细介绍了Oracle数据库的外部身份认证机制,包括密码文件认证、操作系统认证等多种认证方式的配置与使用方法。针对不同场景提供了具体步骤,如本地与远程操作系统用户认证的区别,以及如何配置相关参数实现特定认证需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle外部身份认证研究

密码文件认证          操作系统认证                  remote_login_passwordfile   SQLNET.AUTHENTICATION_SERVICES     

     Y                           Y                                  EXCLUSIVE                                        NTS

     Y                           X                                   EXCLUSIVE                                       NTS

     X                           Y                                   none                                                 NONE

     X                           X                                   none                                                 NONE

 

密码文件:本地登陆时如果密码文件被删掉了,那么本地登陆使用数据库内部字典加密密码进行验证。

               在远程登陆如果没有密码文件,是不允许sysdba和sysoper权限登陆的 。但是其它用户可以登陆。

总结:密码文件其实就是为了让远程计算机能够进行远程sys登陆进行管理的。

(!!!!!!系统默认是使用密码文件的!!!!!!!!)

至于本地使用密码文件管理,需要1。先创建密码文件,通过orapwd命令

                                             2。参数remote_login_passwordfile=EXCLUSIVE

                                             3。授权用户sysdba和sysoper权限

至于本地使用不使用密码文件管理,需要1。直接删掉密码文件。路径一般在$ORACLE_HOME/dbs或者$ORACLE_HOME/database

                                                            密码文件名为:orapwSID.ora

                                                      2.remote_login_passwordfile=none

                                                      3. 远程sys具有sysdba和sysoper权限用户无法登陆。其它用户可以登陆。

                                                     

至于本地使用操作系统认证(外部认证),需要1。本地的sqlnet.sql打开

                                                              2。SQLNET.AUTHENTICATION_SERVICES=(NTS) (此选项对操作系统外部认证无效)

至于本地使用数据库内部认证(数据库认证),需要1。本地的sqlnet.sql打开

                                                                    2。SQLNET.AUTHENTICATION_SERVICES=(NONE) (对操作系统外部认证无效)

至于本地使用操作系统用户认证(外部认证.使用操作系统用户方式直接登陆)

                                                            1。参数os_authent_prefix=ops$

                                                            2。create user ops$oracle identified externally;--oracle为用户名

                                                            3。登陆:su - oracle

                                                            4. sqlplus /

至于远程使用操作系统用户认证(外部认证,远程直接登陆)

                                           1。remote_os_authent =TRUE

                                           2。参数os_authent_prefix=ops$

                                           3。create user ops$administrator identified externally;--administrator为远程windows用户名

                                           4。登陆sqlplus /@z--z连接字符串

 

 

 

                                                            

                                                             

 

 

 

 

 

 

   

实验:

1。initnbo.ora参数文件中设置了

*.remote_login_passwordfile='EXCLUSIVE'

2。口令文件命令:

orapwd file='orapwnbo' password=a entries=5 force=y

3。sqlnet.ora

#SQLNET.AUTHENTICATION_SERVICES= (NTS,NONE)(不使用)

4。用sys登录:

SQL> conn sys/a as sysdba
Connected.
SQL> conn sys as sysdba
Enter password:(这里回车不输密码)
Connected.
SQL>

5。修改sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS,NONE)(使用)

 强调: (在linux上这一条规则失效,也就是说加上这一条规则后,无管你设置成NONE或者NTS,linux都是需要你按数据库认证来的。)

6.用sys登录:

SQL> conn sys/a as sysdba
Connected.
SQL> conn sys as sysdba
Enter password:
ERROR:
ORA-01031: insufficient privileges


Warning: You are no longer connected to ORACLE.

7。提示符提示符

[oracle@zx ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 13 15:11:04 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:
ORA-01031: insufficient privileges


Enter user-name: sys/a as sysdba

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> exit

 

 

 

 

 

 —————————————————————————————————————————————————————————————

 


 

 以下是网上摘录

 

 

 

一、服务器上使用操作系统验证
1.配置SQLNET.ORA文件
参数NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
表明解析客户端连接时所用的主机字符串的方式
TNSNAMES:表示采用TNSNAMES.ORA文件来解析
ONAMES:表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES
HOSTNAME:表示使用host文件,DNS,NIS等来解析

参数SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)
(这个文件只对本地登陆采用何种方式起作用)
 强调: (在linux上这一条规则失效,也就是说加上这一条规则后,无管你设置成NONE或者NTS,linux都是需要你按数据库认证来的。)
 
表明用户连接Oracle服务器时使用哪种验证方式
NONE表示Oracle数据库身份验证,
NTS表示操作系统身份验证,
两个参数都存在时,表示两种方式可以并用

2.建立相应的操作系统组及用户加入该组
ORA_DBA组中的域用户和本地用户不需要Oracle用户名和密码就可以登录Oracle
而且该组的用户登录数据库后都具有SYSDBA权限
(多个实例时,可以建立类似这样的组ORA_SID_DBA,其中SID指实例名)
同理:ORA_OPER组中的成员具有SYSOPER角色的权限。

3.登录方式
C:/>sqlplus “/ as sysdba”
或者C:/>sqlplus nolog,然后SQL>connect / as sysdba

4.init.ora中的Remote_Login_Passwordfile对身份验证的影响
三个可选值:
NONE:
默认值,指示Oracle系统不使用密码文件,通过操作系统进行身份验证的特权用户拥有SYSORA和SYSOPER权限
EXCLUSIVE:
 1.表示只有一个数据库实例可以使用密码文件
 2.允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户
SHARED:
1.表示可以有多个数据库实例可以使用密码文件
2.不允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户
所以,如果要以操作系统身份登录,Remote_Login_Passwordfile应该设置为NONE

REMOTE_LOGIN_PASSWORDFILE 这个参数只对:本地使用。

(是否使用密码文件: none:不使用密码文件;EXCLUSIVE:反之

(认证方式选择:none:只要是操作系统认证用户都具有sysdba.sysopa权限,EXCLUSIVE:反之

(是否允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户:none:不允许;EXCLUSIVE:反之



5.当登录用户不是ORA_DBA组和ORA_OPER组成员时,登录数据库
需要在Oracle中创建当前操作系统用户相同的用户名,如果当前用户是域用户,则名称为:domainname/yourname,
如果是本地计算机用户,则名称为:computername/yourname
创建方法:
create "domainname/yourname" identified externally;
grant connect to "domainname/yourname";
Windows操作系统,修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0下面添加OSAUTH_PREFIX_DOMAIN,值设为FALSE,在创建Oracle用户时可以忽略掉域名
这种方式下,init.ora中有一个参数将影响数据库如何匹配一个windows用户和Oracle用户
os_authent_prefix = ""
缺省为空,Oracle8i以前,无该参数,而使用OPS$作为用户名前缀.(Oracle用户名最大长度限制为30个字符)

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
二、远程客户端使用操作系统验证
首先需要在init.ora文件中设置如下参数:
REMOTE_OS_AUTHENT=TRUE
Oracle不推荐在远程客户端上使用操作系统验证,因为客户端验证时不是通过服务器上的操作系统用户来验证,而是使用客户端自己怕操作系统来进行windows验证,这样,客户端可以采用建立对应的windows机器名和用户名的方式来欺骗Oracle的操作系统验证.
例如:
创建了如下Oracle用户
create "zl/zyk" identified externally;
grant connect to "zl/zyk";
如果有一台名为ZL的机器,创建了一个名为zyk的用户,并以此登录连接Oracle服务器(连接时使用/@OracleSTR),无需用户名和密码
造成此问题的原因是,Oracle使用客户端操作系统进行验证,它无法区别zl是域名还是机器名.

Windows &.net杂志2004第7期(http://www.winnetmag.com/Windows/Articles/ArticleID/42280/pg/1/1.html)
作者在文章中强调(第三页最后一段):
Oracle数据库服务器上的windows身份认证很容易实施,并且使已登录的用户访问数据库很方便
但是,这种验证模型并不适合远程客户端,因为安全隐患太大。

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
三、Oracle 9i对操作系统身份认证支持的增强
Oracle 9i可以与活动目录集成,通过Oracle Enterprise Security Manager 管理用户权限
Enterprise user authentication做为一种新的外部集中认证模式
(也叫 global user authentication,Oracle 9i以前的External user authentication仅仅采用了客户端操作系统本地认证)
Oracle9i运行在一个win2000及以上的域中,注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMEID,参数OSAUTH_X509_NAME设置为true
(默认为false,如果该参数不存在,则新增为REG_EXPAND_SZ类型)
注意:Windows NT 4.0 domain 不支持这种方式

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值