Oracle系列:连接到Oracle服务器

Oracle系列:连接到Oracle服务器

一个用户连接到一台数据库服务器时,就成为该数据库的客户端,二者可以在同一台机器上存在。

一,配置Oracle服务器端
 1,配置监听器
  ①监听器监听并接收客户端请求,将请求传递给数据库服务器处理。
  ②或使用Net Configuration Assistant 和 Net Manager工具完成配置。
  ③监听器配置文件存储在Listener.ora文件中。
    9i为(默认安装): oracle/ora92/network/admin 目录下。
    10g为(默认安装):oracle/product/10.1.0/Db_1/NETWORK/ADMIN 目录下。
    
    以10g为例子(见Listener.ora文件):
    SID_LIST_LISTENER =
       (SID_LIST =
         (SID_DESC =
            (SID_NAME = PLSExtProc)
            (ORACLE_HOME = D:/oracle/product/10.1.0/Db_1)
            (PROGRAM = extproc)
         )
       )
      
    LISTENER =
       (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)
              )
            )
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP)(HOST = qfs515)(PORT = 1521)
              )
            )
          )
       )
   
   将其中的某些参数(比如PORT,GLOBAL_DBNAME,SID_NAME,ORACLE_HOME等)改为真实数据即可。
  一般修改(ADDRESS = (PROTOCOL = TCP)(HOST = qfs515)(PORT = 1521)
  HOST:主机名 或IP地址;
  PORT:监听的端口号,默认监听TCP/IP协议的1521端口;
 
 2,启动监听器。
  9i(默认安装) : 启动OracleOraHome92TNSListener服务。
  10g(默认安装):启动OracleOraDb10g_home1TNSListener服务。
  如果配置错误,启动监听器时就会报错:The listener supports no services;
 
二,配置Oracle客户端

 1,配置主机字符串
  ①对网络协议,与协议相关的信息和数据库SID名称的描述。
  ②配置文件存储在tnsnames.ora文件中。
   9i为(默认安装): oracle/ora92/network/admin 目录下。
   10g为(默认安装):oracle/product/10.1.0/Db_1/NETWORK/ADMIN 目录下。

以下面配置文件内容为例子(见tnsnames.ora文件)
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = qfs515)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

   
 ORCL:主机字符串名。
 HOST:要连接到的服务器主机名 或IP地址;
 PORT:监听器端口号,
 SERVICE_NAME:数据库实例名(SID)
 
 2,启动实例。
  配置一个服务名与网络监听器建立联系,通过服务名登录到Oracle服务器。
  在安装Oracle数据库时,必须指定一个全局数据库名,Oracle用指定的数据库名在 服务器端 自动创建一个服务名.
  如上面配置的主机字符串ORCL。
  启动配置好的服务:OracleService主机字符串名,例如OracleServiceORCL ,OracleServiceSRK
  启动成功,就连接到数据库服务器端了。


综合例子:

SQLPLUSW  /nolog

--服务器端启动监听器服务
$net start OracleOraHome92TNSListener

--客户端启动主机字符串为ORCL的实例服务
$net start OracleServiceORCL

 

下一文:Oracle系列:Oracle用户管理

有问题请联系:[email protected] 谢谢!

下面是关于监听器安全的摘录:

---------------------------------------------------------------------------------------------
关于监听口令及监听器安全

来源:赛迪网

 

    相关示例:

D:/>lsnrctl stop eygle

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-11月-2007 10:02:40

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=eygle)))
命令执行成功

    大家可以发现,此时缺省的监听器的日志还无法记录操作地址:

No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
28-NOV-2007 09:59:20 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=stop)
(ARGUMENTS=64)(SERVICE=eygle)(VERSION=169870080)) * stop * 0

    为了更好的保证监听器的安全,大家最好为监听设置密码:

[oracle@jumper log]$ lsnrctl     

LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 28-NOV-2007 10:18:17

Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> set current_listener listener
Current Listener is listener
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
Password changed for listener
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
Saved LISTENER configuration parameters.
Listener Parameter File  /opt/oracle/product/9.2.0/network/admin/listener.ora
Old Parameter File  /opt/oracle/product/9.2.0/network/admin/listener.bak
The command completed successfully
 
    在我们设置密码后,远程操作将会因缺失密码而出现失败:

D:/>lsnrctl stop eygle

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-11月-2007 10:22:57
Copyright (c) 1991, 2006, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)
(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=eygle)))
TNS-01169: 监听程序尚未识别口令

    注意:此时在服务器端或客户端,都需要我们通过密码来起停监听器:

LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
The command completed successfully
LSNRCTL> start
Starting /opt/oracle/product/9.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 9.2.0.4.0 - Production
System parameter file is /opt/oracle/product/9.2.0/network/admin/listener.ora
Log messages written to /opt/oracle/product/9.2.0/network/log/listener.log
Trace information written to /opt/oracle/product/9.2.0/network/trace/listener.trc
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 9.2.0.4.0 - Production
Start Date                28-NOV-2007 10:22:23
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level              support
Security                  ON
SNMP                      OFF
Listener Parameter File  /opt/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File        /opt/oracle/product/9.2.0/network/log/listener.log
Listener Trace File      /opt/oracle/product/9.2.0/network/trace/listener.trc
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
Services Summary...
Service "eygle" has 1 instance(s).
  Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
Service "julia" has 1 instance(s).
  Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
 
    另外,ADMIN_RESTRICTIONS参数也是一个重要的安全选项,大家可以在 listener.ora 文件中设置 ADMIN_RESTRICTIONS_ 为 ON,此后所有在运行时对监听器的修改都将会被阻止,所有对监听器的修改都必须通过手工修改listener.ora文件才能顺利完成。


