前言:
DB2數據庫權限分為實例級權限(SYSADM、SYSCTRL、SYSMAINT、SYSMON)和DB2數據庫級權限(DBAMD、LOAD)。DB2中用戶所擁有的權限主要考慮三個方面:實例級、數據庫級、數據庫操作級別,查看命令是db2 get authorizations。 DB2授權可分為實例級權限授權和數據庫級別授權,實例級別權限必須由擁有SYSADM權限的用戶通過update cfg來授予用戶組,數據庫對象級別權限由DBAMD權限用戶通過grant命令顯示的授予用戶或用戶組。 |
一、DB2權限簡介
DB2數據庫權限分為實例權限級別(SYSADM、SYSCTRL、SYSMAINT、SYSMON)和DB2數據庫權限級別(DBAMD、LOAD)。SYSCTRL、SYSMAINT、SYSMON權限級別的用戶不能訪問數據,DBAMD、LOAD權限級別的用戶可以訪問數據。
實例級別權限(只能在用戶組級別上進行分配):
SYSADM ----系統管理權限(UNIX系統中,SYSADM用戶組默認地設置為實例擁有者所在的主用戶組,因此,該組中的任何用戶都擁有SYSADM權限)
SYSCTL---- 系統控制權限
SYSMAINT---- 系統維護權限
數據庫級別:
dbadm---- 數據庫管理權限(不能執行諸如刪除數據庫、創建和刪除表空間、備份或者恢復數據庫等等維護性和管理任務)
load---- 對表進行load操作的權限
1、 DB2數據庫權限:
CONNECT-允許用戶連接數據庫
BINDADD-允許用戶在數據庫中創建新的包
CREATETAB-允許用戶在數據庫中創建新的表
CREATE_NOT_FENCED-允許用戶注冊定義為 NOT FENCED 的用戶定義函數(UDF)或存儲過程
IMPLICITSCHEMA -允許用戶在尚不存在的模式中創建對象(它自動地創建模式)*
QUIESCE_CONNECT-允許用戶連接處於 quiesced 狀態的數據庫
CREATE_EXTERNAL_ROUTINE-允許用戶注冊外部例程(用 C 和 Java 等外部語言編寫的例程)
2、表空間特權:
USE -允許用戶在指定的表空間中創建表
3、模式特權:
CREATEIN-允許用戶在模式中創建對象
ALTERIN-允許用戶在模式中修改對象
DROPIN-允許用戶從模式中刪除對象
4、表/視圖特權:
CONTROL-授予用戶在表和視圖上的所有特權,以及將這些特權(除了 CONTROL)授予別人
ALTER -允許用戶在表中添加列、在表和它的列上添加或修改注釋、添加主鍵或惟一約束以及創建或刪除表檢查約束
DELETE-允許用戶從表或視圖中刪除行
INDEX -允許用戶在表上創建索引
INSERT-允許用戶在表或視圖中插入數據
REFERENCES-允許用戶創建和刪除外鍵,這需要指定關系中的父表
SELECT-允許用戶從表或視圖中檢索行、在表上創建視圖以及運行EXPORT 實用程序
UPDATE-允許用戶修改表、視圖或者表或視圖中某些列中的數據;用戶可以只在特定列上具有這種特權
5、索引特權:
CONTROL-允許用戶刪除索引
6、包特權:
CONTROL-允許用戶重新綁定、刪除或執行包,以及將這些特權(除了 CONTROL)授予別人
BIND -允許用戶重新綁定現有的包
EXECUTE-允許用戶執行包
7、例程特權:
EXECUTE允許用戶調用例程,從例程創建函數(只應用於函數),以及在任何 DDL 語句(比如 CREATE VIEW、CREATE TRIGGER 或定義約束時)中引用例程
9、 序列特權:
USAGE -允許用戶對序列使用 NEXTVAL 和PREVVAL 表達式
ALTER -允許用戶使用 ALTER SEQUENCE 語句修改序列屬性
特權的信息存儲在七個系統編目視圖中:
*SYSCAT.DBAUTH - 數據庫特權
*SYSCAT.COLAUTH - 表和視圖列特權
*SYSCAT.INDEXAUTH - 索引特權
*SYSCAT.PACKAGEAUTH - 包特權
*SYSCAT.SCHEMAAUTH - 模式特權
*SYSCAT.TABAUTH - 表和視圖特權
*SYSCAT.TBSPACEAUTH - 表空間特權
查看當前連接用戶權限:db2get authorizations
“直接” 權限意味着此權限是明確授予此用戶的。“間接”權限意味着此用戶屬於具有此權限的組。
權限總結:DB2中用戶所擁有的權限主要考慮三個方面:實例級、數據庫級、數據庫對象級別,查看方法是db2get authorizations,具體表的授權信息存放在syscat.tabauth中。
二、授權操作
DB2數據庫授權由特權組和高級數據庫管理程序(實例級)維護和實用操作組成。在DB2可用的5 種權限中,SYSADM、SYSCTRL和 SYSMAINT 是實例級權限。這意味着它們的范圍包含實例級命令以及針對這個實例中的所有數據庫的命令。這些權限只能分配給組;可以通過 DBM CFG 文件分配這些權限。
1、獲得 SYSADM
具有 SYSADM 權限的用戶可以發出作用於 DB2 實例、實例內的任何數據庫以及這些數據庫內的任何對象的任何 DB2 命令。他們也能夠訪問數據庫內的數據,授予或撤消特權和權限。SYSADM 用戶是唯一被允許更新數據庫管理器配置(Database Manager Configuration(DBM CFG))文件的用戶。
SYSADM 權限在 DBM CFG 中通過 SYSADM_GROUP 參數控制。當創建實例時,在 Windows 上這個參數被設置為 Administrator(盡管當您發出命令 db2 get dbm cfg 時顯示為空)。在 UNIX 上,該參數被設置為創建實例的用戶的主組。由於 SYSADM 用戶是唯一被允許更新 DBMCFG 的用戶,所以,他們也是唯一能夠將任何 SYS* 權限授予其它組的用戶。
以下示例演示如何向 db2grp1 組授予 SYSADM 權限:
db2 update dbm cfg usingSYSADM_GROUP db2grp1
2、 獲得 SYSCTRL
具有 SYSCTRL 權限的用戶可以執行實例內的所有管理和維護命令。然而,與 SYSADM 用戶不同,他們不能訪問數據庫內的任何數據,除非他們被授予了這樣做所需要的特權。SYSCTRL 用戶可以對實例內的任何數據庫執行
擁有 SYSADM 權限的用戶可以使用以下命令將 SYSCTRL 分配給一個組:
db2 update dbm cfg usingSYSCTRL_GROUP group name
3、 獲得 SYSMAINT
具有 SYSMAINT 權限的用戶可以發出的命令是 SYSCTRL 權限被允許的命令的子集, 就是被看作與“維護”有關的一些任務。
請注意,具有 SYSMAINT 的用戶不能創建或刪除數據庫或表空間(tablespace)。他們也不能訪問數據庫內的任何數據,除非他們被授予了這樣做所需要的特權。
擁有 SYSADM 權限的用戶可以使用以下命令將 SYSMAINT 分配給一個組:
db2 update dbm cfg usingSYSMAINT_GROUP group name。
4、Grant
DB2數據庫授權是通過GRANT命令實現的,DB2數據庫授權后,用戶才可以對DB2進行相應的操作。針對特定數據庫的DBADM 和LOAD 權限可以分配給用戶或用戶組。可以使用GRANT命令顯式地分配這些權限。
語法:
>>-GRANT--authorization-specification--------------------------->
.-,----------------------.
V |
>--TO----+-authorization-name-+-+--+-------------------+-------><</em>
+-ROLE--role-name----+ '-WITH GRANT OPTION-'
'-PUBLIC-------------'
簡單示例(需要先連接數據庫):
--授權數據庫管理權限給用戶
db2grant dbadm on database to user db2admin
--授權數據庫管理權限給用戶組
db2 grant dbadm on database to group db2grp1
--授權查詢:
db2grant select on table tableName to user db2admin
--全部授權
DB2 GRANTALL ON TABLE OWK."FAVMENU" TO USER sckdev