為監聽設定密碼

yangtingkun發表於2008-05-06

資料庫的帳號需要密碼進行保護,監聽同樣需要設定密碼進行保護,否則就會留下安全隱患。

 

 

監聽是作業系統上啟動的程式,負責將使用者的請求連線到Oracle的例項上。一旦監聽被關閉,資料庫伺服器以外的使用者將無法正常登陸資料庫。

監聽命令可以透過配置本地監聽引數檔案listener.ora來達到獲取遠端監聽資訊,甚至關閉遠端監聽的能力。

本地監聽環境的設定如下:

# LISTENER.ORA Network Configuration File: E:\oracle\oracle920\network\admin\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ytk-thinkpad)(PORT = 1521))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\oracle\oracle920)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ytk92.ytk_thinkpad)
      (ORACLE_HOME = E:\oracle\oracle920)
      (SID_NAME = ytk92)
    )
  )


LISTENER1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.1.100)(PORT = 1521))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
    )
  )

其中LISTENER1的設定是手工新增的遠端配置,目前遠端監聽已經啟動,下面就可以透過指定LISTENER1來獲取遠端監聽的狀態,甚至關閉遠端監聽:

E:\>ipconfig

Windows IP Configuration


Ethernet adapter
無線網路連線 2:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 172.25.13.100
        Subnet Mask . . . . . . . . . . . : 255.255.0.0
        Default Gateway . . . . . . . . . : 172.25.13.1

Ethernet adapter 本地連線:

        Media State . . . . . . . . . . . : Media disconnected

Ethernet adapter 本地連線 2:

        Media State . . . . . . . . . . . : Media disconnected

E:\>%ORACLE_HOME%/bin/lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.4.0 - Production on 07-5 -2008 00:00
:44

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

歡迎來到LSNRCTL,請鍵入"help"以獲得資訊。

LSNRCTL> status listener1
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.25.1.100)(PORT=1521)))
LISTENER
STATUS
------------------------
別名
                      LISTENER
版本
                      TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Produc
tion
啟動日期                  07-5
-2008 00:01:30
正常執行時間              0 0 小時 3 49

跟蹤級別                  off
安全性
                    OFF
SNMP                      OFF
監聽器引數檔案
          F:\oracle\ora92\network\admin\listener.ora
監聽器日誌檔案
          F:\oracle\ora92\network\log\listener.log
監聽端點概要
...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yangtk)(PORT=1521)))
服務摘要
..
服務 "PLSExtProc" 包含 1 個例程。

 
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "dicsys.YANGTINGKUN" 包含 1 個例程。

 
例程 "DICSYS", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test.yangtingkun" 包含 1 個例程。

 
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test1" 包含 1 個例程。

 
例程 "test1", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test2" 包含 1 個例程。

 
例程 "test2", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test3" 包含 1 個例程。

 
例程 "test3", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test4" 包含 1 個例程。

 
例程 "test4", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test5" 包含 1 個例程。

 
例程 "test5", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "testst" 包含 1 個例程。

 
例程 "testst", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "yangtk.yangtingkun" 包含 1 個例程。

 
例程 "yangtk", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功

LSNRCTL> stop listener1
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.25.1.100)(PORT=1521)))
命令執行成功

透過這個例子可以看到,只需要知道遠端資料庫的地址和監聽埠,就可以透過配置來關閉遠端的監聽。這存在很大的安全隱患。

解決的方法是為監聽設定密碼,方法如下:

F:\>lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.4.0 - Production on 07-5 -2008 00:15
:36

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

歡迎來到LSNRCTL,請鍵入"help"以獲得資訊。

LSNRCTL> start
啟動tnslsnr:請稍候...

TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Production
系統引數檔案為F:\oracle\ora92\network\admin\listener.ora
寫入F:\oracle\ora92\network\log\listener.log的日誌資訊

監聽:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yangtk)(PORT=1521)))

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
LISTENER
STATUS
------------------------
別名
                      LISTENER
版本
                      TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Produc
tion
啟動日期                  07-5
-2008 00:15:38
正常執行時間              0 0 小時 0 0

