DB2授權和特權安全機制

keeptrying發表於2012-11-27

DB2中有三種主要的安全機制:身份驗證authentication)、授權authorization)和特權privilege)。本文主要介紹後兩種安全機制。

l          授權,決定使用者和使用者組可以執行的操作以及他們可以訪問的資料物件。使用者執行高階資料庫和例項管理操作的能力由指派給他們的許可權決定。DB2中有5中不同的許可權級別:SYSADMSYSCTRLSYSMAINTDBADMLOAD

l          特權,粒度比授權要細,可以分配給使用者和使用者組。特權定義使用者可以建立或刪除的物件。它們還定義使用者可以用來訪問物件(比如表、檢視、索引和包)的命令。DB2 9中新增的一個概念是基於標籤的訪問控制(LBAC),它允許以更細的粒度控制誰有權訪問單獨的行或列。

 

一、  授權

DB2資料庫許可權分為例項級許可權(SYSADMSYSCTRLSYSMAINT資料庫級許可權(DBAMDLOADDB2中使用者所擁有的許可權主要考慮三個方面:例項級、資料庫級、資料庫操作級別,檢視命令是db2 get authorizations

DB2授權分為例項級許可權授權和資料庫級授權。例項級許可權必須由擁有SYSADM許可權的使用者通過update cfg來授予使用者組;資料庫級許可權由DBAMD許可權使用者通過grant命令顯示地授予使用者或使用者組

 

1、例項級許可權的獲得(SYSADMSYSCTRLSYSMAINT

它們的範圍包含例項級命令以及針對這個例項中的所有資料庫的命令。這些許可權只能分配給組。可以通過DBM CFG檔案分配這些許可權。

 

1)、獲得SYSADM許可權(系統管理許可權)

對一個例項擁有SYSADM許可權的使用者能夠對這個例項、例項中的任何資料庫以及這些資料庫中的任何物件發出任何DB2命令。他們還能夠訪問資料庫中的資料以及對其他使用者授予或撤銷特權或許可權。只允許SYSADM使用者更新DBM CFG檔案。

SYSADM許可權由DBM CFG檔案中的SYSADM_GROUP引數控制。檢視DBM CFG配置:db2 get dbm cfg。在 Windows 上,在建立例項時,這個引數設定為 Administrator(但是,如果發出命令 db2 get dbm cfg,它看起來是空的)。在 UNIX 上,它設定為建立這個例項的使用者的主組。

db2 update dbm cfg using SYSADM_GROUP db2grp1

這一修改直到例項重啟之後才會生效。

 

2)、獲得SYSCTRL許可權(系統控制許可權)

擁有SYSCTRL許可權的使用者可以在例項中執行所有管理和維護命令。但是,與SYSADM使用者不同,他們不能訪問資料庫中的任何資料,除非他們被授予了訪問資料所需的特權。

SYSCTRL使用者可以對例項中的任何資料庫執行的命令如下:

·db2 start/db2 stop

·db2 create/drop database

·db2 create/drop tablespace

·db2 backup/restore/rollforward database

·db2 runstats(針對任何表)

·db2 update db cfg for database 'dbname'

擁有SYSADM許可權的使用者可以用下面命令將SYSCTRL許可權分配給一個組:

db2 update dbm cfg using SYSCTRL_GROUP group name

 

3)、獲得SYSMAINT許可權(系統維護許可權)

SYSMAINT使用者只能執行與維護相關的任務:

·db2 start/db2 stop

·db2 backup/restore/rollforward database

·db2 runstats(針對任何表)

·db2 update db cfg for database 'dbname'

擁有SYSMAINT許可權的使用者不能建立或刪除資料庫或表空間

不能訪問資料庫中的任何資料,除非他們被顯示地授予訪問資料所需的特權。

擁有SYSADM許可權的使用者可以用下面命令將SYSMAINT許可權分配給一個組:

db2 update dbm cfg using SYSMAINT_GROUP group name

 

 

2、資料庫級許可權的獲得(DBADMLOAD

 

1)、獲得DBADM許可權(資料庫管理許可權)

DBADM使用者對一個資料庫有幾乎完全的控制能力。

可以執行的任務:

·db2 create/drop table

·db2 grant/revoke(任何特權)

·db2 runstats(任何表)

不能執行某些維護或管理任務:

