使用Oracle的Security External Password Store功能實(shí)現(xiàn)無(wú)密碼登錄數(shù)據(jù)庫(kù)
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、同仁網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為同仁等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
作者:趙全文 網(wǎng)名:guestart
在今年國(guó)內(nèi)很多用戶的Oracle數(shù)據(jù)庫(kù)突然遭到比特幣勒索,從這一方面來(lái)說(shuō),數(shù)據(jù)庫(kù)的安全,大家沒(méi)有引起足夠的重視。其實(shí)不難發(fā)現(xiàn),我們?cè)谏a(chǎn)環(huán)境中使用的Oracle數(shù)據(jù)庫(kù)確實(shí)存在著很多安全隱患和安全風(fēng)險(xiǎn)。Oracle在數(shù)據(jù)庫(kù)安全方面的解決方案也有很多,比如Oracle審計(jì)與數(shù)據(jù)庫(kù)防火墻(AVDF)產(chǎn)品、Oracle的透明數(shù)據(jù)加密功能(KDE)和Oralce Wallet(也稱(chēng)Oracle 錢(qián)夾)加密用戶的密碼等等。
如果需要從SHELL腳本來(lái)連接到Oracle數(shù)據(jù)庫(kù),那么這些腳本包含數(shù)據(jù)庫(kù)連接詳細(xì)信息,這可能是一個(gè)主要的安全問(wèn)題。一個(gè)解決方案是使用操作系統(tǒng)身份驗(yàn)證,但Oracle 10g第2版提供了使用安全外部密碼存儲(chǔ)的功能。其中Oracle登錄證書(shū)存儲(chǔ)在客戶端Oracle電子錢(qián)包中,這樣的話,在SHELL腳本里就可以使用“/ @ db_alias”這樣的語(yǔ)法來(lái)連接。這對(duì)于用腳本登錄數(shù)據(jù)庫(kù)進(jìn)行操作來(lái)說(shuō)是非常有用的,尤其對(duì)于企業(yè)安全要求很高,不希望用戶名和密碼明文存在配置文件中,而且對(duì)于密碼的維護(hù)是極為方便的,比如把wallet放在指定路徑下,當(dāng)修改密碼時(shí),只需統(tǒng)一覆蓋wallet即可。
今天我和大家分享一下,如何使用Oracle的Security External Password Store功能實(shí)現(xiàn)無(wú)密碼登錄數(shù)據(jù)庫(kù),以此不將明文密碼暴露在生產(chǎn)環(huán)境當(dāng)中。
那么,Oracle是如何通過(guò)安全外部密碼存儲(chǔ)(Secure External Password Store)來(lái)達(dá)到無(wú)密碼登錄數(shù)據(jù)庫(kù)呢?我們來(lái)說(shuō),連接到數(shù)據(jù)庫(kù)的密碼證書(shū)是存儲(chǔ)在Oracle wallet里,這個(gè)wallet(錢(qián)夾)是一個(gè)用來(lái)保存認(rèn)證和簽名證書(shū)的一種安全軟件容器。這種錢(qián)包使用可以簡(jiǎn)化依靠密碼憑據(jù)連接到數(shù)據(jù)庫(kù)的大規(guī)模部署。 配置此功能時(shí),應(yīng)用程序代碼,批處理作業(yè)和腳本不再需要嵌入的用戶名和密碼。 風(fēng)險(xiǎn)降低,因?yàn)檫@樣的密碼不再以明確的方式暴露,并且當(dāng)用戶名或密碼改變時(shí),密碼管理策略更容易實(shí)施,而不改變應(yīng)用程序代碼。
因?yàn)橛谩鞍踩獠棵艽a存儲(chǔ)”這種方式所存儲(chǔ)的密碼密文信息是存儲(chǔ)在Oracle wallet里的,那么我們先介紹一下,什么是Oracle wallet以及它里面可以存儲(chǔ)一些什么信息?請(qǐng)看下面的一段英文描述,
中文翻譯如下,
Oracle錢(qián)夾是一個(gè)用于存儲(chǔ)不同類(lèi)型認(rèn)證和加密密鑰的PKCS#12容器。因此,這種錢(qián)夾可以用于存儲(chǔ)以下信息的一個(gè)或多個(gè):
Oracle數(shù)據(jù)庫(kù)的PKI身份驗(yàn)證憑據(jù)
網(wǎng)絡(luò)加密證書(shū)(SSL/TLS)
Oracle高級(jí)安全透明數(shù)據(jù)加密(TDE)的主加密密鑰
Oracle數(shù)據(jù)庫(kù)安全外部密碼存儲(chǔ)的密碼
說(shuō)的直白一點(diǎn),Oracle wallet可以形象的比喻成我們?nèi)粘I钪械腻X(qián)包一樣,在錢(qián)包里,我們可以放銀行卡、×××、信用卡、公司的員工卡、就餐卡等等。
看了上面的一段英文描述和中文翻譯,想必大家對(duì)Oracle wallet也有所了解。那么到底什么是Oracle的Secure External Password Store(安全外部密碼存儲(chǔ))呢?我們?cè)倏聪旅娴囊欢斡⑽拿枋觯?/p>
中文翻譯如下,
使用安全外部密碼存儲(chǔ),Oracle將數(shù)據(jù)庫(kù)憑據(jù)(即用戶名和密碼)安全地存儲(chǔ)在Oracle電子錢(qián)包中。 在啟動(dòng)數(shù)據(jù)庫(kù)連接時(shí),Oracle訪問(wèn)錢(qián)包并根據(jù)連接字符串讀取憑據(jù)。 由于配置了自動(dòng)登錄,因此無(wú)需密碼即可打開(kāi)錢(qián)包并讀取憑據(jù)。 只有在電子錢(qián)包中添加,更改或刪除憑據(jù)時(shí)才需要密碼。
連接字符串在電子錢(qián)包中是唯一的。 每個(gè)連接字符串只能存儲(chǔ)一個(gè)憑證。 同一數(shù)據(jù)庫(kù)的不同憑據(jù)必須由不同的連接字符串區(qū)分。
從上面的中文解讀,我們可以得知,安全外部密碼存儲(chǔ)就是Oracle把用戶名和密碼存放在Oracle wallet的一種安全加密形式。
下面我們根據(jù)Oracle 10gR2官方文檔中的Secure External Password Store功能來(lái)演示和操作,最終實(shí)現(xiàn)無(wú)密碼登錄數(shù)據(jù)庫(kù)。
雖然說(shuō),使用wallet的圖形界面(在command line interface下 輸入owm命令可以打開(kāi))可以極大的簡(jiǎn)化管理密碼證書(shū),至于為什么不能用owm(oracle wallet manager)來(lái)創(chuàng)建和管理wallet的外部密碼存儲(chǔ),而是使用mkstore命令?以下是摘自O(shè)racle官方文檔的一段描述:
一般來(lái)說(shuō),用戶(包括應(yīng)用程序、批處理任務(wù)和腳本)都是通過(guò)一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)連接字符串(database_connect_string)的連接語(yǔ)句(connect statement)來(lái)連接到Oracle數(shù)據(jù)庫(kù)的。這些字符串里包括用戶名、密碼和網(wǎng)絡(luò)服務(wù)名,或者是在tnsnames.ora文件當(dāng)中列出的TNS別名,還有另一種連接字符串的形式是主機(jī)名:端口號(hào):sid(這種形式在應(yīng)用程序連接到Oracle數(shù)據(jù)庫(kù)當(dāng)中隨處可見(jiàn))。
比如,下面這樣的連接形式:
其中ORASALES為T(mén)NS別名,ourhost37:1527:DB17為主機(jī)名:端口號(hào):sid。
然而,如果客戶端配置了安全外部密碼存儲(chǔ)的話,就可以使用下面的連接語(yǔ)法來(lái)連接到數(shù)據(jù)庫(kù),而不需要指定用戶名和密碼。
在這種情況下,數(shù)據(jù)庫(kù)證書(shū)、用戶名和密碼是安全地存儲(chǔ)在創(chuàng)建的Oracle錢(qián)夾里,由于wallet的自動(dòng)登錄特性(auto login)是打開(kāi)的,也就是說(shuō),一旦創(chuàng)建了wallet以后是自動(dòng)打開(kāi)的,所以不需要密碼去打開(kāi)wallet。在這個(gè)wallet里有證書(shū),而用來(lái)連接數(shù)據(jù)庫(kù)的用戶名和密碼的信息就保存在這個(gè)證書(shū)里。
接下來(lái),我們就開(kāi)始使用外部密碼存儲(chǔ)來(lái)配置Oracle的客戶端。
1、先查看一下Oracle軟件默認(rèn)的wallet目錄所在的位置和狀態(tài)
從上圖可以看出,wallet的類(lèi)型是以文件形式存在,而且默認(rèn)的wallet就是位于$ORACLE_BASE/admin/$ORACLE_SID/wallet目錄,狀態(tài)為關(guān)閉。那么,我們?cè)偃ハ鄳?yīng)的位置查看一下wallet目錄是否存在,
從上圖可以得知,wallet目錄不存在,因?yàn)槲覀儚膩?lái)沒(méi)有創(chuàng)建過(guò)wallet,它的狀態(tài)應(yīng)該就是closed,所以我們?cè)谟胢kstore命令(前面在說(shuō)不能用owm創(chuàng)建wallet時(shí)提到過(guò))創(chuàng)建wallet之前,必須先創(chuàng)建一個(gè)存在的wallet目錄。這里為了安全起見(jiàn),也為了防止將wallet目錄誤刪除,我們不把wallet目錄放在剛才用v$encryption_wallet視圖查出的位置,即$ORACLE_BASE/admin/$ORACLE_SID下,而是放到$ORACLE_HOME/owm(因?yàn)?ORACLE_HOME是Oracle軟件所在目錄,而且我們也不允許去改動(dòng)這里的目錄和文件)。
下面進(jìn)行創(chuàng)建wallet目錄,
2、在Oracle客戶端開(kāi)啟external password store(外部密碼存儲(chǔ))。
(1)使用mkstore命令先創(chuàng)建一個(gè)wallet,命令語(yǔ)法來(lái)自官方文檔
wallet_location參數(shù)指定為我們剛才創(chuàng)建的wallet目錄
上面提示,要給wallet輸入一個(gè)密碼(在wallet打開(kāi)時(shí)需要輸入,在創(chuàng)建完wallet以后,Oracle會(huì)自動(dòng)打開(kāi)),這里輸入Oracle123(輸入的密碼不回顯哦),再輸入一遍(同樣不回顯,如果2次輸入的不一樣,Oracle會(huì)提示重新輸入的)。
那么,我們到wallet目錄下面查看一下是生成了什么文件。
其中cwallet.sso文件是用于保存wallet是否自動(dòng)登錄的信息,ewallet.p12文件是用來(lái)保存相關(guān)的證書(shū)信息,而我們要使用的用戶名和密碼的信息就保存在證書(shū)里。
(2)使用mkstore命令來(lái)給剛才創(chuàng)建的wallet創(chuàng)建證書(shū),命令語(yǔ)法來(lái)自官方文檔
其中帶<>的參數(shù),官方文檔已經(jīng)解釋的很清楚了,我們?cè)倜枋鲆幌隆?/p>
wallet_location:wallet目錄所在位
db_connect_string:文件tnsname.ora中的TNS別名
tnsnames.ora:存放Oracle數(shù)據(jù)庫(kù)連接字符串的文件,也是Oracle約定俗成的文件,從Oracle誕生起一直沿用到今,可見(jiàn)它的重要性不言而喻。在Linux系統(tǒng)下,位于$ORACLE_HOME/network/admin目錄
username:Oracle數(shù)據(jù)庫(kù)要連接的用戶名
password:Oracle連接用戶要輸入的密碼
為了不和Oracle原先在tnsnames.ora文件中創(chuàng)建的TNS別名有所關(guān)聯(lián),我們?cè)賳为?dú)創(chuàng)建一個(gè)。
其中BASE是我們剛才新建的TNS別名,而YSYKTEST是原先存在的TNS別名。
現(xiàn)在開(kāi)始用mkstore命令創(chuàng)建wallet的證書(shū),見(jiàn)下圖
在創(chuàng)建證書(shū)時(shí),需要輸入wallet的密碼,就第1步創(chuàng)建wallet時(shí)輸入的密碼。
其中,base是剛剛創(chuàng)建的TNS別名,而且用戶名和密碼一定要輸入正確,否則即使創(chuàng)建成功,一會(huì)兒也連不上Oracle數(shù)據(jù)庫(kù)。
其實(shí)用mkstore命令創(chuàng)建wallet的證書(shū)時(shí),也可以不將用戶的密碼寫(xiě)在命令行中,而是根據(jù)命令提示進(jìn)行輸入(輸入的密碼不回顯),見(jiàn)下圖操作:
其中,前兩次輸入的密碼為用戶szd_base_v2的密碼ysyktest,第三次輸入的密碼為wallet的密碼Oracle123。
上面是創(chuàng)建了wallet的證書(shū),為了讓Oracle能夠使用wallet,還必須在sqlnet.ora文件(和tnsnames.ora一樣,也是位于$ORACLE_HOME/network/admin目錄)中指定WALLET_LOCATION參數(shù)和SQLNET.WALLET_OVERRIDE參數(shù)。下面進(jìn)入第3步,
(3)在sqlnet.ora文件中增加WALLET_LOCATION參數(shù)和SQLNET.WALLET_OVERRIDE參數(shù),參考語(yǔ)法來(lái)自官方文檔
WALLET_LOCATION = ( SOURCE = ( METHOD = FILE )( METHOD_DATA = ( DIRECTORY = /private/ora102/network/admin ) ) )
其中,WALLET_LOCATION參數(shù)當(dāng)中DIRECTORY的取值為wallet目錄。下面在sqlnet.ora文件中增加這2個(gè)參數(shù),
進(jìn)入$ORACLE_HOME/network/admin目錄,發(fā)現(xiàn)沒(méi)有sqlnet.ora文件,可能是沒(méi)有配置sqlnet.ora文件。那么我們?cè)趫D形界面下,用netca命令生成sqlnet.ora文件,然后再增加那2個(gè)參數(shù)。
選擇第2個(gè)單選按鈕,命名方法配置,進(jìn)入下一步
將上圖中的Local Naming加到右邊空白窗格,最后點(diǎn)finish。那么,此時(shí)在$ORACLE_HOME/network/admin目錄下就會(huì)生成sqlnet.ora文件。
sqlnet.ora文件剛創(chuàng)建以后,里面的內(nèi)容只有下面幾行,
現(xiàn)在添加WALLET_LOCATION和SQLNET.WALLET_OVERRIDE這2個(gè)參數(shù),
現(xiàn)在,Oracle客戶端的安全外部密碼存儲(chǔ)已經(jīng)配置完畢。
為了簡(jiǎn)化操作步驟,也可以將操作步驟(1)和(2)合為一步,直接創(chuàng)建wallet及其證書(shū),如下圖所示:
其中,前兩次輸入的密碼為wallet本身的密碼,這里輸入Oracle123,后兩次輸入的密碼為用戶szd_base_v2的密碼ysyktest。
現(xiàn)在,我們嘗試去用base的連接串去連接Oracle數(shù)據(jù)庫(kù),查看其登錄用戶為szd_base_v2,這樣就達(dá)到了不用輸密碼登錄數(shù)據(jù)庫(kù)的目的。
那么,用szd_base_v2用戶去連接Oracle數(shù)據(jù)庫(kù),也是一樣的效果。
現(xiàn)在我們看一下視圖v$encryption_wallet的內(nèi)容有什么變化,
下面是沒(méi)有使用Security External Password Store之前,視圖v$encryption_wallet的內(nèi)容(前面在創(chuàng)建wallet之前也提到過(guò),呵呵)
通過(guò)上面2圖對(duì)比,我們不難發(fā)現(xiàn),Oracle現(xiàn)在使用了我們剛才創(chuàng)建的wallet,并且該wallet的狀態(tài)為打開(kāi)且正在使用。
如果用戶szd_base_v2的密碼進(jìn)行了更改,也需要把wallet里的證書(shū)信息進(jìn)行更改,否則證書(shū)里還是存放舊密碼的信息,在連接Oracle數(shù)據(jù)庫(kù)的時(shí)候就會(huì)報(bào)錯(cuò)。下面將用戶szd_base_v2的密碼改為ysykbase,再用sqlplus /@base登錄,看有什么報(bào)錯(cuò)。
現(xiàn)在,我們用mkstore命令將wallet里的證書(shū)進(jìn)行更改,然后再用sqlplus /@base登錄,就會(huì)正常連接。
其中,前兩次輸入的密碼為剛剛更改的用戶szd_base_v2的密碼,第三次輸入的密碼為wallet的密碼。
除了用sqlplus直接登錄Oracle數(shù)據(jù)庫(kù)以外,在導(dǎo)入導(dǎo)出數(shù)據(jù)和一些對(duì)數(shù)據(jù)庫(kù)日常維護(hù)的SHELL腳本中也可以使用,而且不會(huì)暴露明文密碼,可以消除一定的安全隱患。例如,下面的1個(gè)expdp腳本和1個(gè)SHELL腳本。
至此,用Oracle的Secure External Password Store功能實(shí)現(xiàn)無(wú)密碼登錄數(shù)據(jù)庫(kù) 演示完畢。
參考網(wǎng)址:
官方文檔 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/
如果您覺(jué)得此篇文章對(duì)您有幫助,歡迎關(guān)注微信公眾號(hào):guestart的DBA學(xué)習(xí)筆記,您的支持是對(duì)我最大的鼓勵(lì)!
文章名稱(chēng):使用Oracle的SecurityExternalPasswordStore功能實(shí)現(xiàn)無(wú)密碼登錄數(shù)據(jù)庫(kù)
新聞來(lái)源:http://www.rwnh.cn/article42/jgjjhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)