程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 數據庫特權授予的方法和技巧

DB2 數據庫特權授予的方法和技巧

編輯:DB2教程

數據庫和對象特權

  db2數據庫特權大體上分成兩類:數據庫級特權(針對數據庫中的所有對象)和對象級特權(與特定的對象相關聯)。

  用戶可以擁有的數據庫級特權有:

  •   CREATETAB: 用戶可以在數據庫中創建表。
  •   BINDADD: 用戶可以使用 BIND 命令在數據庫中創建包。
  •   CONNECT: 用戶可以連接數據庫。
  •   CREATE_NOT_FENCED: 用戶可以創建 unfenced 用戶定義函數(UDF)。
  •   IMPLICIT_SCHEMA: 用戶可以在數據庫中隱式地創建模式,而不需要使用 CREATE SCHEMA 命令。
  •   LOAD: 用戶可以將數據裝載進表中。
  •   QUIESCE_CONNECT: 用戶可以訪問處於靜默(quIEsced)狀態的數據庫。
  •   CREATE_EXTERNAL_ROUTINE: 用戶可以創建供應用程序和數據庫的其他用戶使用的過程。

  數據庫對象 包括表、視圖、索引、模式和包。幸運的是,大多數對象級特權的意義無需解釋。下表總結了這些特權。

特權名稱 相關對象 描述 CONTROL 表、視圖、索引、包、別名、不同的類型、用戶定義函數、序列 提供對對象的全部權限。擁有這種特權的用戶還可以向其他用戶授予或撤消對對象的特權。 DELETE 表、視圖 允許用戶從對象中刪除記錄。

INSERT 表、視圖 允許用戶通過 INSERT 或 IMPORT 命令將記錄插入對象中。 SELECT 表、視圖 提供使用選擇語句來查看對象內容的能力。 UPDATE 表、視圖 允許用戶使用更新語句修改對象中的記錄。 ALTER 表 允許用戶使用更改語句更改對象定義。 INDEX 表 允許用戶使用創建索引語句在對象上創建索引。 REFERENCES 表 提供在對象上創建或刪除外鍵約束的能力。 BIND 包 允許用戶重新綁定現有的包。 EXECUTE 包、過程、函數、方法 允許用戶執行包和例程。 ALTERIN 模式 允許用戶修改模式中的對象定義。 CREATEIN 模式 允許用戶在模式中創建對象。 DROPIN 模式 允許用戶刪除模式中的對象。

  關於對象級特權的信息存儲在系統編目視圖中。視圖名稱是 syscat.tabauth、syscat.colauth、syscat.indexauth、syscat.schemaauth、syscat.routineauth 和 syscat.packageauth。

  顯式特權

  可以使用 GRANT 和 REVOKE 命令顯式地 對用戶或組授予或撤消特權。我們來看看如何在各種對象上使用這些命令。

  作為擁有 Administrator 權限的用戶登錄 Windows,打開兩個 DB2 命令窗口。在這兩個窗口中,確保將 db2instance 變量設置為 DB2!

  在第一個窗口中發出以下命»:

  db2 connect to sample

  現在,在第二個窗口中發出以下命令:

  db2 connect to sample user test1 using passWord

  請記住,第一個窗口中的命令是由一個擁有 SYSADM 權限的用戶發出的。第二個窗口中的命令是由 tst1 發出的,這個用戶對示例數據庫沒有特殊的權限或特權。注意,與示例數據庫中的表相關聯的模式名是發出 db2sampl 命令的用戶的名稱。在這些示例中,這個用戶是 GMILNE。

  現在,在第二個窗口中發出以下命令: db2 select * from gmilne.org

  應該會看到以下響應:

  SQL0551N "TEST1" does not have the privilege to perform Operation "SELECT"
  on object "GMILNE.ORG".

  為了糾正這種狀況,在第一個窗口中發出以下命令:

  db2 grant select on table gmilne.org to user test1

  現在,前面的命令就會成功!接下來,在第二個窗口中發出一個更復雜的命令:

  db2 insert into gmilne.org values (100, ''Tutorial'', 1, ''Eastern'', ''Toronto'')

  同樣會看到錯誤消息:

  SQL0551N "TEST1" does not have the privilege to perform Operation "INSERT"

  on object "GMILNE.ORG"

  所以,在第一個窗口中輸入以下命令:

  db2 grant insert on table gmilne.org to group db2grp1

  原來失敗的 INSERT 命令現在應該會成功完成,因為 test1 是 db2grp1 組的成員。

  現在,在第二個窗口中輸入以下命令:

  db2 drop table gmilne.emp_photo

  同樣會看到錯誤消息:

  SQL0551N "TEST1" does not have the privilege to perform Operation "DROP TABLE"
  on object "GMILNE.EMP_PHOTO".

  所以,我們要授予這個特權。在第一個窗口中輸入以下命令:

  db2 grant dropin on schema gmilne to all

  DROP TABLE 命令現在應該會成功完成。

  既然已經完成了示例,就可以撤消剛才授予的特權。在第一個窗口中發出以下命令:
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 的成員)仍然擁有對這個表的選擇特權,因為他或她是被直接授予這個特權的。

  隱式特權

  當發出某些命令時,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**
  *當用戶創建數據庫時,隱式地授予這個用戶這個數據庫上的 DBADM 權限。獲得 DBADM 權限就會隱式地授予 CONNECT、CREATETAB、BINDADD、IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特權。即使撤消了 DBADM 權限,這個用戶仍然會保留這些特權。

  **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

  間接特權

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

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

  db2 select * from org

  db2 insert into test values (1, 2, 3)

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

  基於標簽的訪問控制

  DB2 9 中新增的一個概念是基於標簽的訪問控制(LBAC)。LBAC 為 DBA 提供了在表的行或列級限制讀/寫特權的能力。

  在以前,進行這種限制的惟一方法是創建一個視圖,授權用戶使用這個視圖,並撤消對基表的訪問權。

  本教程只演示 LBAC 安全場景的一個示例。關於 LBAC 的更詳細解釋,請參考 developerWorks 上的 DB2 Label-Based Access Control, a practical guide, Part 1: Understand the basics of LBAC in DB2。

  LBAC 由安全管理員 通過創建安全策略來設置。每個表只能由一個安全策略來控制,但是系統中可以有任意數量的安全策略。設置 LBAC 需要幾個步驟。必須做的第一件事情是,決定對於您的數據需要什麼類型的訪問控制。

  我們做出以下假設。在您的組織中有三類人。

