ORACLE登入驗證方式的詳解
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.
總結
SQLNET有AUTHENTICATION_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 正常(說明使用了本地的密碼檔案驗證)
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.
總結
SQLNET有AUTHENTICATION_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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解Spring Security的HttpBasic登入驗證模式SpringHTTP模式
- uniapp 完成兩種方式登入 驗證碼登入 密碼登入APP密碼
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 使用 jQuery, Angular.js 實現登入介面驗證碼詳解jQueryAngularJS
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- JS登入驗證nullJSNull
- 直播系統程式碼,登入時常用驗證方式實現
- Java 自定義註解在登入驗證的應用Java
- ASP.NET登入驗證ASP.NET
- APPCNA 指紋驗證登入APP
- Laravel- Auth 登入驗證Laravel
- PbootCMS後臺關閉驗證碼,登入提示驗證碼不能空的解決方法boot
- Destoon如何去除登入的郵箱驗證?
- 【Koa】腳手架登入驗證
- js登入與註冊驗證JS
- app直播原始碼,登入時輸入驗證碼、簡訊驗證身份APP原始碼
- pbootcms後臺登入驗證碼看不清的解決辦法boot
- 解決 PBootCMS 後臺登入不顯示驗證碼的問題boot
- Laravel-admin 登入新增驗證碼Laravel
- vue登入註冊,帶token驗證Vue
- 圖解如何在Linux上配置git自動登入驗證圖解LinuxGit
- 用Abp實現兩步驗證(Two-Factor Authentication,2FA)登入(三):免登入驗證
- Spring Security 一鍵接入驗證碼登入和小程式登入Spring
- SpringBoot 整合 Shiro 密碼登入與郵件驗證碼登入(多 Realm 認證)Spring Boot密碼
- 通過selenium突破極驗驗證實現登入
- Spring Security 如何新增登入驗證碼?鬆哥手把手教你給微人事新增登入驗證碼Spring
- 實現基於JWT的Token登入驗證功能JWT
- SSH免密登入詳解
- vue實現簡訊驗證碼登入Vue
- golang 中使用 JWT 實現登入驗證GolangJWT
- springboot + shiro 驗證碼與記住登入Spring Boot
- uniapp 實現簡訊驗證碼登入APP
- node實現登入圖片驗證碼
- sql 注入越過登入驗證例項SQL
- 登陸驗證
- SSL證書是如何驗證的?驗證方式推薦
- json web token 實踐登入以及校驗碼驗證JSONWeb
- 輸入驗證碼登入時,send_keys () 報錯
- 爬蟲模擬登入—OAUTH的詳解爬蟲OAuth