ORACLE登入驗證方式的詳解

lusklusklusk發表於2017-03-17
Oracle的3種認證方式

   1.使用OS作業系統整合身份驗證
在資料庫伺服器本機只要以sqlplus as sysdba連線資料庫,不論輸入什麼使用者(哪怕這個使用者如aaa在資料庫中根本不存在)都可以連線上,並且連線使用者是sys

好處就是,如果有時候忘記了資料庫使用者的密碼,而又想登入資料庫,可以透過這種方式,前提是在資料庫伺服器本機上;但是方便的同時也帶來了一些安全隱患,想遮蔽os認證,只要修改sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES的值就可以遮蔽OS功能
沒有sqlnet.ora檔案時,預設開啟OS認證


SQLNET.AUTHENTICATION_SERVICES = none | all | nts(windows下表示啟用OS認證)
all : 用於linux、unix、windows平臺,啟用OS認證

nts : 用於windows平臺,啟用OS認證,其他平臺使用這個值表示關閉OS認證
none : 表示關閉OS認證,只能密碼認證或其他認證
all: all for all authentication methods.
nts: nts for Microsoft Windows native operating system authentication

none: none for no authentication methods, including Microsoft Windows native operating system authentication. When SQLNET.AUTHENTICATION_SERVICES is set to none, a valid user name and password can be used to access the database.

總結
SQLNETAUTHENTICATION_SERVICES:
如果後面有=,但是值不是all,表示關閉OS認證,只能密碼認證或其他認證(特殊一點,如果是nts則僅在windows才表示開啟OS認證,其他平臺都是關閉OS認證)
如果後面沒有=,表示忽略AUTHENTICATION_SERVICES,即和下面SQLNET沒有AUTHENTICATION_SERVICES一樣
SQLNET沒有AUTHENTICATION_SERVICES:
表示預設開啟OS認證






   2.使用密碼檔案進行身份認證
Oracle中的密碼檔案存放著具有sysdba, sysoper許可權的使用者名稱及口令。在資料庫沒有啟動之前,資料庫的內建使用者是無法透過資料庫本身來驗證身份的。使用密碼檔案的好處是即使資料庫不處於open狀態,依然可以透過密碼檔案驗證來連線資料庫,在資料庫未啟動之前登陸從而啟動資料庫(典型的使用場景duplicate)。如果沒有密碼檔案,在資料庫未啟動之前就只能透過作業系統認證.

遠端異機使用者不能使用OS登入,只能基於密碼檔案的驗證,如果想以sysdba許可權遠端連線資料庫,必須使用密碼檔案,否則不能連上!開始安裝完oracle,沒有給普通使用者授予sysdba許可權,密碼檔案中只存放了sys的口令,如果把sysdba許可權授予了普通使用者,那麼此時會把普通使用者的口令從資料庫中讀到密碼檔案中儲存下來,當然這時必須要求資料庫處於open狀態。

到底有幾個使用者被授予了sysdba或者sysoper許可權,可以透過查詢如下v$pwfile_users獲得,v$pwfile_users的資訊就是源於密碼檔案的(This view lists users who have been granted SYSDBA and SYSOPER privileges as derived from the password file.)

到底可以有幾個使用者被授予sysdba或者sysoper許可權,是由建立密碼檔案時指定的entries數決定的
orapwd file='$ORACLE_HOME/dbs/orapwSID' password=123456 entries=5 force=y
當然sql>alter user sys identified by XX時,密碼檔案也自動被修改了即linux下ll命令時看到密碼檔案的修改時間會變

REMOTE_LOGIN_PASSWORDFILE specifies whether Oracle checks for a password file.
Values:
■ shared
One or more databases can use the password file. The password file can contain
SYS as well as non-SYS users.
■ exclusive
The password file can be used by only one database. The password file can contain
SYS as well as non-SYS users.This is the Default value
■ none
Oracle ignores any password file. Therefore, privileged users must be
authenticated by the operating system.

sqlplus sys/正確密碼 as sysdba(可能使用了OS認證也可能使用了密碼檔案認證,如果不能OS認證,就是資料庫伺服器本地使用密碼檔案認證)
sqlplus sys/正確密碼@tns_name as sysdba(只能使用密碼檔案認證



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








1.linux環境下,沒有配置SQLNET.AUTHENTICATION_SERVICES時,預設OS驗證和密碼檔案驗證並存的實驗場景

1.1不刪除密碼檔案場景
如下是使用的是OS驗證
sqlplus / as sysdba正常
sqlplus test/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)
sqlplus system/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)
sqlplus sys/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)

如下是使用的密碼檔案驗證(資料庫伺服器本機操作,tnsname是資料庫伺服器本機的tns名稱)
sqlplus test/正確密碼@tnsname as sysdba不正常
sqlplus system/正確密碼@tnsname as sysdba不正常
sqlplus sys/正確密碼@tnsname as sysdba正常

sys的實際密碼和和密碼檔案裡的密碼不一致的實驗
sqlplus sys/錯誤密碼@tnsname as sysdba不正常

1.2刪除密碼檔案場景
如下是使用的是OS驗證
sqlplus / as sysdba正常
sqlplus test/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)
sqlplus system/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)
sqlplus sys/XX as sysdba正常(XX是正確密碼或錯誤密碼都可以的)

如下是使用的密碼檔案驗證(資料庫伺服器本機操作,tnsname是資料庫伺服器本機的tns名稱)
sqlplus test/正確密碼@tnsname as sysdba不正常
sqlplus system/正確密碼@tnsname as sysdba不正常
sqlplus sys/正確密碼@tnsname as sysdba不正常

sys的實際密碼和和密碼檔案裡的密碼不一致的實驗
sqlplus sys/錯誤密碼@tnsname as sysdba不正常



2.linux環境下,配置SQLNET.AUTHENTICATION_SERVICES,且值配置為NTS時實驗場景,表示不能使用OS認證(linux下配置為ALL才能使用OS認證)

sqlplus / as sysdba不正常
sqlplus test/XX as sysdba不正常(XX是正確密碼或錯誤密碼都不可以的)
sqlplus system/XX as sysdba不正常(XX是正確密碼或錯誤密碼都不可以的

sqlplus sys/錯誤密碼 as sysdba 不正常
sqlplus sys/正確密碼 as sysdba 正常(說明使用了本地的密碼檔案驗證

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

相關文章