Oracle驗證方式詳解

蘭在晨發表於2017-04-11

一、 身份驗證

Oracle驗證過程:
 
 

二、身份驗證的方式
Oracle身份驗證的方式通過sqlnet.ora這個檔案來控制
SQLNET.ORA 檔案中常用的兩個引數
------------------------------------------
# 指定啟動一個或多個認證服務
SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE/ALL)

# 指定CLIENT NAME解析方法的次序,預設是NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
------------------------------------------

SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE/ALL)
    NONE:作用是不允許通過 OS 系統使用者登入資料庫,需要提供使用者名稱及密碼;
    ALL:作用是允許所有的登入方式;
    NTS:此設定值僅用於Windows NT系統,此設定同時支援OS認證和口令檔案認證,只有在設定了(NTS)值之後執行在Windows系統上的Oracle才支援OS認證。
    如果不設定此引數,對Linux系統,預設支援OS認證和口令檔案認證。對Windows系統,預設只支援口令檔案認證,不支援OS認證。


NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
    EZCONNECT連線方式:username/password@hostname:port/service_name  不需要通過tnsname.ora 檔案解析
    TNNAMES:可以通過tnsnames.ora檔案解析獲得需要訪問的主機、埠、dbservice 等資訊。
    CONNECT username/password [@db_alias] AS [SYSOPER | SYSDBA] ;

    ORCL =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = orcl)
        )
    )


三、常見幾種身份驗證的登陸方式

1) 使用者名稱/密碼方式驗證
在使用 SQL*Plus 時,通過口令身份驗證進行連線的語法如下:

      CONNECT username / password [ @db_alias ]

      這是 Oracle 一般使用者使用得最多的一種身份驗證方式。在使用口令身份驗證進行連線時,例項將針對在資料字典中的使用者賬戶儲存的口令。驗證給定的口令。為此,資料庫必須處於開啟狀態;
從邏輯上講,在使用口令身份驗證連線時,不可能發出 STARTUP 命令或者 SHUTDOWN 命令。不允許 SYS 使用者以口令身份驗證的方式進行連線,SYS 只能使用口令檔案、作業系統或LDAP 身份驗證。

2)作業系統驗證
就是說只要使用者登陸了Oracle database的server就無需其他驗證可以直接登陸oracle資料庫,預設遠端作業系統認證是關閉的。如果訪問本地的資料庫的話,使用者是需要被加到作業系統的相應group即可,並且在資料庫中有對應使用 作業系統認證字首的使用者。
比如說,作業系統使用者oracle   ==>對應資料庫中如果有 ops$oracle的使用者存在, 那麼此時就可以通過作業系統認證登陸。 只要改使用者登陸了作業系統,就無需使用使用者名稱密碼登陸資料庫。
Operating System GroupUNIX User GroupWindows User Group
OSDBA     dba     ORA_DBA
OSOPER     oper     ORA_OPER
下面是作業系統認證的資料庫引數
SYS@kyle>show parameter os_authent

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string      ops$
remote_os_authent                    boolean     FALSE

    預設情況下,我們只能在伺服器端實現匿名登入,登入之後直接以最高許可權sys的角色出現。 不新增as sysdba登入過程是不允許的。如果需要實現遠端登陸則需要設定 remote_os_authent=TRUE
 Oracle的OS層面驗證,最直接的關聯引數就是os_authent_prefix,預設取值為ops$。這種技術是建立在作業系統使用者名稱與資料庫使用者名稱之間的對映規則上。如果嘗試連線資料庫的作業系統使用者名稱在資料庫中對應有一個 新增引數os_authent_prefix作為字首的資料庫使用者那麼就可以實現OS驗證配置。
注意:這個規則是在伺服器端成立的。
比如:如果當前連線的作業系統名為oracle,os_authent_prefix為ops$,如果此時資料庫中包括一個為ops$oracle的使用者,是可以在伺服器端進行匿名登入的。

下面進行測試,當前Linux伺服器端OS使用者名稱為oracle,也是oinstall和dba組成員。
SYS@kyle>create user ops$oracle identified by oracle;
User created.

SYS@kyle>grant connect,resource,create session to ops$oracle;
Grant succeeded.
[oracle@test admin]$ sqlplus /
SQL*Plus: Release 11.2.0.4.0 Production on Wed Apr 5 18:42:01 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

OPS$ORACLE@kyle>

當開啟遠端os登陸驗證以後,原理是一樣的,但是使用者的作業系統驗證不是通過oracle dbserver,而是使用者自己的作業系統使用者。比如說Windows 管理使用者為admin ,這時只要資料庫中有opt$admin使用者存在,就可以通過遠端os身份驗證登陸而無需輸入資料庫使用者密碼。
注意,remote_os_authent  這個引數目前已被Oracle棄用


3)口令檔案驗證

Oracle的口令檔案的作用是存放所有以sysdba或者sysoper許可權連線資料庫的使用者的口令,如果想以sysdba許可權遠端連線資料庫,必須使用口令檔案,否則不能連上。
由於sys使用者在連線資料庫時必須以sysdba or sysoper方式,也就是說sys使用者要想連線資料庫必須使用口令檔案。使用口令檔案的好處是即使資料庫不處於open狀態,依然可以通過口令檔案驗證來連線資料庫。開始安裝完oracle,沒有給普通使用者授予sysdba許可權,口令檔案中只存放了sys的口令,如果之後把sysdba許可權授予了普通使用者,那麼此時會把普通使用者的口令從資料庫中讀到口令檔案中儲存下來,當然這時必須要求資料庫處於open狀態

    口令檔案存放路徑一般為:

        WINDOWS下:%ORACLE_HOME%\DATABASE\PWD.ora
        UNIX/LINUX 下:$ORACLE_HOME/dbsdbs/orapw
如何建立口令檔案
orapwd file=orapw  password=*** entries= N


如何開啟口令檔案身份驗證
3.1)檢視哪些使用者可以登陸口令檔案登陸
SYS@kyle>select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
預設只有sys使用者
3.2)給需要開啟口令檔案身份驗證的使用者賦予sysdba or sysoper的許可權
SYS@kyle>grant sysdba to kyle;

3.3)再次檢視
SYS@enmo>select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
KYLE                           TRUE  FALSE FALSE

3.4)測試使用者登陸
sqlplus kyle/*** as sysdba@testdb

口令檔案驗證的相關引數
Remote_login_passwordfile 引數一共有三個值含義如下:
None:      不使用口令檔案驗證,如果不使用口令檔案驗證時,沒有使用者在ora_dba組中,那麼就沒有任何使用者可以作為sysdba進入資料庫了。Oracle資料庫不允許遠  程SYSDBA/SYSOPER身份登入
Exclusive: 表示例項獨佔使用口令檔案,也就是各自例項使用單獨的口令檔案
Shared       表示多個例項共享一個口令檔案
Shared說明
當remote_login_passwordfile=shared時候,
在$ORACLE_HOME/network/admin目錄下仍然生成pwd+sid.ora檔案。每個資料庫例項使用自己的sys使用者和對應的密碼,但是不能再加入新的有sysdba許可權的使用者
如果remote_login_passwordfile=exclusive 而且os中有ora_dba組。那麼使用者如果作為ora_dba組登陸的話。仍然可以使用os的驗證

4)其他方式驗證
還有其他一些驗證方式,由於不常用就不過度解釋,比如說ldap驗證。

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

相關文章