DB2 的安全性由兩方面組成:認證和授權
1、認證
認證就是系統驗證用戶身份的過程。說的簡單點,就是驗證用戶名和密碼,因為DB2用戶同時也是操作系統用戶,所以,首先必須得到操作系統的認可。在默認情況下,DB2使用的就是基於操作系統的用戶認證。當然,你也可以指定其它認證方式。DBM CFG 的AUTHENTICATION參數決定在哪里進行用戶認證。
AUTHENTICATION可以設定為以下值:
SERVER (default) 認證在服務器端執行 CLIENT 認證在客戶端執行 SERVER_ENCRYPT 和SERVER 參數相似,而且用戶的id 和密碼都經過加密 KERBEROS 認證使用Kerberos 安全機制 SQL_AUTHENTICATION_DATAENC 在服務器端進行認證,數據庫連接時必須使用數據加密 SQL_AUTHENTICATION_DATAENC_CMP 與上面類似,但當條件不允許的情況下,可以不對數據進行加密 GSSPLUGIN 使用外部的基於GSS API 插件的安全工具進行認證
查看當前設置:
db2 get dbm cfg | grep AUTHENTICATION
2、授權
授權是 DB2 獲取有關已認證的 DB2 用戶的信息的過程,此信息指示該用戶可執行的數據庫操作,以及可訪問的數據對象。
很多人都感覺DB2的權限非常難理解,其實非常簡單,大家之所以感覺難理解,主要原因是IBM把它介紹復雜了,然后,各種書籍、資料把DB2 的官方資料翻譯出來呈現在大家面前,有的翻譯的可能並不是很好,所以大家就感覺難理解了。其實,大家完全可以把DB2想象一個倉庫,倉庫中有好多房間,房間中有好多東西。倉庫管理員有所有房間的鑰匙,你想進入某個房間時,你必須有該房間的鑰匙。如果你沒有鑰匙,你可以像管理員申請。那么DB2 有哪些房間呢(也就是DB2的組成部分)? DB2由 實例、數據庫、表空間、模式、表、視圖等組成。每個組成部分都定義了相應的權限,如:你想訪問某個表,那么你首先得連接數據庫,所以,你必須具有該數據庫的CONNECT權限,同時你還必須有該表的SELECT 權限。這就相當於,你想進入一個房間,你必須有該房間的鑰匙。下面我們來了解一下DB2的不同組成部分定義了哪些權限
實例級別權限:
SYSADM 系統管理權限
SYSCTRL 系統控制權限
SYSMAINT系統維護權限
SYSMON 系統監視權限
SYSADM > SYSCTRL > SYSMAINT > SYSOMN
查看方式:
get authorizations
數據庫級別權限:
ACCESSCTRL 允許擁有者授予和撤銷所有對象特權和數據庫權限以及 ACCESSCTRL、DATAACCESS、DBADM 和 SECADM 權限。 BINDADD 允許擁有者在數據庫中創建新包 CONNECT 允許擁有者連接到數據庫 CREATETAB 允許擁有者在數據庫中創建新表 CREATE_EXTERNAL_ROUTINE 允許擁有者創建過程以供數據庫的應用程序和其他用戶使用 CREATE_NOT_FENCED_ROUTINE 允許擁有者創建未受防護的用戶定義的函數(UDF)或過程 DATAACCESS 允許擁有者訪問存儲在數據庫表中的數據。 DBADM 允許擁有者充當數據庫管理員 EXPLAIN 允許擁有者說明查詢方案,而不要求他們擁有訪問這些查詢方案所引用的表中數據的特權 IMPLICIT_SCHEMA 允許任何用戶隱式地創建模式 LOAD 允許擁有者將數據裝入到表中。 QUIESCE_CONNECT 允許擁有者在數據庫處於停頓狀態時訪問該數據庫。 SECADM 允許擁有者充當數據庫的安全管理員。 SQLADM 允許擁有者監視和調整 SQL 語句。 WLMADM 允許擁有者充當工作負載管理員
查看方式:
GRANT CREATETAB ON DATABASE TO USER <user_name> REVOKE CREATETAB ON DATABASE FROM USER <user_name>
表空間特權:
USE 允許用戶在該表空間中創建表 使用方法: GRANT USE OF TABLESPACE <tablespace_name> TO USER <user_name> REVOKE USE OF TABLESPACE <tablespace_name> FROM USER <user_name>
模式特權
CREATEIN 允許用戶在模式中創建對象 ALTERIN 允許用戶在模式中改變對象 DROPIN 允許用戶在模式中刪除對象 使用方法: GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA <schema_name> TO USER <user_name> REVOKE CREATEIN,DROPIN,ALTERIN ON SCHEMA <schema_name> FROM USER <user_name>
表和視圖特權
SELECT 允許用戶檢索表或視圖中的行、對表創建視圖以及運行 EXPORT 實用程序。 INSERT 允許用戶將行插入表或視圖以及運行 IMPORT 實用程序。 UPDATE 允許用戶更改表或視圖中的條目,或表或視圖中的一個或多個特定列的條目。用戶只能對特定的列擁有此特權。 DELETE 允許用戶從表或視圖中刪除行。 ALTER 允許用戶修改表,例如,為表添加列或唯一約束。具有 ALTER 特權用戶還可以 COMMENT ON 一個表,或者表的一列。 INDEX 允許用戶對表創建一個索引。索引創建者自動具有索引的 CONTROL 特權。 REFERENCES 允許用戶創建和刪除一個外鍵,並指定該表為關系中的父表。用戶可能只對特定的列擁有此特權。 CONTROL 給用戶提供對表或視圖的所有特權,包括刪除它以及授予和撤銷各個表特權的功能。 使用方法: GRANT SELECT ON TABLE <table_name> TO USER <user_name> REVOKE SELECT ON TABLE <table_name> FROM USER <user_name>
索引特權
CONTROL 允許用戶刪除和修改索引 GRANT CONTROL ON INDEX <indext_name> TO USER <user_name> REVOKE CONTROL ON INDEX <indext_name> FROM USER <user_name> 函數、過程、方法特權 EXECUTE 允許用戶執行函數、過程、方法 使用方法: GRANT EXECUTE ON FUNCTION <function_name> TO USER <user_name> GRANT EXECUTE ON PROCEDURE <procedure_name> TO USER <user_name> GRANT EXECUTE ON METHOD <method_name> TO USER <user_name>
程序包特權
EXECUTE 允許用戶執行或運行程序包 BIND 允許用戶重新綁定或綁定該程序包以及添加具有相同程序包名和創建者的新程序包版本 CONTROL 給用戶提供重新綁定、刪除或執行程序包的功能,以及將那些特權授予其他用戶的功能 使用方法: GRANT EXECUTE ON PACKAGE <package_name> TO USER <user_name> REVOKE EXECUTE ON PACKAGE <package_name> FROM USER <user_name>
用戶、用戶組、PUBLIC組
DB2 的用戶是操作系統用戶,當然,DB2用戶組也是操作系統用戶組。由上面的介紹大家就可以知道賦予用戶權限是非常繁瑣的,為了方便權限管理,我們可以把權限賦給用戶組,這樣,任何屬於該組的用戶都可以獲得相應的權限。值得注意的是DB2還定義了一個PUBLIC組,任何人或組都屬於PUBLIC組,當一個數據庫建立時,下面的特權都會自動的授予PUBLIC 組:CONNECT,CREATETAB,IMPLICIT SCHEMA,BINDADD,這就是當我們新建一個操作系統用戶,沒有賦給它任何權限,而它卻可以連接數據庫的原因
賦予用戶實例級別權限
細心的朋友可能已經發現了,我們在介紹實例級別權限的時候沒有說明如何賦予用戶實例級別權限,那是因為我們不能通過GRANT和REVOKE語句賦予和撤銷權限,而且實例級別權限也不能賦予單個用戶,只能賦予用戶組。那么到底該怎么賦予用戶組實例級別權限呢?在DBM CFG中定義以下4個參數,我們只要修改這幾個參數就可以賦予用戶組相應的實例級權限。 db2 get dbm cfg | grep GROUP SYSADM_GROUP SYSCTRL_GROUP SYSMAINT_GROUP SYSMON_GROUP
修改方法:
//將sde所在組賦予SYSMON權限 UPDATE DBM CFG USING SYSMON_GROUP sde所在的用戶組名稱
轉載參考:http://iamwave.iteye.com/blog/649736