802
windows
DB2數據庫安全(二)——身份認證
根據《循序漸進DB2》(牛新莊)第13章內容整理
身份認證(authentication)
1.什麼時候進行身份認證
DB2身份認證 控製數據庫安全性策略的以下方麵:
- 誰有權訪問實例或數據庫
- 在哪裏以及如何校驗用戶的 密碼
在發出attach和connect命令時,**它借助於底層操作係統的安全特性實現對DB2用戶的身份認證**。attach命令用來連接實例。connect命令用來連接實例中的數據庫。
下麵的示例展示了DB2對發出這些命令的用戶進行身份驗證的不同方式,這些示例在數據庫管理程序配置文件中使用默認的身份認證類型SERVER。最後一個示例說明了如何使用DB2修改服務器操作係統上的密碼。
用創建DB2實例時的用戶ID登錄到安裝DB2的機器上。發出以下命令:
[db2inst1@db22 ~]$ db2 connect to sample
Database Connection Information
Database server = DB2/LINUXX8664 11.1.1.1
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
這裏,雖然沒有顯示的提供用戶名和密碼,但是隱式地執行了身份認證。使用登錄機器的用戶ID,並假設這個ID和密碼已經經過了操作係統的檢驗。
顯示的命令為:
db2 connect to sample user db2inst1 using password dbpwd
2.DB2身份認證類型
2.1 客戶機、服務器
2.2 身份認證類型
DB2能夠根據用戶是試圖連接數據庫,還是執行實例連接和實例級操作,指定不同的身份認證機製。在默認情況下,實例對於所有實例級和連接級請求使用一種身份認證類型,這由數據庫管理配置參數**AUTHENTICATION來指定**。DB2 V9.1中引入了數據庫管理程序配置參數SRVCON_AUTH。這個參數專門處理對數據庫的連接。例如,如果在DBM CFG中進行以下設置:
DB2 GET DBM CFG
Server Connection Authencation (SRVCON_AUTH) = KERBEROS
Database manager authentication (AUTHENTICATION) = SERVER_ENCRYPT
那麼在連接實例時會使用SERVER_ENCRYPT。但是在連接數據庫時會使用KERBEROS身份認證。如果服務器是沒有正確的初始化KERBEROS,但是提供了有效的用戶ID/口令,那麼運行這個用戶連接實例,但是不允許他連接數據庫。身份認證類型確定在何處驗證用戶ID/口令對。所支持的主要身份驗證類型有:
- SERVER
- SERVER_ENCRYPT
- KERBEROS
- KRB_SERVER_ENCRYPT
- CLIENT
身份認證是在服務器和客戶機處同時設置的。
服務器
每個實例僅允許一種類型的身份認證,也就是說,設置適用於該實例下定義的所有數據庫。在數據庫管理器配置文件中使用AUTHENTICATION參數指定該設置。
db2 update database manager congiguration authentication auth_type
客戶機
在客戶機上編目的各數據庫擁有自己的身份認證類型,使用catalog database 命令指定。
db2 update database db_name at node node_name authentication auth_type
1)使用SERVER選項進行行身份認證
使用SERVER選項時,用戶ID和口令將發送到服務器進行校驗。考慮以下示例:
(1)用戶使用用戶名peter和口令peterpwd登錄到工作站
(2)peter隨後使用用戶ID db2user和口令*db2pwd*連接到SAMPLE數據庫,這是在遠程DB2服務器上定義的。
(3)*db2user*和 db2pwd在DB2服務器上被校驗。
若您想避免用戶ID和口令在網絡上被竊聽,可使用SERVER_ENCRYPT身份認證類型,這樣用戶ID和口令就都會被加密.
2)使用Kerberos進行身份驗證
是一種外部安全性協議,它使用通用密碼術創建共享的加密密鑰。Kerberos安全協議作為第三方用戶身份認證服務執行身份認證,它使用傳統的密碼術創建一個共享的密鑰。這個密鑰成為用戶的憑證,在請求本地或網絡服務時在所有情況下都使用它檢驗用戶身份。Kereros提供了安全的身份認證機製,這是因為用戶ID和口令不再需要以明文形式通過網絡傳輸。通過使用Kerberos安全協議,可以實現對遠程DB2數據庫服務器的單點登錄。
如上所述,Kerberos身份認證在DB2中是使用插件架構實現的。默認的Kerberos插件的源代碼在samples/security/plugins目錄中,稱為IBMkrb5.c。在DB2中使用Kerberos之前,必須在客戶機和服務器上同時啟用和支持Kerberos。為此,必須滿足以下條件:
- 客戶機和服務器必須屬於同一個域(用windows術語來說,是可信域)
- 必須設置適當的主體(Kerberos中的用戶ID)
- 必須創建服務器的keytab文件,實例所有者必須能夠讀這個文件
- 所有機器必須有同步的時鍾 DB2客戶機和服務器均支持Kerberos安全協議時,即可使用Kerberos身份認證類型。某些客戶機可能並不支持Kerberos,但依然需要訪問DB2服務器。為確保所有類型的客戶機都能安全的連接,將DB2服務器的身份認證類型設置為KRB_SERVER_ENCRYPT.這允許所有啟用了Kerberos的客戶機使用Kerberos進行身份驗證,而其他客戶機使用SERVER_ENCRYPT身份牙周,如下圖所示:
| 客戶機設置| 服務器設置| 客戶機/服務器解決方案|
|--|--|--|
|kerberos|KRB_SERVER_ENCRYPT|KERBEROS|
|Any other setting|KRB_SERVER_ENCRYPT|KRB_SERVER_ENCRYPT|
設置Kerberos身份認證
為了在DB2中啟用Kerberos身份認證,必須先告訴客戶機在哪裏尋找將使用的Kerberos插件,在客戶機上,運行以下命令:
db2 update dbm cfg using CLNT_KRB_PLUGIN IBMkrb5
在上麵的示例中,使用默認的Kerberos插件。如果使用的Kerberos需要實現特殊功能,DBA可以通過修改這個插件來執行特殊功能。
還可以告訴客戶機它正在針對哪個服務器主體進行身份認證。這個選項可以避免Kerberos身份認證的第一步,即客戶機尋找他要連接的實例所在的服務器主體。在客戶機上對數據庫進行編目時可以指定AUTHENTICATION參數。它的格式是:
DB2 CATALOG DB dbname AT NODE N1 AUTHENTIVATION KERBEROS TARGET PRINCIPAL service/host@REALM
3在客戶機上進行身份認證
最後更新:2017-04-14 15:00:30