DB2授權和特權安全機制
DB2中有三種主要的安全機制:身份驗證(authentication)、授權(authorization)和特權(privilege)。本文主要介紹後兩種安全機制。
l 授權,決定使用者和使用者組可以執行的操作以及他們可以訪問的資料物件。使用者執行高階資料庫和例項管理操作的能力由指派給他們的許可權決定。DB2中有5中不同的許可權級別:SYSADM、SYSCTRL、SYSMAINT、DBADM和LOAD。
l 特權,粒度比授權要細,可以分配給使用者和使用者組。特權定義使用者可以建立或刪除的物件。它們還定義使用者可以用來訪問物件(比如表、檢視、索引和包)的命令。DB2 9中新增的一個概念是基於標籤的訪問控制(LBAC),它允許以更細的粒度控制誰有權訪問單獨的行或列。
一、 授權
DB2資料庫許可權分為例項級許可權(SYSADM、SYSCTRL、SYSMAINT)和資料庫級許可權(DBAMD、LOAD)。DB2中使用者所擁有的許可權主要考慮三個方面:例項級、資料庫級、資料庫操作級別,檢視命令是db2 get authorizations。
DB2授權分為例項級許可權授權和資料庫級授權。例項級許可權必須由擁有SYSADM許可權的使用者通過update cfg來授予使用者組;資料庫級許可權由DBAMD許可權使用者通過grant命令顯示地授予使用者或使用者組。
1、例項級許可權的獲得(SYSADM、SYSCTRL、SYSMAINT)
它們的範圍包含例項級命令以及針對這個例項中的所有資料庫的命令。這些許可權只能分配給組。可以通過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、資料庫級許可權的獲得(DBADM、LOAD)
(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、顯示地授予、撤銷特權
可以使用GRANT和REVOKE命令顯示地對使用者或組授予或撤銷特權。
以下示例給使用者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
(因為test1是db2grp1組的成員)
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 上的 CREATEIN、ALTERIN 和 DROPIN,以及將這些特權授予其他使用者的能力 |
發出命令的使用者 |
CREATE VIEW myview |
myview 上的 CONTROL(只有在使用者擁有 myview 定義中引用的所有表和檢視上的 CONTROL 特權的情況下) |
發出命令的使用者 |
CREATE DATABASE mydb |
mydb 的系統編目表上的 SELECT,mydb 上的 IMPLICIT_SCHEMA |
PUBLIC |
注:1、當使用者建立資料庫時,隱式地授予這個使用者這個資料庫上的 DBADM 許可權。獲得 DBADM 許可權就會隱式地授予 CONNECT、CREATETAB、BINDADD、IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特權。即使撤消了 DBADM 許可權,這個使用者仍然會保留這些特權。
2、PUBLIC 是一個特殊的 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 授權機制與授權模型研究模型
- DB2許可權與授權DB2
- 理解OAuth2.0協議和授權機制OAuth協議
- db2不同license授權DB2
- 深入淺出OAuth 2.0授權機制OAuth
- oracle顯式授權和隱式授權Oracle
- 安全滲透測試中日誌分析技術與授權機制
- ASP.NET Core策略授權和 ABP 授權ASP.NET
- 深入理解Spring Security授權機制原理Spring
- 怎麼取消jboss中EJB的授權機制?
- Istio安全-授權(實操三)
- 電商系統架構總結3(webapi授權機制)架構WebAPI
- Linux sudo 漏洞可能導致未經授權的特權訪問Linux
- 安全測試之認證授權
- DATABASE VAULT授權的安全隱患Database
- 華為授權培訓機構
- 1.7.6. 授權和撤銷管理許可權
- 認證授權方案之授權初識
- #聊聊微信小程式使用者授權登入,無感知登入,強制授權~~~微信小程式
- mysql 授權MySql
- oracle授權Oracle
- 表列授權
- NEO共識協議:授權拜占庭容錯機制如何工作協議
- 淺談MySQL中授權(grant)和撤銷授權(revoke)用法詳解MySql
- 抖音分享和授權(iOS)iOS
- Django(59)驗證和授權Django
- 授權(Authorization)和認證(Authentication)
- 授權物件許可權後的授權者顯示問題物件
- 認證授權方案之授權揭祕 (上篇)
- 用於安全授權的DevSecOpsdev
- SpringSecurity3網站安全授權SpringGse網站
- DB2 建立授權指令碼 grantread.shDB2指令碼
- 記一次特別的未授權訪問
- 【認證與授權】Spring Security的授權流程Spring
- android permission 許可權與安全機制解析(下)Android
- android permission許可權與安全機制解析(上)Android
- 前端微信授權前端
- Laravel授權策略Laravel