說說密碼檔案Passwordfile(三)

realkid4發表於2011-01-24

我們的實驗分為本地登入和遠端登入兩個部分探討。

 

本地登入

資料庫伺服器就在本地,或者管理人員使用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 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 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 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章