`

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 。

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.

db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','A00')) where WORKDEPT='A00'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','B01')) where WORKDEPT='B01'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','C01')) where WORKDEPT='C01'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','D11')) where WORKDEPT='D11'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','D21')) where WORKDEPT='D21'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','E01')) where WORKDEPT='E01'
db2=>update emp set DEPT_TAG=(SECLABEL_BY_NAME('J_DEPT_POLICY','E11')) where WORKDEPT='E11'
db2=>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

尽管他尝试更新的记录是在自己的部门中,但是访问安全策略只允许他对表进行读访问。我们的业务需求已经得到了满足。


参考至:http://www.ibm.com/developerworks/cn/education/data/db2-cert7302/section5.html

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

0
0
分享到:
评论

相关推荐

    数据库基础测验20241113.doc

    数据库基础测验20241113.doc

    微信小程序下拉选择组件

    微信小程序下拉选择组件

    DICOM文件+DX放射平片-数字X射线图像DICOM测试文件

    DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。

    Jupyter Notebook《基于双流 Faster R-CNN 网络的 图像篡改检测》+项目源码+文档说明+代码注释

    <项目介绍> - 基于双流 Faster R-CNN 网络的 图像篡改检测 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    使用epf捕获没有CA证书的SSLTLS明文(LinuxAndroid内核支持amd64arm64).zip

    c语言

    (源码)基于Arduino的天文数据库管理系统.zip

    # 基于Arduino的天文数据库管理系统 ## 项目简介 本项目是一个基于Arduino的天文数据库管理系统,旨在为Arduino设备提供一个完整的天文数据库,包括星星、星系、星团等天体数据。项目支持多种语言的星座名称,并提供了详细的天体信息,如赤道坐标、视星等。 ## 项目的主要特性和功能 星座目录包含88个星座,提供拉丁语、英语和法语的缩写和全名。 恒星目录包含494颗亮度达到4等的恒星。 梅西耶目录包含110个梅西耶天体。 NGC目录包含3993个NGC天体,亮度达到14等。 IC目录包含401个IC天体,亮度达到14等。 天体信息每个天体(不包括星座)提供名称、命名、相关星座、赤道坐标(J2000)和视星等信息。 恒星额外信息对于恒星,还提供每年在赤经和赤纬上的漂移以及视差。 ## 安装使用步骤 1. 安装库使用Arduino IDE的库管理器安装本项目的库。 2. 解压数据库将db.zip解压到SD卡中。

    (源码)基于JSP和SQL Server的维修管理系统.zip

    # 基于JSP和SQL Server的维修管理系统 ## 项目简介 本项目是一个基于JSP和SQL Server的维修管理系统,旨在提供一个高效、便捷的维修管理解决方案。系统涵盖了从维修订单的创建、管理到配件的录入、更新等多个功能模块,适用于各类维修服务行业。 ## 项目的主要特性和功能 1. 用户管理 管理员和客户的注册与登录。 管理员信息的管理与更新。 客户信息的创建、查询与更新。 2. 维修订单管理 维修订单的创建、查询与更新。 维修回执单的创建与管理。 3. 配件管理 配件信息的录入与更新。 配件库存的管理与查询。 4. 评价与反馈 客户对维修服务的评价记录。 系统反馈信息的收集与管理。 5. 数据加密与安全 使用MD5加密算法对用户密码进行加密存储。 通过过滤器实现登录验证,确保系统安全。 ## 安装使用步骤

    devecostudio-windows-3.1.0.501.zip

    HUAWEI DevEco Studio,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS和OpenHarmony系统上的应用和服务(以下简称应用/服务)提供一站式的开发平台。 作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: - 高效智能代码编辑:支持ArkTS、JS、C/C++等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、代码查找等功能,提升代码编写效率。更多详细信息,请参考[编辑器使用技巧] - 低代码可视化开发:丰富的UI界面编辑能力,支持自由拖拽组件和可视化数据绑定,可快速预览效果

    《计算机视觉技术》实验报告-8.1提取车辆轮廓

    《计算机视觉技术》实验报告-8.1提取车辆轮廓

    springboot小徐影城管理系统(代码+数据库+LW)

    随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。

    C++与Matlab实现SIFT特征提取算法+项目源码+文档说明+代码注释

    <项目介绍> - SIFT特征提取算法C++与Matlab实现 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    (1991-2024年)国家自然、社科基金部分名单(含部分标书)(最新!!!)

    数据介绍 数据名称:国家自然、社科基金部分名单 数据年份:1991-2024年 样本数量:10万+ 数据格式:PDF、excel

    卓晴-信号与系统课件.pdf

    卓晴

    as-bundled-clients

    as-bundled-clients

    学习时最后的资料包括面试等信息

    学习时最后的资料包括面试等信息

    (源码)基于Spring Boot和Ant Design的雨选课系统.zip

    # 基于Spring Boot和Ant Design的雨选课系统 ## 项目简介 雨选课系统是一个基于Spring Boot和Ant Design框架构建的前后端分离的选课系统。该系统实现了学生选课、成绩查询、教师成绩修改、课程编辑、课程新增等功能。登录信息使用Redis存储,并支持课程图片的上传功能。 ## 项目的主要特性和功能 1. 用户登录与权限管理 学生、教师和管理员分别有不同的登录权限。 登录信息使用Redis进行存储。 2. 课程管理 学生可以查看可选课程列表,并进行选课和退选操作。 教师可以查看自己教授的课程,并修改学生成绩。 管理员可以编辑和新增课程。 3. 成绩管理 学生可以查询自己的成绩。 教师可以修改学生的成绩。 4. 图片上传 支持课程图片的上传和展示。 5. 日志记录 系统记录请求和响应的日志信息,便于问题追踪和性能分析。

    数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)

    数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅

    江苏镇江两座小桥的技术状况评估与维修建议

    内容概要:本文针对镇江市丹徒区辛丰镇的两座小型桥梁(大叶二组滚水坝桥与东联组桥)进行了详细的技术状况评定和现状调查。主要内容包括:桥梁的基本参数描述、桥梁各部分的具体检查结果以及存在的具体病害及其原因分析,同时依据《公路桥梁技术状况评定标准》对每座桥梁分别给出了综合评分和技术状况等级,并提出了具体的维护与修复建议。大叶二组滚水坝桥技术状况良好(2类),但需要解决桥面铺装裂缝和桥墩的混凝土剥落问题;而东联组桥则需重点关注桥面施工不完整及护栏损坏等问题。 适用人群:桥梁管理人员、维护工作人员及城市基础设施规划相关人员。 使用场景及目标:适用于中小跨度桥梁的常规检查与维修决策制定过程中,旨在帮助专业人士快速掌握桥梁的实际状态,确保桥梁安全可靠运行。 其他说明:文中附有多张实拍图片用于直观展示桥梁现状及存在问题。

    基于套接字API开发的高性能高稳定性跨平台MQTT客户端,可以在嵌入式设备FreeRTOS LiteOS RTThre.zip

    c语言

    【Unity 天气系统插件】Enviro 3 - Sky and Weather 高度可定制的云、雾和光照系统

    文件名:Enviro 3 - Sky and Weather v3.1.6b.unitypackage Enviro 3 - Sky and Weather 是一款功能强大的 Unity 插件,专门用于模拟逼真的天空、天气和环境效果。它适用于需要动态天气和日夜循环的游戏或应用,如开放世界 RPG、模拟类游戏等。Enviro 3 提供了大量的设置选项和自定义功能,帮助开发者在 Unity 中创建沉浸式的自然环境效果。 以下是 Enviro 3 - Sky and Weather 的一些关键特点和功能介绍: 1. 动态天气系统 天气变化:支持多种天气效果,如晴天、阴天、雨天、雪天、雾天、暴风雨等,所有天气效果可以动态切换,使游戏环境更加生动。 天气事件:允许开发者设置特定的天气事件,如风暴、雷电等,添加到游戏中的特殊场景或事件。 湿度与温度控制:可以根据天气变化动态控制湿度和温度,影响环境效果和玩家体验。 2. 日夜循环系统 动态时间系统:Enviro 3 支持实时的日夜循环,包括昼夜的过渡,太阳和月亮的运动轨迹。 光照调整:随着时间变化,Enviro 3 会自动调整环境光、

Global site tag (gtag.js) - Google Analytics