DB2的認證和授權


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM