亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • 使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

發布時間:2020-07-18 16:24:15 來源:網絡 閱讀:629 作者:zhqw8315 欄目:數據庫

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

作者:趙全文  網名:guestart

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  在今年國內很多用戶的Oracle數據庫突然遭到比特幣勒索,從這一方面來說,數據庫的安全,大家沒有引起足夠的重視。其實不難發現,我們在生產環境中使用的Oracle數據庫確實存在著很多安全隱患和安全風險。Oracle在數據庫安全方面的解決方案也有很多,比如Oracle審計與數據庫防火墻(AVDF)產品、Oracle的透明數據加密功能(KDE)和Oralce Wallet(也稱Oracle 錢夾)加密用戶的密碼等等。

  如果需要從SHELL腳本來連接到Oracle數據庫,那么這些腳本包含數據庫連接詳細信息,這可能是一個主要的安全問題。一個解決方案是使用操作系統身份驗證,但Oracle 10g第2版提供了使用安全外部密碼存儲的功能。其中Oracle登錄證書存儲在客戶端Oracle電子錢包中,這樣的話,在SHELL腳本里就可以使用“/ @ db_alias”這樣的語法來連接。這對于用腳本登錄數據庫進行操作來說是非常有用的,尤其對于企業安全要求很高,不希望用戶名和密碼明文存在配置文件中,而且對于密碼的維護是極為方便的,比如把wallet放在指定路徑下,當修改密碼時,只需統一覆蓋wallet即可。

  今天我和大家分享一下,如何使用Oracle的Security External Password Store功能實現無密碼登錄數據庫,以此不將明文密碼暴露在生產環境當中。

  那么,Oracle是如何通過安全外部密碼存儲(Secure External Password Store)來達到無密碼登錄數據庫呢?我們來說,連接到數據庫的密碼證書是存儲在Oracle wallet里,這個wallet(錢夾)是一個用來保存認證和簽名證書的一種安全軟件容器。這種錢包使用可以簡化依靠密碼憑據連接到數據庫的大規模部署。 配置此功能時,應用程序代碼,批處理作業和腳本不再需要嵌入的用戶名和密碼。 風險降低,因為這樣的密碼不再以明確的方式暴露,并且當用戶名或密碼改變時,密碼管理策略更容易實施,而不改變應用程序代碼。

  因為用“安全外部密碼存儲”這種方式所存儲的密碼密文信息是存儲在Oracle wallet里的,那么我們先介紹一下,什么是Oracle wallet以及它里面可以存儲一些什么信息?請看下面的一段英文描述,使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

中文翻譯如下,

Oracle錢夾是一個用于存儲不同類型認證和加密密鑰的PKCS#12容器。因此,這種錢夾可以用于存儲以下信息的一個或多個:

  • Oracle數據庫的PKI身份驗證憑據

  • 網絡加密證書(SSL/TLS)

  • Oracle高級安全透明數據加密(TDE)的主加密密鑰

  • Oracle數據庫安全外部密碼存儲的密碼

  說的直白一點,Oracle wallet可以形象的比喻成我們日常生活中的錢包一樣,在錢包里,我們可以放銀行卡、×××、信用卡、公司的員工卡、就餐卡等等。

  看了上面的一段英文描述和中文翻譯,想必大家對Oracle wallet也有所了解。那么到底什么是Oracle的Secure External Password Store(安全外部密碼存儲)呢?我們再看下面的一段英文描述,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

