程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 關於DB2 數據庫授權的研究

關於DB2 數據庫授權的研究

編輯:更多數據庫知識

  授權簡介

  DB2 授權控制數據庫安全計劃的以下方面:

  •   用戶被授予的權限級別
  •   允許用戶運行的命令
  •   允許用戶讀取和/或修改的數據
  •   允許用戶創建、修改和/或刪除的數據庫對象

  授權由特權組和高級數據庫管理程序(實例級)維護和實用操作組成。在 DB2 可用的 5 種權限中,SYSADM、SYSCTRL 和 SYSMAINT 是實例級權限。這意味著它們的范圍包含實例級命令以及針對這個實例中的所有數據庫的命令。這些權限只能分配給組;可以通過 DBM CFG 文件分配這些權限。

  針對特定數據庫的 DBADM 和 LOAD 權限可以分配給用戶或用戶組。可以使用 GRANT 命令顯式地分配這些權限。

  以下幾節描述如何分配每種權限以及允許擁有此權限的用戶執行哪些命令。注意,任何提到組成員關系的地方都假設在操作系統級上已經定義了這些用戶和組名。

  用戶可以通過發出以下命令來判斷自己擁有哪些權限和數據庫級特權:

  db2 get authorizations

  獲得 SYSADM 權限

  DB2 中的 SYSADM 權限就像是 UNIX 上的根權限或 Windows 上的 Administrator 權限。對一個 DB2 實例擁有 SYSADM 權限的用戶能夠對這個實例、這個實例中的任何數據庫以及這些數據庫中的任何對象發出任何 DB2 命令。他們還能夠訪問數據庫中的數據以及對其他用戶授予或撤消特權或權限。只允許 SYSADM 用戶更新 DBM CFG 文件。

  SYSADM 權限由 DBM CFG 文件中的 SYSADM_GROUP 參數控制。在 Windows 上,在創建實例時,這個參數設置為 Administrator(但是,如果發出命令 db2 get dbm cfg,它看起來是空的)。在 UNIX 上,它設置為創建這個實例的用戶的主組。

  因為只允許 SYSADM 用戶更新 DBM CFG 文件,所以只有他們能夠向其他組授予任何 SYS* 權限。以下示例演示如何向 db2grp1 組授予 SYSADM 權限: db2 update dbm cfg using SYSADM_GROUP db2grp1

  請記住,這一修改直到實例停止並重新啟動之後才會生效。還要記住,如果您當前不是作為 db2grp1 組的成員登錄的,那麼就無權重新啟動實例!您必須注銷並用正確的組中的 ID 重新登錄,或者將自己當前的 ID 添加進 db2grp1 組中。

  獲得 SYSCTRL 權限

  擁有 SYSCTRL 權限的用戶可以在實例中執行所有管理和維護命令。但是,與 SYSADM 用戶不同,他們不能訪問數據庫中的任何數據,除非他們被授予了訪問數據所需的特權。SYSCTRL 用戶可以對實例中的任何數據庫執行的命令示例如下:

  •   db2start/db2stop
  •   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

  獲得 SYSMAINT 權限

  擁有 SYSMAINT 權限的用戶可以發出的命令是擁有 SYSCTRL 權限的用戶可以發出的命令的子集。SYSMAINT 用戶只能執行與維護相關的任務,比如:

  •   db2start/db2stop
  •   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

  獲得 DBADM 權限

  DBADM 權限是一個數據庫級權限,而不是實例級權限。DBADM 用戶對一個數據庫有幾乎完全的控制能力。DBADM 用戶不能執行某些維護或管理任務,比如:

  •   drop database
  •   drop/create tablespace
  •   backup/restore database
  •   update db cfg for database db name

  但是,他們可以執行以下任務:

  •   db2 create/drop table
  •   db2 grant/revoke(任何特權)
  •   db2 runstats(任何表)

  DBADM 用戶還被自動地授予對數據庫對象及其內容的所有特權。因為 DBADM 權限是一個數據庫級權限,所以它可以被分配給用戶和用戶組。以下命令演示授予 DBADM 權限的不同方法。

  db2 create database test

  這個命令將數據庫 test 上的 DBADM 權限隱式地授予發出此命令的用戶。

  db2 connect to sample

  db2 grant dbadm on database to user tst1

  這個命令只能由 SYSADM 用戶發出;它向用戶 tst1 授予示例數據庫上的 DBADM 權限。注意,在授予 DBADM 權限之前,發出這個命令的用戶必須連接到示例數據庫。

  db2 grant dbadm on database to group db2grp1

  這個命令將 DBADM 權限授予 db2grp1 組中的每個用戶。同樣,只有 SYSADM 用戶能夠發出這個命令。

  獲得 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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved