ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 说说密码文件Passwordfile(三)

说说密码文件Passwordfile(三)

原创 Linux操作系统 作者:realkid4 时间:2011-01-24 23:18:14 0 删除 编辑

我们的实验分为本地登录和远程登录两个部分探讨。

 

本地登录

数据库服务器就在本地,或者管理人员使用telnetssh和远程桌面等远程登录到系统中。这种方式有一个共同的特点,就是需要输入数据库服务器所在操作系统的用户名和密码。从Oracle的角度看,就是经过操作系统层面的验证。

 

注意:如果是使用telnetssh和远程桌面技术进行系统登录,是要求安全访问协议的支持。

 

首先,我们在sqlnet.ora文件中,设置禁止使用OS层面验证。

 

# sqlnet.ora Network Configuration File: D:\oracle\network\admin\sqlnet.ora

# Generated by Oracle configuration tools.

 

# This file is actually generated by netca. But if customers choose to

# install "Software Only", this file wont exist and without the native

# authentication, they will not be able to connect to the database on NT.

 

SQLNET.AUTHENTICATION_SERVICES= (NONE) //设置为禁用

 

 

连接空闲实例,并且尝试登录启动。

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1 24 22:30:50 2011

 

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

 

SQL> conn / as sysdba

ERROR:

ORA-01031: insufficient privileges //由于禁用了OS层面验证,所以使用/登录失败;

 

 

之后,只能通过密码文件进行验证了。

 

SQL> conn sys/sys as sysdba;

已连接到空闲例程。 //登录入系统

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             218106756 bytes

Database Buffers          385875968 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

 

//验证密码文件项目

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

SCOTT                          TRUE  FALSE

 

 

结论:在登录入数据库操作系统之后,在没有OS层面验证的情况下,使用密码文件是很方便的验证方式。但是,请注意下面一个代码片段。

 

[oracle@oracle11g ~]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Sun Jan 23 22:03:30 2011

 

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

 

SQL> conn sys/sys as sysdba; //顺利登录

Connected to an idle instance.

SQL> conn sys/sys@orcl as sysdba; //登录失败

ERROR:

ORA-12541: TNS:no listener

 

Warning: You are no longer connected to ORACLE.

 

 

我们使用默认ORACLE_SID连接时候,是成功的。但是使用本地命名服务名称,就是报错。这个问题我们留待下面探讨,毕竟在这种方式下,我们顺利的启动了数据库。

 

远程连接

 

我们这里说的远程连接。是指在远程计算机上,通过Oracle客户端连接数据库实例,进行数据库操作。我们在这里实验使用密码文件验证登录名称的方法。

 

首先,我们尝试连接服务器。

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1 24 22:45:51 2011

 

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

 

SQL> conn sys/sys@wilson as sysdba; //因为在远程机器上,我们无法回避使用本地命名服务

ERROR:

ORA-12541: TNS: 无监听程序 //找不到服务器上的监听器

 

 

我们之前谈过,本地命名服务就是与监听器取得联系的方式信息。如果监听器没有启动,也就无从谈起连接。所以,我们取得了远程连接的一个结论:

 

如果要进行远程连接启动,必须保证数据库服务器的监听器程序是启动的。

 

[oracle@oracle11g ~]$ lsnrctl start

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-JAN-2011 22:09:42

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Starting /u01/oracle/bin/tnslsnr: please wait...

 

TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /u01/oracle/network/admin/listener.ora

Log messages written to /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                23-JAN-2011 22:09:42

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/oracle/network/admin/listener.ora

Listener Log File         /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

The listener supports no services

The command completed successfully

 

 

之后,再次尝试连接。

 

SQL> conn sys/sys@wilson as sysdba;

ERROR:

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

 

 

修改起了作用,连接找到了监听器程序。但是监听器程序对于wilson对应的服务名(同名为wilson)并不识别。注意监听器程序下的“The listener supports no services”提示。监听器启动了,但是没有接到任何服务信息。

 

这就与监听器的动静态注册机制相关了。现在普遍使用的是动态注册方式,在实例启动的时候,PMON后台进程主动向监听器进行注册。但是现在实例根本没有启动,怎么进行动态注册呢?所以,需要考虑静态注册方法。

 

这里不累述监听器知识,有兴趣可以参阅笔者“说说监听器”系列

http://space.itpub.net/17203031/viewspace-682627)。

 

修改监听器文件listener.ora,加入静态注册信息。

 

[oracle@oracle11g ~]$ vim /u01/oracle/network/admin/listener.ora

 

# listener.ora Network Configuration File: /u01/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

 (SID_LIST =

   (SID_DESC =

     (GLOBAL_DBNAME = wilson)

     (ORACLE_HOME = /u01/oracle)

     (SID_NAME = wilson)

   )

 )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = oracle11g)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER = /u01

 

 

设置静态注册信息之后,重新启动监听器程序。

 

[oracle@oracle11g ~]$ lsnrctl stop

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-JAN-2011 22:19:41

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))

The command completed successfully

[oracle@oracle11g ~]$ lsnrctl start

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-JAN-2011 22:19:54

 

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

 

Starting /u01/oracle/bin/tnslsnr: please wait...

 

TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /u01/oracle/network/admin/listener.ora

Log messages written to /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                23-JAN-2011 22:19:54

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/oracle/network/admin/listener.ora

Listener Log File         /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

Services Summary...

Service "wilson" has 1 instance(s).

  Instance "wilson", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

 

 

注册上一个服务,但是状态是UNKNOWN。再次尝试连接。

 

//可以连接上了

SQL> conn sys/sys@wilson as sysdba;

已连接到空闲例程。 //空闲实例

SQL> startup  //启动数据库

ORACLE 例程已经启动。

 

Total System Global Area  414298112 bytes

Fixed Size                  1336904 bytes

Variable Size             310380984 bytes

Database Buffers           96468992 bytes

Redo Buffers                6111232 bytes

数据库装载完毕。

数据库已经打开。

 

 

结论:如果是希望远程登录连接,使用密码文件验证。需要有两个隐含保证:一个是监听程序启动,另一个是静态注册数据库服务信息。两个条件是实现远程登录管理的前提条件。

 

笔者认为,从实用角度看,远程连接的实际意义较差。尤其是静态注册的前提要求,现在普遍使用的是动态注册。通常我们使用操作系统验证外加本地登录密码文件验证,就已经可以满足一般的需要了。

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

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7745725