中文翻譯如下,

  使用安全外部密碼存儲,Oracle將數據庫憑據(即用戶名和密碼)安全地存儲在Oracle電子錢包中。 在啟動數據庫連接時,Oracle訪問錢包并根據連接字符串讀取憑據。 由于配置了自動登錄,因此無需密碼即可打開錢包并讀取憑據。 只有在電子錢包中添加,更改或刪除憑據時才需要密碼。

  連接字符串在電子錢包中是唯一的。 每個連接字符串只能存儲一個憑證。 同一數據庫的不同憑據必須由不同的連接字符串區分。

  從上面的中文解讀,我們可以得知,安全外部密碼存儲就是Oracle把用戶名和密碼存放在Oracle wallet的一種安全加密形式。

  下面我們根據Oracle 10gR2官方文檔中的Secure External Password Store功能來演示和操作,最終實現無密碼登錄數據庫。

  雖然說,使用wallet的圖形界面(在command line interface下 輸入owm命令可以打開)可以極大的簡化管理密碼證書,至于為什么不能用owm(oracle wallet manager)來創建和管理wallet的外部密碼存儲,而是使用mkstore命令?以下是摘自Oracle官方文檔的一段描述:

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  一般來說,用戶(包括應用程序、批處理任務和腳本)都是通過一個標準的數據庫連接字符串(database_connect_string)的連接語句(connect statement)來連接到Oracle數據庫的。這些字符串里包括用戶名、密碼和網絡服務名,或者是在tnsnames.ora文件當中列出的TNS別名,還有另一種連接字符串的形式是主機名:端口號:sid(這種形式在應用程序連接到Oracle數據庫當中隨處可見)。

  比如,下面這樣的連接形式:

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中ORASALES為TNS別名,ourhost37:1527:DB17為主機名:端口號:sid。

  然而,如果客戶端配置了安全外部密碼存儲的話,就可以使用下面的連接語法來連接到數據庫,而不需要指定用戶名和密碼。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  在這種情況下,數據庫證書、用戶名和密碼是安全地存儲在創建的Oracle錢夾里,由于wallet的自動登錄特性(auto login)是打開的,也就是說,一旦創建了wallet以后是自動打開的,所以不需要密碼去打開wallet。在這個wallet里有證書,而用來連接數據庫的用戶名和密碼的信息就保存在這個證書里。

  接下來,我們就開始使用外部密碼存儲來配置Oracle的客戶端。

  1、先查看一下Oracle軟件默認的wallet目錄所在的位置和狀態

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 從上圖可以看出,wallet的類型是以文件形式存在,而且默認的wallet就是位于$ORACLE_BASE/admin/$ORACLE_SID/wallet目錄,狀態為關閉。那么,我們再去相應的位置查看一下wallet目錄是否存在,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  從上圖可以得知,wallet目錄不存在,因為我們從來沒有創建過wallet,它的狀態應該就是closed,所以我們在用mkstore命令(前面在說不能用owm創建wallet時提到過)創建wallet之前,必須先創建一個存在的wallet目錄。這里為了安全起見,也為了防止將wallet目錄誤刪除,我們不把wallet目錄放在剛才用v$encryption_wallet視圖查出的位置,即$ORACLE_BASE/admin/$ORACLE_SID下,而是放到$ORACLE_HOME/owm(因為$ORACLE_HOME是Oracle軟件所在目錄,而且我們也不允許去改動這里的目錄和文件)。

  下面進行創建wallet目錄,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  2、在Oracle客戶端開啟external password store(外部密碼存儲)。

  (1)使用mkstore命令先創建一個wallet,命令語法來自官方文檔

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  wallet_location參數指定為我們剛才創建的wallet目錄

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  上面提示,要給wallet輸入一個密碼(在wallet打開時需要輸入,在創建完wallet以后,Oracle會自動打開),這里輸入Oracle123(輸入的密碼不回顯哦),再輸入一遍(同樣不回顯,如果2次輸入的不一樣,Oracle會提示重新輸入的)。

  那么,我們到wallet目錄下面查看一下是生成了什么文件。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中cwallet.sso文件是用于保存wallet是否自動登錄的信息,ewallet.p12文件是用來保存相關的證書信息,而我們要使用的用戶名和密碼的信息就保存在證書里。

  (2)使用mkstore命令來給剛才創建的wallet創建證書,命令語法來自官方文檔

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中帶<>的參數,官方文檔已經解釋的很清楚了,我們再描述一下。

  wallet_location:wallet目錄所在位

  db_connect_string:文件tnsname.ora中的TNS別名

  tnsnames.ora:存放Oracle數據庫連接字符串的文件,也是Oracle約定俗成的文件,從Oracle誕生起一直沿用到今,可見它的重要性不言而喻。在Linux系統下,位于$ORACLE_HOME/network/admin目錄

  username:Oracle數據庫要連接的用戶名

  password:Oracle連接用戶要輸入的密碼

  為了不和Oracle原先在tnsnames.ora文件中創建的TNS別名有所關聯,我們再單獨創建一個。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中BASE是我們剛才新建的TNS別名,而YSYKTEST是原先存在的TNS別名。

  現在開始用mkstore命令創建wallet的證書,見下圖

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  在創建證書時,需要輸入wallet的密碼,就第1步創建wallet時輸入的密碼。

  其中,base是剛剛創建的TNS別名,而且用戶名和密碼一定要輸入正確,否則即使創建成功,一會兒也連不上Oracle數據庫。

  其實用mkstore命令創建wallet的證書時,也可以不將用戶的密碼寫在命令行中,而是根據命令提示進行輸入(輸入的密碼不回顯),見下圖操作:

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中,前兩次輸入的密碼為用戶szd_base_v2的密碼ysyktest,第三次輸入的密碼為wallet的密碼Oracle123。

  上面是創建了wallet的證書,為了讓Oracle能夠使用wallet,還必須在sqlnet.ora文件(和tnsnames.ora一樣,也是位于$ORACLE_HOME/network/admin目錄)中指定WALLET_LOCATION參數和SQLNET.WALLET_OVERRIDE參數。下面進入第3步,

  (3)在sqlnet.ora文件中增加WALLET_LOCATION參數和SQLNET.WALLET_OVERRIDE參數,參考語法來自官方文檔

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