·drop database

·drop/create tablespace

·backup/restore database

·update db cfg for database db name

DBADM使用者被自動地授予對資料庫物件及其內容的所有權。

DBADM是資料庫級許可權,可以分配給使用者和使用者組。

 

以下命令將授予DBADM許可權:

l          db2 create database test

建立資料庫test時, DBADM 許可權隱式地授予發出此命令的使用者。

l          db2 connect to sample

db2 grant dbadm on database to user tst1

這個命令只能由 SYSADM 使用者發出

它向使用者 tst1 授予示例資料庫上的 DBADM 許可權;

注意,在授予 DBADM 許可權之前,發出這個命令的使用者必須連線到示例資料庫。

l          db2 grant dbadm on database to group db2grp1

這個命令將 DBADM 許可權授予 db2grp1 組中的每個使用者;

只有 SYSADM 使用者能夠發出這個命令

 

2)、獲得LOAD許可權(對錶進行load操作的許可權)

LOAD 許可權允許使用者對錶發出 LOAD 命令。當用大量資料填充表時,LOAD 命令通常用來替代插入或匯入命令,它的速度更快。根據您希望執行的 LOAD 操作型別,僅僅擁有 LOAD 許可權可能還不夠。可能還需要表上的特定特權。

資料庫級許可權,可以被分配給使用者和使用者組。

擁有 LOAD 許可權的使用者可以執行以下命令:

·db2 quiesce tablespaces for table

·db2 list tablespaces

·db2 runstats(任何表)

·db2 load insert(必須有表上的插入特權)

·db2 load restart/terminate after load insert(必須有表上的插入特權)

·db2 load replace(必須有表上的插入和刪除特權)

·db2 load restart/terminate after load replace(必須有表上的插入和刪除特權)

只有擁有 SYSADM DBADM 許可權的使用者能夠對使用者或使用者組授予或撤消 LOAD 許可權。

以下示例演示 LOAD 許可權如何允許我們的使用者使用 LOAD 命令將資料裝載進 sales 表中。假設已經發出了命令 db2 connect to sample

·db2 grant load on database to user tst1

 db2 grant insert on table sales to user tst1

有了 LOAD 許可權和插入特權,tst1 就可以對 sales 表發出 LOAD INSERT LOAD RESTART,或者在 LOAD INSERT 之後發出 TERMINATE

·db2 grant load on database to group grp1

  db2 grant delete on table sales to group grp1

  db2 grant insert on table sales to group grp1

有了 LOAD 許可權以及刪除和插入特權,grp1 的任何成員就可以對 sales 表發出 LOAD REPLACE LOAD RESTART,或者在 LOAD REPLACE 之後發出 TERMINATE

 

 

 

二、  特權

特權大體上分成兩類:資料庫級特權(針對資料庫中的所有物件)和物件級特權(與特定的物件相關聯)。

使用者可以擁有的資料庫級特權有:

l          CREATETAB:使用者可以在資料庫中建立表。

l          BINDADD:使用者可以使用BIND命令在資料庫中建立包。

l          CONNECT:使用者可以連線資料庫。

l          CREATE_NOT_FENCED:使用者可以建立unfenced使用者定義函式(UDF)。

l          LIMICIT_SCHEMA:使用者可以在資料庫中隱士地建立模式,而不需要使用CREATE SCHEMA命令。

l          LOAD:使用者可以將資料裝載進表中。

l          QUIESCE_CONNECT:使用者可以訪問處於靜默(quiesced)狀態的資料庫。

l          CREATE_EXTERNAL_ROUTINE:使用者可以建立供用程式和資料庫的其他使用者使用的過程。

 

物件級特權:

特權名稱

相關物件

描述

CONTROL

表、檢視、索引、包、別名、不同的型別、使用者定義函式、序列

提供對物件的全部許可權。擁有這種特權的使用者還可以向其他使用者授予或撤消對物件的特權。

DELETE

表、檢視

允許使用者從物件中刪除記錄。

INSERT

表、檢視

允許使用者通過 INSERT IMPORT 命令將記錄插入物件中。

SELECT

表、檢視

提供使用選擇語句來檢視物件內容的能力。

UPDATE

表、檢視

允許使用者使用更新語句修改物件中的記錄。

ALTER

允許使用者使用更改語句更改物件定義。

INDEX