跟蹤級別                  off
安全性
                    OFF
SNMP                      OFF
監聽器引數檔案
          F:\oracle\ora92\network\admin\listener.ora
監聽器日誌檔案
          F:\oracle\ora92\network\log\listener.log
監聽端點概要
...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yangtk)(PORT=1521)))
服務摘要
..
服務 "PLSExtProc" 包含 1 個例程。

 
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "dicsys.YANGTINGKUN" 包含 1 個例程。

 
例程 "DICSYS", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test.yangtingkun" 包含 1 個例程。

 
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test1" 包含 1 個例程。

 
例程 "test1", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test2" 包含 1 個例程。

 
例程 "test2", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test3" 包含 1 個例程。

 
例程 "test3", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test4" 包含 1 個例程。

 
例程 "test4", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test5" 包含 1 個例程。

 
例程 "test5", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "testst" 包含 1 個例程。

 
例程 "testst", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "yangtk.yangtingkun" 包含 1 個例程。

 
例程 "yangtk", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功

LSNRCTL> change_password
Old password:
New password:
Reenter new password:
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
LISTENER
的口令已更改

命令執行成功
LSNRCTL> set password
Password:
命令執行成功
LSNRCTL> save_config
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
儲存的LISTENER配置引數。

監聽器引數檔案          F:\oracle\ora92\network\admin\listener.ora
舊的引數檔案
F:\oracle\ora92\network\admin\listener.bak
命令執行成功

由於設定了密碼,以後無論是本地還是遠端執行類似LSNRCTL STOP或者SAVE_CONFIG等操作都會提示輸入密碼。

以後本地的關閉監聽操作為:

LSNRCTL> exit

F:\>lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.4.0 - Production on 07-5 -2008 00:19
:55

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

歡迎來到LSNRCTL,請鍵入"help"以獲得資訊。

LSNRCTL> stop
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
TNS-01169:
監聽器尚未識別口令

LSNRCTL> set password
Password:
命令執行成功
LSNRCTL> stop
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
命令執行成功

LSNRCTL> start
啟動tnslsnr:請稍候...

TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Production
系統引數檔案為F:\oracle\ora92\network\admin\listener.ora
寫入F:\oracle\ora92\network\log\listener.log的日誌資訊

監聽:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yangtk)(PORT=1521)))

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yangtk)(PORT=1521)))
LISTENER
STATUS
------------------------
別名
                      LISTENER
版本
                      TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Produc
tion
啟動日期                  07-5
-2008 00:20:20
正常執行時間              0 0 小時 0 0

跟蹤級別                  off
安全性
                    ON
SNMP                      OFF
監聽器引數檔案
          F:\oracle\ora92\network\admin\listener.ora
監聽器日誌檔案
          F:\oracle\ora92\network\log\listener.log
監聽端點概要
...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yangtk)(PORT=1521)))
服務摘要
..
服務 "PLSExtProc" 包含 1 個例程。

 
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "dicsys.YANGTINGKUN" 包含 1 個例程。

 
例程 "DICSYS", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test.yangtingkun" 包含 1 個例程。

 
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test1" 包含 1 個例程。

 
例程 "test1", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test2" 包含 1 個例程。

 
例程 "test2", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test3" 包含 1 個例程。

 
例程 "test3", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test4" 包含 1 個例程。

 
例程 "test4", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test5" 包含 1 個例程。

 
例程 "test5", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "testst" 包含 1 個例程。

 
例程 "testst", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "yangtk.yangtingkun" 包含 1 個例程。

 
例程 "yangtk", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功

這時遠端嘗試關閉監聽就會報錯並提示輸入密碼:

LSNRCTL> stop listener1
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.25.1.100)(PORT=1521)))
TNS-01169:
監聽器尚未識別口令

透過設定監聽的密碼,提高了系統的安全性。

10g開始,Oracle增加了監聽程式的安全性,即使不設定密碼,也沒有辦法從遠端關閉監聽。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-261620/,如需轉載,請註明出處,否則將追究法律責任。

相關文章