DB2 9 根底(730 检验)认证指南,第 2 局部: 平安性(5)

developerWorks








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.tabauthsyscat.colauthsyscat.indexauthsyscat.schemaauthsyscat.routineauthsyscat.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 命令如今应该会成功完成,由于 test1db2grp1 组的成员。

如今,在第二个窗口中输出以下命令:

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 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        JEFFERSON       D21         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.
			


在这里可以看到,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
			


虽然他实验更新的纪录是在自己的部分中,但是访问平安计谋只答允他对表举办读访问。我们的业务需求已经取得了餍足。




版权声明: 原创作品,答允转载,转载时请务必以超链接要领标明文章 原始来由 、作者信息和本声明。不然将追究司法责任。

posted @ 2011-03-07 00:12  蓝色的天空III  阅读(397)  评论(0编辑  收藏  举报