很多DBA在主機批次程式上的執行上,常使用
sqlplus userA/password@oradb

來登入資料庫,進行批次作業,但由於必須把執行批次的使用者帳號、密碼以明碼的方式存放在批次程式的文檔(shell)中,這對資料庫安全與駭客橫行的時代中,顯然不是最好的做法,因次,在oracle 10gR2後,oracle提供了 wallet 來儲存口令資訊(credential),通過使用Oracle Wallet可以達到任意使用者不使用密碼登入資料庫(非作業系統認證方式)。

注意:

使用 wallet 來儲存口令資訊不會阻止人們訪問數據庫。
任何有權訪問 wallet 的人都可以通過 Oracle 數據庫客戶端庫使用存儲的憑證,而無需密碼。腳本需要在帶有 wallet 的服務器上和創建 wallet 的用戶下運行,以便使用它來訪問數據庫。
但是,因為密碼是被加密方式存儲在 wallet 中,因此無法被讀取,進而保護帳號密碼不被外流。


用法:
mkstore --help
Oracle Secret Store Tool: 版本 11.2.0.1.0 - Production
版權所有 (c) 2004, 2009, Oracle 和/或其子公司。保留所有權利。

未指定 Wallet 的位置。
mkstore [-wrl wrl] [-create] [-createSSO] [-createLSSO] [-createALO] [-delete] [
-deleteSSO] [-list] [-createEntry alias secret] [-viewEntry alias] [-modifyEntry
 alias secret] [-deleteEntry alias] [-createCredential connect_string username p
assword] [-listCredential] [-modifyCredential connect_string username password]
[-deleteCredential connect_string] [-help] [-nologo]


1. 建立wallet
 語法: mkstore -wrl <wallet_location> -create

eg:
echo $wallet
/home/myuser/wallet

mkstore -wrl $wallet -create
Oracle Secret Store Tool: 版本 11.2.0.1.0 - Production
版權所有 (c) 2004, 2009, Oracle 和/或其子公司。保留所有權利。

輸入口令:(輸入wallet的密碼,要設定的複雜些,否則失敗)

再次輸入口令:(輸入wallet的密碼)

2. tnsname中將連線與口令資訊做對應
skate_192.168.1.9 =            <==口令資訊名稱
  (DESCRIPTION =      
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb)    
    )
  )

3.把登入資料庫的使用者認證資訊新增到wallet中

mkstore -wrl $wallet -createCredential skate_192.168.1.9 skate skatepwd
Oracle Secret Store Tool: 版本 11.2.0.1.0 - Production
版權所有 (c) 2004, 2009, Oracle 和/或其子公司。保留所有權利。

Enter password:

Create credential oracle.security.client.connect_string1

4.在client的sqlnet.ora檔案裡,編輯引數“WALLET_LOCATION ”
WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /home/myuser/wallet)
     )
   )

SQLNET.WALLET_OVERRIDE = TRUE

說明:該SQLNET.WALLET_OVERRIDE=true 允許此方法覆蓋任何現有的操作系​​統身份驗證配置。

5.測試在客戶端無需密碼連線資料庫測試
sqlplus /@skate_192.168.1.9

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 7月 24 17:59:21 2012
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show user;
USER is "skate"

6.如何管理wallet

mkstore -wrl e:\temp\wallet -listCredential
Enter password:

List credential (index: connect_string username)
1: skate_192.168.1.9 skate


Oracle 12c後,導入了orapki(後來稱為Oracle Wallet Manager/OWM),那什麼是 Oracle Wallet Manager呢?
Oracle Wallet Manager 可以用來管理 Oracle 客戶端和服務器上的公鑰安全憑證。
它創建的 Wallet 可由 Oracle 數據庫、Oracle 應用服務器和 Oracle 身份管理基礎設施讀取。
Oracle Wallet Manager 使 Wallet 所有者能夠管理和編輯其 Oracle  Wallet 中的安全憑證。
Wallet 是一個受密碼保護的容器,用於存儲身份驗證和簽名憑證,包括 SSL 所需的私鑰、證書和可信證書。

可以使用 Oracle Wallet Manager 執行以下任務:
    創建 Wallet 
    生成證書請求
    打開 Wallet 以訪問基於 PKI 的服務
    使用符合公鑰加密標準 #11 ( PKCS #11 ) 規範 的 API 將憑證保存到硬件安全模塊
    將 Wallet 上傳到(並從中下載)LDAP 目錄
    導入第三方PKCS #12格式的 Wallet 
    將 Oracle  Wallet 導出到第三方環境