名稱 在組織中的角色 Jane 人力資源執行官 Joe D11 和 E21 部門的經理 Frank 團隊主管 - A00 部門

  現在,在組織的數據庫中有一個定義職員信息的表。這個表類似於 SAMPLE 數據庫中的 EMP 表。它包含關於職員和他們所屬的部門的數據。它現在的定義如下:

  db2 => describe select * from emp

  SQLDA Information

  sqldaid : SQLDA sqldabc: 896 sqln: 20 sqld: 14

  Column Information

  sqltype sqllen sqlname.data sqlname.length

  -------------------- ------ ------------------------------ --------------

  452 CHARACTER 6 EMPNO 5

  448 VARCHAR 12 FIRSTNME 8

  453 CHARACTER 1 MIDINIT 7

  448 VARCHAR 15 LASTNAME 8

  453 CHARACTER 3 WORKDEPT 8

  453 CHARACTER 4 PHONENO 7

  385 DATE 10 HIREDATE 8

  453 CHARACTER 8 JOB 3

  500 SMALLINT 2 EDLEVEL 7

  453 CHARACTER 1 SEX 3

  385 DATE 10 BIRTHDATE 9

  485 DECIMAL 9, 2 SALARY 6

  485 DECIMAL 9, 2 BONUS 5

  485 DECIMAL 9, 2 COMM 4

  組織會定期對規則進行審計。審計指出,職員不應該能夠訪問機密的數據。規則規定,執行官對所有職員記錄有完全的讀/寫訪問權,經理對自己部門的職員記錄有讀/寫訪問權,而團隊主管只能讀取部門中他們領導的職員的記錄。

  我們要設置 LBAC 安全策略來實現這些規則。

  1、定義安全策略和標簽,並將安全標簽授予用戶

  2、在 EMP 表中添加安全標簽列並將安全策略連接到它

  定義安全策略和標簽

  為了定義安全策略和標簽,需要 SECADM 權限。

  步驟 1a. 創建安全標簽組件

  首先,需要決定對於這個策略最合適的安全組件類型。在這個示例中,最合適的策略類型是 “TREE”。Tree 策略意味著可以定義一組標簽,讓子組件擁有它們的父組件的權限的子集。在這個示例中,創建一個名為 “J_DEPT” 的安全組件。

  CREATE SECURITY LABEL COMPONENT J_DEPT

 TREE (''HR_EXECUTIVE'' ROOT,

  ''MAN_D11_E21'' UNDER ''HR_EXECUTIVE''

  ''A00'' UNDER ''HR_EXECUTIVE'',

  ''B01'' UNDER ''HR_EXECUTIVE'',

  ''C01'' UNDER ''HR_EXECUTIVE'',

  ''D11'' UNDER ''MAN_D11_E21'',

  ''D21'' UNDER ''HR_EXECUTIVE'',

  ''E01'' UNDER ''HR_EXECUTIVE'',

  ''E11'' UNDER ''HR_EXECUTIVE'',

  ''E21'' UNDER ''MAN_D11_E21''

  )

  上面的布局說明根是 HR_EXECUTIVE,這個執行官領導的所有部門都是它的子組件。

  步驟 1b. 定義安全策略

  在上面的示例中,設置 LBAC 所需的下一個步驟是定義與上面的安全標簽組件相關聯的策略。一個安全策略可以使用多個組件。

  CREATE SECURITY POLICY J_DEPT_POLICY

  COMPONENTS J_DEPT

  WITH DB2LBACRULES

  RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL

  步驟 1c. 創建安全標簽

  設置安全策略的第三步是創建安全標簽。在這裡將指定每個用戶具有的不同角色。因為這個示例非常簡單,只有三個標簽,Executive、Manager 和 Team Lead。

  CREATE SECURITY LABEL J_DEPT_POLICY.EXECUTIVE

  COMPONENT J_DEPT ''HR_EXECUTIVE''

  CREATE SECURITY LABEL J_DEPT_POLICY.MANAGE_D11_E21

  COMPONENT J_DEPT ''MAN_D11_E21''

  CREATE SECURITY LABEL J_DEPT_POLICY.A00

  COMPONENT J_DEPT ''A00''

  CREATE SECURITY LABEL J_DEPT_POLICY.B01

  COMPONENT J_DEPT ''B01''

  CREATE SECURITY LABEL J_DEPT_POLICY.C01

  COMPONENT J_DEPT ''C01''

  CREATE SECURITY LABEL J_DEPT_POLICY.D11

  COMPONENT J_DEPT ''D11''

  CREATE SECURITY LABEL J_DEPT_POLICY.D21

  COMPONENT J_DEPT ''D21''

  CREATE SECURITY LABEL J_DEPT_POLICY.E01

  COMPONENT J_DEPT ''E01''

  CREATE SECURITY LABEL J_DEPT_POLICY.E11

  COMPONENT J_DEPT ''E11''

  CREATE SECURITY LABEL J_DEPT_POLICY.E21

  COMPONENT J_DEPT ''E21''

  在下一步中,將定義與這些標簽相關聯的實際權限。

  步驟 1d. 根據標簽授予權限

  下面的步驟描述對表數據授予權限的過程。權限可以是 ALL ACCESS、WRITE ACCESS 或 READ Access。如果這些權限都沒有授予一個用戶,那麼這個用戶就不能訪問任何表數據。請記住,執行官有完全的訪問權,經理對自己的部門有完全的訪問權,而團隊主管對他們領導的部門成員有讀訪問權。

  db2 grant security label J_DEPT_POLICY.A00 to user Frank for read Access

  db2 grant security label J_DEPT_POLICY.MANAGE_D11_E21 to user Joe for all Access

  db2 grant security label J_DEPT_POLICY.EXECUTIVE to user Jane for all Access

  在用戶上設置以上標簽,就會根據步驟 1a 中的樹定義來分配權限。因為用戶 Joe 被標為 MANAGE_D11_E21 並獲得所有權限,他將能夠讀寫那些安全標記為 J_DEPT_POLICY.D11 或 J_DEPT_POLICY.E21 的行(因為它們是他的子組件)。

  步驟 2. 修改 EMP 表

  在修改 EMP 表時,必須創建一個額外的列來存儲安全標簽。這個列的類型是 “DB2SECURITYLABEL”。您可以修改 SAMPLE 數據庫中現有的 EMP 表。為此,必須使用在這個策略中被授予根級特權的用戶,在這個示例中就是用戶 Jane。還必須先從 SAMPLE 數據庫刪除 MQT 表 ADEFUSR。

  CONNECT TO SAMPLE

  Database Connection Information

  Database adzoneid=892989" target="_blank">server = DB2/NT 9.1.0

  sql authorization ID = GMILNE

  Local database alias = SAMPLE

  DROP TABLE ADEFUSR

  CONNECT RESET

  CONNECT TO SAMPLE USER Jane USING passWord

  ALTER TABLE EMP

  ADD COLUMN DEPT_TAG DB2SECURITYLABEL

  ADD SECURITY POLICY J_DEPT_POLICY

  如果從 EMP 表進行選擇,就會看到剛定義的新列。因為是用在 EXECUTIVE 級上定義的用戶執行這一修改,添加的所有安全標記都是 EXECUTIVE。為了改變這一情況,需要更新這個表。

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30) from gmilne.emp

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  000010 CHRISTINE HAAS A00 152750.00 HR_EXECUTIVE

  000020 MICHAEL THOMPSON B01 94250.00 HR_EXECUTIVE

  000030 SALLY KWAN C01 98250.00 HR_EXECUTIVE

  000050 JOHN GEYER E01 80175.00 HR_EXECUTIVE

  000060 IRVING STERN D11 72250.00 HR_EXECUTIVE

  000070 EVA PULASKI D21 96170.00 HR_EXECUTIVE

  000090 EILEEN HENDERSON E11 89750.00 HR_EXECUTIVE

  000100 THEODORE SPENSER E21 86150.00 HR_EXECUTIVE

  000110 VINCENZO LUCCHESSI A00 66500.00 HR_EXECUTIVE

  000120 SEAN O''CONNELL A00 49250.00 HR_EXECUTIVE

  000130 DELORES QUINTANA C01 73800.00 HR_EXECUTIVE

  000140 HEATHER NICHOLLS C01 68420.00 HR_EXECUTIVE

  000150 BRUCE ADAMSON D11 55280.00 HR_EXECUTIVE

  000160 ELIZABETH PIANKA D11 62250.00 HR_EXECUTIVE

  000170 MASATOSHI YOSHIMURA D11 44680.00 HR_EXECUTIVE

  000180 MARILYN SCOUTTEN D11 51340.00 HR_EXECUTIVE

  000190 JAMES WALKER D11 50450.00 HR_EXECUTIVE

  000200 DAVID BROWN D11 57740.00 HR_EXECUTIVE

  000210 WILLIAM JONES D11 68270.00 HR_EXECUTIVE

  000220 JENNIFER LUTZ D11 49840.00 HR_EXECUTIVE

  000230 JAMES JEFFERSOND21 42180.00 HR_EXECUTIVE

  000240 SALVATORE MARINO D21 48760.00 HR_EXECUTIVE

  000250 DANIEL SMITH D21 49180.00 HR_EXECUTIVE

  000260 SYBIL JOHNSON D21 47250.00 HR_EXECUTIVE

  000270 MARIA PEREZ D21 37380.00 HR_EXECUTIVE

  000280 ETHEL SCHNEIDER E11 36250.00 HR_EXECUTIVE

  000290 JOHN PARKER E11 35340.00 HR_EXECUTIVE

  000300 PHILIP SMITH E11 37750.00 HR_EXECUTIVE

  000310 MAUDE SETRIGHT E11 35900.00 HR_EXECUTIVE

  000320 RAMLAL MEHTA E21 39950.00 HR_EXECUTIVE

  000330 WING LEE E21 45370.00 HR_EXECUTIVE

  000340 JASON GOUNOT E21 43840.00 HR_EXECUTIVE

  200010 DIAN HEMMINGER A00 46500.00 HR_EXECUTIVE

  200120 GREG ORLANDO A00 39250.00 HR_EXECUTIVE

  200140 KIM NATZ C01 68420.00 HR_EXECUTIVE

  200170 KIYOSHI YAMAMOTO D11 64680.00 HR_EXECUTIVE

  200220 REBA JOHN D11 69840.00 HR_EXECUTIVE

  200240 ROBERT MONTEVERDE D21 37760.00 HR_EXECUTIVE

  200280 EILEEN SCHWARTZ E11 46250.00 HR_EXECUTIVE

  200310 MICHELLE SPRINGER E11 35900.00 HR_EXECUTIVE

  200330 HELENA WONG E21 35370.00 HR_EXECUTIVE

  200340 ROY ALONZO E21 31840.00 HR_EXECUTIVE

  42 record(s) selected.

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''A00'')) where WORKDEPT=''A00''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''B01'')) where WORKDEPT=''B01''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''C01'')) where WORKDEPT=''C01''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''D11'')) where WORKDEPT=''D11''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''D21'')) where WORKDEPT=''D21''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''E01'')) where WORKDEPT=''E01''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''E11'')) where WORKDEPT=''E11''

  update emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''E21'')) where WORKDEPT=''E21''

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30) from emp

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  000010 CHRISTINE HAAS A00 152750.00 A00

  000020 MICHAEL THOMPSON B01 94250.00 B01

  000030 SALLY KWAN C01 98250.00 C01

  000050 JOHN GEYER E01 80175.00 E01

  000060 IRVING STERN D11 72250.00 D11

  000070 EVA PULASKI D21 96170.00 D21

  000090 EILEEN HENDERSON E11 89750.00 E11

  000100 THEODORE SPENSER E21 86150.00 E21

  000110 VINCENZO LUCCHESSI A00 66500.00 A00

  000120 SEAN O''CONNELL A00 49250.00 A00

  000130 DELORES QUINTANA C01 73800.00 C01

  000140 HEATHER NICHOLLS C01 68420.00 C01

  000150 BRUCE ADAMSON D11 55280.00 D11

  000160 ELIZABETH PIANKA D11 62250.00 D11

  000170 MASATOSHI YOSHIMURA D11 44680.00 D11

  000180 MARILYN SCOUTTEN D11 51340.00 D11

  000190 JAMES WALKER D11 50450.00 D11

  000200 DAVID BROWN D11 57740.00 D11

  000210 WILLIAM JONES D11 68270.00 D11

  000220 JENNIFER LUTZ D11 49840.00 D11

  000230 JAMES JEFFERSON D21 42180.00 D21

  000240 SALVATORE MARINO D21 48760.00 D21

  000250 DANIEL SMITH D21 49180.00 D21

  000260 SYBIL JOHNSON D21 47250.00 D21

  000270 MARIA PEREZ D21 37380.00 D21

  000280 ETHEL SCHNEIDER E11 36250.00 E11

  000290 JOHN PARKER E11 35340.00 E11

  000300 PHILIP SMITH E11 37750.00 E11

  000310 MAUDE SETRIGHT E11 35900.00 E11

  000320 RAMLAL MEHTA E21 39950.00 E21

  000330 WING LEE E21 45370.00 E21

  000340 JASON GOUNOT E21 43840.00 E21

  200010 DIAN HEMMINGER A00 46500.00 A00

  200120 GREG ORLANDO A00 39250.00 A00

  200140 KIM NATZ C01 68420.00 C01

  200170 KIYOSHI YAMAMOTO D11 64680.00 D11

  200220 REBA JOHN D11 69840.00 D11

  200240 ROBERT MONTEVERDE D21 37760.00 D21

  200280 EILEEN SCHWARTZ E11 46250.00 E11

  200310 MICHELLE SPRINGER E11 35900.00 E11

  200330 HELENA WONG E21 35370.00 E21

  200340 ROY ALONZO E21 31840.00 E21

  42 record(s) selected.

  在更新之後,我們來看看各個用戶能夠做什麼。使用 Executive 用戶 ID Jane 連接數據庫。首先執行與前面一樣的選擇語句:

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30) from gmilne.emp

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  000010 CHRISTINE HAAS A00 152750.00 A00

  000020 MICHAEL THOMPSON B01 94250.00 B01

  000030 SALLY KWAN C01 98250.00 C01

  000050 JOHN GEYER E01 80175.00 E01

  000060 IRVING STERN D11 72250.00 D11

  000070 EVA PULASKI D21 96170.00 D21

  000090 EILEEN HENDERSON E11 89750.00 E11

  000100 THEODORE SPENSER E21 86150.00 E21

  000110 VINCENZO LUCCHESSI A00 66500.00 A00

  000120 SEAN O''CONNELL A00 49250.00 A00

  000130 DELORES QUINTANA C01 73800.00 C01

  000140 HEATHER NICHOLLS C01 68420.00 C01

  000150 BRUCE ADAMSON D11 55280.00 D11

  000160 ELIZABETH PIANKA D11 62250.00 D11

  000170 MASATOSHI YOSHIMURA D11 44680.00 D11

  000180 MARILYN SCOUTTEN D11 51340.00 D11

  000190 JAMES WALKER D11 50450.00 D11

  000200 DAVID BROWN D11 57740.00 D11

  000210 WILLIAM JONES D11 68270.00 D11

  000220 JENNIFER LUTZ D11 49840.00 D11

  000230 JAMES JEFFERSON D21 42180.00 D21

  000240 SALVATORE MARINO D21 48760.00 D21

  000250 DANIEL SMITH D21 49180.00 D21

  000260 SYBIL JOHNSON D21 47250.00 D21

  000270 MARIA PEREZ D21 37380.00 D21

  000280 ETHEL SCHNEIDER E11 36250.00 E11

  000290 JOHN PARKER E11 35340.00 E11

  000300 PHILIP SMITH E11 37750.00 E11

  000310 MAUDE SETRIGHT E11 35900.00 E11

  000320 RAMLAL MEHTA E21 39950.00 E21

  000330 WING LEE E21 45370.00 E21

  000340 JASON GOUNOT E21 43840.00 E21

  200010 DIAN HEMMINGER A00 46500.00 A00

  200120 GREG ORLANDO A00 39250.00 A00

  200140 KIM NATZ C01 68420.00 C01

  200170 KIYOSHI YAMAMOTO D11 64680.00 D11

  200220 REBA JOHN D11 69840.00 D11

  200240 ROBERT MONTEVERDE D21 37760.00 D21

  200280 EILEEN SCHWARTZ E11 46250.00 E11

  200310 MICHELLE SPRINGER E11 35900.00 E11

  200330 HELENA WONG E21 35370.00 E21

  200340 ROY ALONZO E21 31840.00 E21

  42 record(s) selected.

  以及更新命令:

  db2 => update gmilne.emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''E01''))

  where WORKDEPT=''E01'' DB20000I The sql command completed successfully.

  可以看到,Jane 對表中的所有數據有完全的訪問權。現在,看看 Joe 可以看到的內容。首先進行選擇。

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30) from gmilne.emp

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  000060 IRVING STERN D11 72250.00 D11

  000100 THEODORE SPENSER E21 86150.00 E21

  000150 BRUCE ADAMSON D11 55280.00 D11

  000160 ELIZABETH PIANKA D11 62250.00 D11

  000170 MASATOSHI YOSHIMURA D11 44680.00 D11

  000180 MARILYN SCOUTTEN D11 51340.00 D11

  000190 JAMES WALKER D11 50450.00 D11

  000200 DAVID BROWN D11 57740.00 D11

  000210 WILLIAM JONES D11 68270.00 D11

  000220 JENNIFER LUTZ D11 49840.00 D11

  000320 RAMLAL MEHTA E21 39950.00 E21

  000330 WING LEE E21 45370.00 E21

  000340 JASON GOUNOT E21 43840.00 E21

  200170 KIYOSHI YAMAMOTO D11 64680.00 D11

  200220 REBA JOHN D11 69840.00 D11

  200330 HELENA WONG E21 35370.00 E21

  200340 ROY ALONZO E21 31840.00 E21

  17 record(s) selected.

  看到了嗎?他只能看到 D11 和 E21 部門的信息。如果他試圖選擇不允許他訪問的表數據,那麼會發生什麼:

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30)

  from gmilne.emp where empno=''000130''

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  0 record(s) selected.

  在前面 Jane 進行選擇的結果中我們看到,有一個職員的 empno 是 000130,但是不允許 Joe 看到它。

  現在是最後一個測試,對於用戶 Frank 的測試。

  首先,運行與前兩個用戶相同的選擇:

  db2 => select EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SALARY,

  varchar(SECLABEL_TO_CHAR(''J_DEPT_POLICY'',DEPT_TAG),30) from gmilne.emp

  EMPNO FIRSTNME LASTNAME WORKDEPT SALARY 6

  ------ ------------ --------------- -------- ----------- ------------------------------

  000010 CHRISTINE HAAS A00 152750.00 A00

  000110 VINCENZO LUCCHESSI A00 66500.00 A00

  000120 SEAN O''CONNELL A00 49250.00 A00

  200010 DIAN HEMMINGER A00 46500.00 A00

  200120 GREG ORLANDO A00 39250.00 A00

  5 record(s) selected."#CC0000">

  在這裡可以看到,Frank 只能看到部門中他領導的用戶的相關信息。我們來看看在他嘗試進行更新時會發生什麼:

  db2 => update gmilne.emp set DEPT_TAG=(SECLABEL_BY_NAME(''J_DEPT_POLICY'',''A00''))

  where WORKDEPT=''A00''DB21034E The command was processed as an sql statement

  because it was not a valid Command Line Processor command. During sql processing it

  returned:

  SQL20402N Authorization ID "FRANK" does not have the LBAC credentials to

  perform the "UPDATE" Operation on table "EMPLOYEE". SQLSTATE=42519

  盡管他嘗試更新的記錄是在自己的部門中,但是訪問安全策略只允許他對表進行讀訪問。我們的業務需求已經得到了滿足。

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