DB2 9 根底(730 检验)认证指南,第 2 局部: 平安性(5)
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 平安计谋来完成这些轨则。
- 定义平安计谋和标签,并将平安标签付与用户
- 在 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
虽然他实验更新的纪录是在自己的部分中,但是访问平安计谋只答允他对表举办读访问。我们的业务需求已经取得了餍足。
版权声明:
原创作品,答允转载,转载时请务必以超链接要领标明文章 原始来由 、作者信息和本声明。不然将追究司法责任。