甲骨文 Wallet 受密碼保護。Oracle Wallet Manager 包括一個增強的 wallet 密碼管理模塊
,該模塊強制執行密碼管理策略準則,包括以下內容:
    最小密碼長度(8 個字符)
    最大密碼長度無限制
    需要字母數字字符組合
 
mkstore 和 orapki/OWM工具的差異?
由於oracle官方文件沒有針對這兩個工具有相關的比較說明,
所以上了oracle的社渠討論區找了一下文件,下面擷取部分內容來理解一下。
'mkstore' 是在 10g 的早期引入的。除了創建 Wallet 之外,“mkstore”還可用於存儲登錄憑據。
這現在可用於編寫腳本並提供數據源詳細信息,從而避免使用硬編碼的數據庫名稱/密碼。

在自動登錄 Wallet 的情況下,“orapki”不反映與 TDE 有關的主密鑰。
由於 12c,Oracle 建議通過“Administer Key Management ...”相關命令進行自動登錄 Wallet 。
顧名思義,“orapki”的使用包含了除了 Wallet 之外的所有 PKI 元素(包括證書和撤銷列表,如果有的話)。
OWM 和“orapki”是對應的,在融合中間件中更為普遍。它還用於管理 JKS 密鑰庫。

問題:
    1) 這個 Wallet 是否也可以存儲 TDE 密鑰以及包括證書在內的私鑰/公鑰,而不是使用 orapki 來存儲?
    
    2) 或者如果我們使用 orapki 創建一個 Wallet ,
    我們是否可以像使用 mkstore 一樣存儲外部身份驗證信息以自動連接到數據庫(tns 用戶 ID/密碼)?
    換句話說,我們可以使用一個或另一個而不是同時使用兩者。
    
    3)這兩種 Wallet 在存儲憑證和功能方面在技術上是否具有相同的能力?
    
    4) 兩者有什麼共同的能力,一個可能有哪些特性,而另一個沒有?
    
    5) 如果一個可以替換另一個,oracle 對使用哪一個的建議是什麼。
    
    6)如果兩個 Wallet 可以交換,是否能預言Oracle未來這部分的發展方向是什麼。

說明:
    (1) 是的, Wallet 本身可以存儲那些 PKI 相關信息。然而,'mkstore' 無法做到這一點。
    根據 EUS 文檔中的 Oracle,有一個特定的註釋 - “mkstore 實用程序僅用於故障排除。
    此工具的名稱和功能將來可能會更改”。
    
    (2) 兩個工具之間只有部分功能重疊。存儲在 Wallet 中的數據庫登錄憑據我認為必須通過“mkstore”。
    
    (3) 不知道你所說的“兩種 Wallet ”到底是什麼意思?在這兩種工具之間, Wallet 是相同的。
    存儲在此 Wallet 中的內容以及可以執行相同操作的人有所不同。
    
    (4) 所有與 PKI 相關的信息都必須通過“orapki”。與'crl'相關的create的使用 我認為這兩者肯定是共同的。
    
    (5) 和 (6) 請參閱上述 (1) 項下的註釋。
 
此外,它還取決於您的應用程序和環境需求。例如,如果它僅與 EUS 和 DB 登錄憑據有關,
則“mkstore”現在就足夠了。相反,如果 PKI 相關屬性在中間件環境中發揮作用,則需要“orapki”。

我個人的看法:
mkstore是早期的工具,但隨著oracle併購了一些middleware產品後,發現相關的安全性連線無法透過mkstore來達成,
所以就做了orapki/OWM這類的工具來做管理,看11c之後的文件,似乎對 mkstore 工具著墨的越來越少,
相信未來該工具應該會慢慢的退場。
(不過考量可能有許多dba已經透過 mkstore 來產生wallet來保護連線的帳號密碼,
應該還是會保留一陣子吧,除非可以將把mkstore功能整併至OWM工具中).
這部分後續持續fellow up中。

ref:
https://oracle-base.com/articles/10g/secure-external-password-store-10gr2

https://community.oracle.com/mosc/discussion/4497301/differences-between-mkstore-and-orapki-owm-in-12c-and-onward

arrow
arrow
    文章標籤
    oracle
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()