@307086418
2020-03-18T02:58:31.000000Z
字数 5856
阅读 1442
未分类
该文件位于$ORACLE_HOME/dbs下,我们这里只谈论他的几个参数,其余用到再说
1. SQLNET.AUTHENTICATION_SERVICES=
ALL:两种方式都行NTS:操作系统身份验证NONE:只能通过输入用户名密码登录
2.NAMES.DIRECTION_PATH=(TNSNAMES,EZCONNECT)
这里只列举常用的两种TNSNAMES:利用tnsnames.ora里面的别名EZCONNECT:IP+端口
3.客户端限制
是否进行限制(默认no):
TCP.VALIDNODE_CHECKING
如:TCP.VALIDNODE_CHECKING=yes
限制客户端访问
TCP.EXCLUDED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.EXCLUDED_NODES=(finance.us.acme.com, mktg.us.acme.com, 144.25.5.25)
允许客户端访问,会覆盖限制访问
TCP.INVITED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.INVITED_NODES=(sales.us.acme.com, hr.us.acme.com, 144.185.5.73)
该参数是一个静态参数(不用记,试一下就知道了)
alter system set remote_login_passwordfile =
NONE:禁用口令密码文件(此时普通用户还是可以通过口令密码方式登录,口令密码文件只记录SYSDBA,SYSOPER这种身份的用户,若此时sqlnet.aauthentication_services 为nts/all,操作系统匿名登录可以,但是如果为NONE,则只有普通用户通过输入用户名密码登录)EXCLUSIVE:(默认值)独占模式使用密码文件,官档中提到了“only one instance of one database”使用exclusive方式,在数据库中可以执行对sysdba用户的增加、修改、删除、修改密码,这些都会被记录到口令密码文件中。SHARED:配置shared值的口令文件可以被一台服务器上的多个数据库或者RAC集群数据库共享;(现在知道exclusive模式时说的“only one instance of one database“的含义了吧,就是为了区分RAC环境)。shared下的口令密码,也就意味着不能增加sysdba身份的用户,也不能修改密码。
数据库层面的验证就是数据库用户名和密码的验证。这部分信息通常是保存在数据库文件内部,是数据字典的一部分内容。只有在数据库实例启动并且加载上的情况下,才可以访问到。
这是,就出现了一个矛盾。如果当前我的数据库系统没有启动,没法访问用户帐户信息。怎样进行登录?
我们通常的解决方法是使用telnet/ssh登录到服务器本地。使用conn / as sysdba连接上空实例,之后再启动。也就是利用操作系统层面的验证。那么,如果我不希望使用操作系统层面的验证,难道就没有办法登录实例了吗?
于是,密码文件就出现了。($ORACLE_HOME/dbs/orapwSID)
简单的说,密码文件就是一个保存在数据文件外的信息文件,可以在数据文件没有加载的时候被实例访问到。里面保存的就是用户名信息和密码信息,通常是那些执行启动、关闭等维护权限(sysdba/sysoper)用户的密码,如sys。
密码文件中的内容是二进制的,无法直接查看,可以通过v$pwfile_users查看(当然也可以用string查看orapwSID)
system是我后加上去的
首先,要说明的问题是,密码文件是驻留在数据库服务器上的一个文件。如果数据库是使用OUI安装的,密码文件是默认生成的。其中维护的具有SYSDBA管理权限的用户信息,也是随着系统运行自动维护的。
一般来说,是不需要我们直接进行密码文件的管理工作。但是有时候,当发生密码文件被破坏的时候,常常需要手工的重建密码文件。
“使用管理员帐号不能登陆”
有时候我们会发生这样的事情(在网上也经常看到这样的询问贴),需要启动数据库,但是输入了正确的用户名和密码不能登陆。这种问题的解决也比较通用。
1、 确认密码文件起效情况。密码文件就是一个物理文件,保存着可以在实例关闭时登录用户的帐号密码信息。但是是否使用密码文件就是需要系统参数来控制了。这个参数就是remote_login_passwordfile,其各种取值已经在前面讲述过了,这里就不累述。一般我们就确认为Exclusive或者NONE。如果不想使用密码文件,就是用NONE值。如果使用密码文件,就设置为Exclusive值。不使用密码文件,就只能使用操作系统层面验证,一般认为这样安全问题更大。所以,通常我们的设置都是exclusive;
2、 判断密码文件情况。可以通过视图v$pwfile_users来检查用户列表。如果检查不到或者信息有问题,就需要手工重新创建密码文件了。
创建密码文件
使用orapwd命令创建密码文件,具体语法格式和参数为:
ORAPWD file=[filename] password=[password] [entries=numberuser] [force=y/n] [ignorecase=y/n];
其中:
file表示生成文件的路径和名称(本参数是必须录入项目);
password表示sys用户的密码(必须录入项目),用来验证生成操作是否合法;
entries表示文件中允许容纳用户的最大数量。密码文件是容纳具有sysdba、sysoper等管理的用户信息,默认情况下是由sys在其中。实际生产环境下,是不可能使用sys如此权限的用户进行日常管理的。必然有一些自定义的数据库管理员和操作员,具有sysdba和sysoper权限。这些信息都要存放在密码文件中。Entries参数项目就是定义这个文件最大可以容纳的用户信息数量。Oracle官方文档中,建议设置这个值为一个高于实际需要的值,供日后拓展时使用;
force:是否覆盖已存在的密码文件。如果设置为Y,表示如果现在存在有密码文件,就覆盖掉。默认值为N;
gnorecase:忽视大小写。是保存密码的一种策略。如果设置为Y,表示忽视大小写。注意:在早期的Oracle版本中(包括10g),用户密码是不区分大小写的,输入之后,Oracle在内部全部按照大写处理。而这个不合时宜的特性在Oracle11g中进行了修正,默认情况下,已经支持大小写用户密码。