Oracle监听器在安全上是一个比较薄弱的环节,容易被利用和攻击,下面是采取的一些对策:

   来源:http://tech.it168.com/db/o/2006-07-03/200607031942610.shtml

1. 设置监听器口令 [强制]

    设置监听器口令可以防止大多数的攻击。这通常是一个简单的处理。可以用 lsnrctl 设置口令,口令将被加密存储在 listener.ora文件中。也可以 通过手工编辑 listener.ora 文件,加入“PASSWORDS_<listener name>”参数,但这样做存储的是明文的口令。

   
   
   
   
LSNRCTL > set current_listener < listener name > LSNRCTL > change_password Old password: < hit enter if no password is set > New password: < enter new listener password > Reenter new password: < enter new listener password again > LSNRCTL > set password Password: < enter listener password > LSNRCTL > save_config

     检查 listener.ora 文件的 PASSWORDS_<listener name> 参数。

    2. 打开日志 [强制]

    为所有监听器打开日志跟踪监听器命令和对口令的暴力破解。

   
   
   
   
LSNRCTL > set current_listener < listener name > LSNRCTL > set password Password: < enter listener password > LSNRCTL > set log_directory < oracle_home path >/ network / admin LSNRCTL > set log_file < sid name > . log LSNRCTL > set log_status on LSNRCTL > save_config

    3. 在listener.ora中设置 admin_restrictions [强制]

    通过在文件 listener.ora 中设置 ADMIN_RESTRICTIONS_<listener name> 为 ON 可以阻止所有在运行时对监听器的修改。这个参数禁止所有的 set 命令,无论是在本地还是在远程。所有对监听器的修改都必须通过手工修改 listener.ora 文件来完成。

   
   
   
   
LISTENER.ORA ADMIN_RESTRICTIONS_ < listener name > = ON

    使用 lsnrctl reload 命令重启监听器使上面的修改生效。以后在对 listener.ora 文件修改后,使用 lsnrctl reload 命令(或者先lsnrctl stop再lsnrctl start)

    4.应用 listener 补丁 [强制]

    应用所使用的数据库版本的最新监听器补丁。

    5.在防火墙上限制 SQL*Net [强制]

    除非绝对需要,SQL*Net 通信是不允许通过防火墙的。防火墙过滤机制应该被设计成只允许已知的应用和web server进行SQL*Net通信。如果应用需要通过 internet 直接访问SQL*Net,那么应该在防火墙上配置指定的主机和端口。

    6.保证 $TNS_ADMIN 目录的安全 [强制]

    监听器口令存储在 listener.ora 文件中。手工编辑文件,和容易删除和修改口令。如果口令是被手工添加到文件中,存储的是明文。如果是通过 lsnrctl 添加的,使用一个简单的hash算法加密后存放到文件中(这个加密很容易被破解)。
    $TNS_ADMIN目录(通常是$ORACLE_HOME/network/admin)的读、写、执行权限只应该授予主要的oracle用户帐号,其它帐号没有权限。

    7.删除没有用的服务 [强制]

    许多缺省的安装有一个对 PL/SQL External Procedures (ExtProc) 的监听条目。条目名称通常是 ExtProc 或 PLSExtProc,它是缺省安装的,但绝大多数的情况并不使用。
    检查应用或文档确认 ExtProc 是否被使用。如果没有,则把它从 listener.ora 文件中删除。ExtPro 存在一些安全漏洞。
    因为 listener.ora 文件经常在实例间拷贝,它们可能包含老的或没用的条目。检查所有服务确定是否被使用。删除没有使用的服务。

    8.设置节点有效性检查 [可选]

    依赖于应用的类型和网络配置,节点有效性检查可能成为限制与监听器通信的有力工具。大多数 web 应用仅需要从应用服务器和一定数量的用于管理目的的客户端访问监听器。
    检查IP地址有效性的最简单的方法是使用数据库审计。推荐在会话级开启审计功能。
    对于Oracle 9i,节点有效性检查行加到 $ORACLE_HOME/network/admin/sqlnet.ora 文件中;Oracle 8/8i,加到$ORACLE_HOME/network/admin/protocol.ora 文件中。

    tcp.validnode_checking = yes
    tcp.invited_nodes = (x.x.x.x | name, x.x.x.x | name)
    tcp.excluded_nodes=( x.x.x.x | name, x.x.x.x | name)

    可以包括接受的节点或拒绝的节点,但不能都包括。通配符、子网等是无效的,只允许IP地址或主机名。对于更精确的检查,要使用Oracle Connection Manager。
    为激活检查功能,监听器必须重启。对于可以包含的节点的数量没有硬性限制,但是对于大量的条目使用Oracle Connection Manager应该是较好的解决方案。
    如果有大量的客户端需要直接连接SQL*Net访问数据库,由于网络配置经常改变,节点有效性检查通常很困难。在这样的配置下,SQL*Net 通信必须从网络上阻止。

    9.监控日志文件 [可选]

    在日志文件中,对于每一次无效口令访问,都包含一个 TNS-01169 错误。一个暴力破解口令的攻击将产生成百上千的这个错误。使用简单的shell脚本或者管理工具,监控日志文件,并在 TNS-01169 错误达到一定阙值时产生警告信息。

Oracle的监听器一直存在着一个安全隐患,假如不设置安全措施,那么能够访问的用户就可以远程关闭监听器。

你可能感兴趣的:(oracle,数据库,tcp,command,数据库服务器,passwords)