WALLET_LOCATION = ( SOURCE = ( METHOD = FILE )( METHOD_DATA = ( DIRECTORY = /private/ora102/network/admin ) ) )

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中,WALLET_LOCATION參數當中DIRECTORY的取值為wallet目錄。下面在sqlnet.ora文件中增加這2個參數,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  進入$ORACLE_HOME/network/admin目錄,發現沒有sqlnet.ora文件,可能是沒有配置sqlnet.ora文件。那么我們在圖形界面下,用netca命令生成sqlnet.ora文件,然后再增加那2個參數。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 選擇第2個單選按鈕,命名方法配置,進入下一步

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  將上圖中的Local Naming加到右邊空白窗格,最后點finish。那么,此時在$ORACLE_HOME/network/admin目錄下就會生成sqlnet.ora文件。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 sqlnet.ora文件剛創建以后,里面的內容只有下面幾行,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 現在添加WALLET_LOCATION和SQLNET.WALLET_OVERRIDE這2個參數,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  現在,Oracle客戶端的安全外部密碼存儲已經配置完畢。

 為了簡化操作步驟,也可以將操作步驟(1)和(2)合為一步,直接創建wallet及其證書,如下圖所示:

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中,前兩次輸入的密碼為wallet本身的密碼,這里輸入Oracle123,后兩次輸入的密碼為用戶szd_base_v2的密碼ysyktest。

  現在,我們嘗試去用base的連接串去連接Oracle數據庫,查看其登錄用戶為szd_base_v2,這樣就達到了不用輸密碼登錄數據庫的目的。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 那么,用szd_base_v2用戶去連接Oracle數據庫,也是一樣的效果。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 現在我們看一下視圖v$encryption_wallet的內容有什么變化,

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 下面是沒有使用Security External Password Store之前,視圖v$encryption_wallet的內容(前面在創建wallet之前也提到過,呵呵)

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  通過上面2圖對比,我們不難發現,Oracle現在使用了我們剛才創建的wallet,并且該wallet的狀態為打開且正在使用。

  如果用戶szd_base_v2的密碼進行了更改,也需要把wallet里的證書信息進行更改,否則證書里還是存放舊密碼的信息,在連接Oracle數據庫的時候就會報錯。下面將用戶szd_base_v2的密碼改為ysykbase,再用sqlplus /@base登錄,看有什么報錯。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

 現在,我們用mkstore命令將wallet里的證書進行更改,然后再用sqlplus /@base登錄,就會正常連接。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  其中,前兩次輸入的密碼為剛剛更改的用戶szd_base_v2的密碼,第三次輸入的密碼為wallet的密碼。

  除了用sqlplus直接登錄Oracle數據庫以外,在導入導出數據和一些對數據庫日常維護的SHELL腳本中也可以使用,而且不會暴露明文密碼,可以消除一定的安全隱患。例如,下面的1個expdp腳本和1個SHELL腳本。

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

  至此,用Oracle的Secure External Password Store功能實現無密碼登錄數據庫 演示完畢。


參考網址:

官方文檔 http://docs.oracle.com/cd/B19306_01/network.102/b14266/cnctslsh.htm#g1033548

Stefan Oehrli的Blog http://www.oradba.ch/2014/07/secure-external-password-store-for-rman/


  如果您覺得此篇文章對您有幫助,歡迎關注微信公眾號:guestart的DBA學習筆記,您的支持是對我最大的鼓勵!

使用Oracle的Security External Password Store功能實現無密碼登錄數據庫

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

荥阳市| 吉林省| 新和县| 福建省| 金昌市| 藁城市| 石阡县| 万年县| 浮山县| 博野县| 岳池县| 凌源市| 修文县| 平顺县| 上高县| 石泉县| 旅游| 宜春市| 邵阳县| 绿春县| 读书| 边坝县| 阜康市| 盐池县| 昌黎县| 香河县| 漾濞| 剑川县| 新蔡县| 老河口市| 汤原县| 奉化市| 昌图县| 台湾省| 金川县| 江西省| 湟中县| 资阳市| 连山| 明水县| 黄陵县|