我们的实验分为本地登录和远程登录两个部分探讨。
本地登录
数据库服务器就在本地,或者管理人员使用telnet、ssh和远程桌面等远程登录到系统中。这种方式有一个共同的特点,就是需要输入数据库服务器所在操作系统的用户名和密码。从Oracle的角度看,就是经过操作系统层面的验证。
注意:如果是使用telnet、ssh和远程桌面技术进行系统登录,是要求安全访问协议的支持。
首先,我们在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博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-684589/ ,如需转载,请注明出处,否则将追究法律责任。