允許使用者使用建立索引語句在物件上建立索引。

REFERENCES

提供在物件上建立或刪除外來鍵約束的能力。

BIND

允許使用者重新繫結現有的包。

EXECUTE

包、過程、函式、方法

允許使用者執行包和例程。

ALTERIN

模式

允許使用者修改模式中的物件定義。

CREATEIN

模式

允許使用者在模式中建立物件。

DROPIN

模式

允許使用者刪除模式中的物件。

 

1、顯示地授予、撤銷特權

可以使用GRANTREVOKE命令顯示地對使用者或組授予或撤銷特權。

以下示例給使用者test1(隸屬於組db2grp1)授權,示例資料庫(sample)中的模式名是gmilne(即:由使用者gmilne發出db2sampl命令)。這些授權由擁有SYSADM許可權的使用者發出:

授予特權:

db2 grant select on table gmilne.org to user test1

db2 grant insert on table gmilne.org to group db2grp1

(因為test1db2grp1組的成員)

db2 grant dropin on schema gmilne to all

 

撤銷特權:

db2 revoke select on table gmilne.org from user test1

db2 revoke insert on table gmilne.org from group db2grp1

db2 revoke dropin on schema gmilne from all

注意:從組中撤銷特權不一定會從這個組的所有成員中撤銷它!

例如,以下命令可以用來從db2grp1撤銷對gmilne.org表的所有特權(CONTROL除外):

db2 revoke all on table gmilne.org from group db2grp1

但是,test1使用者(db2grp1組的成員)仍然擁有對這個表的選擇權,如果它是被直接授予這個特權的。

 

2、隱式地授予、撤銷特權

當發出某些命令時,DB2 可能會自動地授予特權,而不需要像前面看到的那樣發出顯式的 GRANT 語句。當刪除建立的物件時,這些特性會隱式地撤消。但是,當顯式地撤消更高階的特權時,不會撤消它們。

下表總結了會導致資料庫管理程式隱式地授予特權的一些命令。

發出的命令

授予的特權

被授予特權的使用者

CREATE TABLE mytable

mytable 上的 CONTROL

發出命令的使用者

CREATE SCHEMA myschema

myschema 上的 CREATEINALTERIN DROPIN,以及將這些特權授予其他使用者的能力

發出命令的使用者

CREATE VIEW myview

myview 上的 CONTROL(只有在使用者擁有 myview 定義中引用的所有表和檢視上的 CONTROL 特權的情況下)

發出命令的使用者

CREATE DATABASE mydb

mydb 的系統編目表上的 SELECTmydb 上的 IMPLICIT_SCHEMA

PUBLIC

 

注:1當使用者建立資料庫時,隱式地授予這個使用者這個資料庫上的 DBADM 許可權。獲得 DBADM 許可權就會隱式地授予 CONNECTCREATETABBINDADDIMPLICIT_SCHEMA CREATE_NOT_FENCED 特權。即使撤消了 DBADM 許可權,這個使用者仍然會保留這些特權。

2PUBLIC 是一個特殊的 DB2 組,其中包括特定資料庫的所有使用者。與前面討論過的其他組不同,PUBLIC 不必在作業系統級進行定義。在預設情況下,會向 PUBLIC 授予一些特權。例如,這個組自動接受資料庫上的 CONNECT 特權和編目表上的 SELECT 特權。可以對 PUBLIC 組發出 GRANT REVOKE 命令,比如:

db2 grant select on table sysibm.systables to public

db2 revoke select on table sysibm.systables from public

 

3、間接獲得特權

當資料庫管理器執行 時,可以間接獲得特權。包中包含一個或多個 SQL 語句,這些語句已經轉換為 DB2 用來在內部執行它們的格式。換句話說,包中包含可執行格式的多個 SQL 語句。如果包中的所有語句都是靜態的,那麼使用者只需要有包上的 EXECUTE 特權,就能夠成功地執行包中的語句。

例如,假設 db2package1 執行以下靜態的 SQL 語句:

db2 select * from org
db2 insert into test values (1, 2, 3)

在這種情況下,擁有 db2package1 上的 EXECUTE 特權的使用者會間接地獲得 org 表上的 SELECT 特權和 test 表上的 INSERT 特權。

 

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-750046/,如需轉載,請註明出處,否則將追究法律責任。

相關文章