ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle sqlnet.ora相关认证问题

Oracle sqlnet.ora相关认证问题

原创 Linux操作系统 作者:qinwen740 时间:2010-04-30 16:50:55 0 删除 编辑
一、口令认证和操作系统认证

    使用操作系统认证方式的配置过程:
  1. 在操作系统中建立一个合法帐户。
   具体来说,在NT上:
    首先建立一个本地用户组,取名为ORA__DBA,其中SID为该数据库实例的SID,或者建立一个ORA_DBA地组,该组不对 应于任何一个单独的Oracle实例。这样当一个NT上有好几个Oracle实例时,不用分别管理。
   2. NT上建立一个用户,并且把它归入该组中。但是实际上这两步在Oracle8I安装过程中已经自动完成了,一般不用手动进行。
  3. :在sqlnet.ora(位于$ORACLE_HOME/NETWORK/ADMIN目录中)中,把  SQLNET.AUTHENTICATION_SERVICES 设置为NTS,意思为使用NT认证方式。
  4.在INIT.ORA中,把REMOTE_LOGIN_PASSWORD设置为NONE,意思是不用password认证方式。
  完成以上步骤后,就可以在登录到NT后,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)来作为超级用户登录到Oracle中,执行一些只有超级用户才能进行的操作。
    (备注:如果登陆域,该域帐号可能不能使用操作系统认证方式了)

  在Unix下,情况有些不同。毕竟这是两个完全不同的操作系统。
  首先,在安装Oracle之前,建立一个DBA组,这一步不用说了,不然是装不上Oracle的。一般还建立一个名为Oracle的用户,并把它加入到DBA组中。
  第二步, 设置参数REMOTE_LOGIN_PASSWORD为NONE。在Oracle8.1以后,该参数默认为EXCLUSIVE。一定要记得改过来。
  第三步, 用该用户名登录Unix,运行SQL*Plus 或者SERVER MANAGER,输入以下命令:CONNECT INTERNAL (CONNECT / AS SYSDBA)来登录到Oracle中。

    备注:经过自己试验,其实将REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE一样可以使用操作系统认证,可能这种时候,即可以本机用 sys登陆管理,也可以远端用connect string的方式以sys用户登陆管理。

  使用password文件认证的具体步骤:
  Oracle提供orapwd实用程序来创建password 文件,运用orapwd建立该认证方式的具体步骤如下:
  1. 使用Orapwd实用程序来创建一个PASSWORD文件。语法:
   orapwd file=文件名 password=internal用户密码 entried=entries.
  详细解释:
 
    文件名要包含完整的全路径名,如果不指定,Oracle把它默认放置$ORACLE_HOME/dbs(Unix下)或者$ORACLE_HOME/DATABASE(NT下)下。
  用户密码是用户internal的密码。当然后来还可以再向里边加入别的超级用户。
  Entries表示最大允许有的超级用户数目。这个是一个可选的。前两者是必须指定的。一般会把它设置的比实际需要大一些,以免不够。

  2. 把INIT.ORA中REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有当前INSTANCE使用这个password文件。而且允许有别的用户作为sysdba登录进系统里 边,而若选择了SHARED,则表明不止一个实例使用这个密码文件,伴随着一个很强的约束:sysdba权限只能授予sys和internal这两个用户 名。(其实internal不是一个实际用户,而只是sys作为sysdba登录时的一个别名。)
  同时还要记得把sqlnet.ora文件中SQLNET.AUTHENTICATION_SERVICES设置为NONE。一般在Unix下它是默认 设置。在NT下,若选择典型安装时,会使用OS认证,而自定义时会使用密码文件认证方式。在安装过程中会提示输入INTERNAL密码。这样的话,就不用 在手工创建密码文件和设定INTERNAL的密码了。

  3. 用SQL*Plus 或SERVER MANAGER运行下面命令登录进系统:CONNECT INTERNAL/密码。

  注意:
  1.在Oracle8.1.6安装在WIN2000下创建数据库时,常常会发生凭证检索失败的错误。这是由于Oracle不能应用OS认证的结果。一 般可以通过修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES为NONE来解决。这时,Oracle将采用密码文件认证方式。

  2.由于Oracle有几个系统预建的用户,所以最好在安装完成以后马上改变这些用户的密码。系统默认得密码分别为:internal/oracle , sys/change_on_install, system/manager.

   3.当选择密码文件认证方式时,可以再向系统中加入其他超级用户。比如用以下语句把用户SCOTT加入超级用户之中:(由具有sysdba权限的人执行)

        SQL>GRANT SYSDBA TO SCOTT;这样SCOTT用户就具有了sysdba权限。注意,此时SCOTT用户可以以两种身份登录:SCOTT , SYS.当SCOTT在登录时没有输入AS SYSDBA时,SCOTT是作为普通用户登录的。而当登录时输入了AS SYSDBA时,此时SCOTT登录进去的用户实际上为sys。

  4. 当前系统中的具有sysdba权限的用户名可以从数据字典视图v$pwfile_users中查询得到: SELECT * FROM V$PWFILE_USERS;
   
    5. 系统中最大的具有sysdba权限的用户数由创建密码文件时的ENTRIES参数决定。当需要创建更多的具有sysdba权限的用户时,就需要删除原有的 密码文件,重新创建一个。这需要关闭数据库,删除密码文件,重新创建一个新的密码文件,在entries中输入足够大的数目。再启动Oracle。这时, 所有原来被授权的超级用户都不再存在,需要重新授权。所以在重新创建密码文件前,先要查询该视图,记下用户名,再在创建完密码文件后重新授权。

  6. Internal用户密码忘记的处理方法:
  有两种办法:
  a. ALTER USER SYS IDENTIFIED BY 新密码;//这同时也改变了Internal的密码
  b. 重新创建一个新的密码文件,指定一个新的密码。

   remote_login_passwordfile = shared的含义
 
  