用户名、密码是我们最常见的安全验证策略方法,也是我们在各种应用系统软件中采用的最多的安全保护策略。对Oracle而言,以最大限度保护系统数据安全,是不可推卸的天然职责。
从最早版本到今天,Oracle在用户名和密码安全策略方面不断的加以改进,比如,进入11g之后,Default Profile要求定期进行用户密码修改操作,用户密码加密算法强化,以及对dba_users等数据字典视图进行优化改进。今天我们要讨论的是一种Oracle的另一种验证策略——OS验证策略。
这里,我们要进行一定澄清。最常见的OS验证策略,发生在Oracle服务器端的机器上。突出的表现是:如果我们通过了操作系统层面验证,也就是登录了服务器本机(Remote Desktop或者SecurCRT),Oracle就认为当前用户已经可以通过认证,不需要额外的数据库验证。当然,这要求操作系统用户归属在系统特定用户组,如Linux中的oinstall、dba。比如我们经常启动关闭服务器使用的conn /方式,就是这个类型登录验证方法。注意:通过在sqlnet.ora中参数的配置,我们是可以关闭这个特性的。
普通的OS验证策略两个特点:一个是服务器本地生效,客户端匿名登录无效。另一个只能登录为管理员sys,不能其他用户。那么,有没有方法实现客户端远程匿名登录,而且实现非sys用户呢?本篇我们就来介绍这个方法。
本次实验两个主要参数
1. 服务器端匿名登录配置实验(实验环境11g)
Oracle的OS层面验证,最直接的关联参数就是os_authent_prefix,默认取值为ops,如果此时数据库中包括一个为ops$oracle的用户,是可以在服务器端进行匿名登录的。
下面进行测试,当前Linux服务器端OS用户名为oracle,也是oinstall和dba组成员。
创建用户opsoracle,以sqlplus / as sysdba登录的是sys
但此时远程是无法匿名登录的
2. 远程匿名登录配置实验
远程匿名登录,Oracle默认是关闭的。这个在实际生产环境中非常有必要,远程客户端对于Oracle而言是不安全可靠的。如果希望开启,需要调整参数remote_os_authent。
注意:我们更改这个参数时重启Oracle报提示过期参数出现在实例启动环节,因为oracle时不推荐我们这样做的
创建操作系统同名的用户
然后测试

OS匿名验证这个特性出现的很早,是早期Oracle发展的一个方向。近些年的版本中,这个特性没有过多的发展,说明Oracle在这个方面已经不再过多延伸了。