我们看一下Oracle9i文档中的说明:
  SHARED:   More than one database can use a password file. However, the only user recognized by the password file is SYS.
   
意思是说多个数据库可以共享一个口令文件,但是只可以识别一个用户:SYS

  那么你可能会有这样的疑问,多个Exclusive的数据库是否可以共享一个口令文件(orapw)呢?

  实际上是这样的: Oracle数据库在启动时,首先查找的是orapw的口令文件,如果该文件不存在,则开始查找,orapw的口令文件如果口令文 件命名为orapw,多个数据库就可以共享.

二、NAMES.DEFAULT_DOMAIN参数
 
在 用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假 如该参数存在,则将该参数中的值取出,加到网络服务名的后面,即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com ,然后再到tnsnames.ora文件中找test.server.com网络服务名,这当然找不到了,因为该文件中只有test网络服务名,所以报 错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 test网络服务名,然后取出其中的host,port,tcp,service_name,利用这些信息将连接请求发送到正确的数据库服务器上。
在windows平台上安装数据库时,常常会根据登陆的域名自动将sqlnet.ora文件中的names.default_domain参数设置为域名。

三、 name.directory_path参数

客户端的sqlnet.ora 有一个功能,说明连接的字符串是基于主机命名还是本地命名方法,就是使用这个参数。


四、 设置IP保护
如果要在网络上做一些IP地址的限制,一般情况下我们首先想到的是用网络层的防火墙软件。要找网管来设置。但是如果网管不在,或者仅仅想在数据库层来实现IP地址的限制,DBA们只要修改Server端的一个网络配置文件sqlnet.ora文件就可以了。
    
  tcp.validnode_checking=yes
  #允许访问的ip
  tcp.invited_nodes =(ip1,ip2,……)
  #不允许访问的ip
  tcp.excluded_nodes=(ip1,ip2,……)

修改sqlnet.ora后,重新启动listener服务,改动就可以生效了。
如果我们从未允许的IP客户端连接过来,会出现以下错误:

 ERROR: ORA-12537: TNS: 连接已关闭
     
这种在Oracle网络层实现客户端IP访问限制的方法在防火墙后面的公司内部网或者托管机房的内部网里可以采用。

五.SQLNET.INBOUND_CONNECT_TIMEOUT 参数

 
SQLNET.INBOUND_CONNECT_TIMEOUT is set to a value in seconds and
determines how long a client has to provide the necessary authentication information to a database.

即表示客户端向数据库提交提供必要的认证信息的超时时间限制,这个参数常常和ORA-3136错误有关。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15688952/viewspace-661727/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-11

  • 博文量
    47
  • 访问量
    138274