db2 用户角色解读.docx
- 文档编号:16877855
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:30
- 大小:39.48KB
db2 用户角色解读.docx
《db2 用户角色解读.docx》由会员分享,可在线阅读,更多相关《db2 用户角色解读.docx(30页珍藏版)》请在冰点文库上搜索。
db2用户角色解读
开始之前
关于本教程
本教程将带您经历一系列的练习,以熟悉DB29.5中的一个新特性:
角色。
本教程面向的读者是DB2技术专家、数据库管理员和程序员。
您应该对DB2onLinux,UNIX,andWindows(以下称为DB2LUW)有良好的理解。
您还应该熟悉DB2命令窗口和运行DB2脚本。
也可以使用新的IBMDataStudio创建和管理角色。
但是,它们在DB2ControlCenter中不受支持。
目标
本教程将帮助您熟悉DB29.5中角色的概念和特性。
在这些练习中,您将学习:
角色的基本概念
如何创建和管理角色
如何使用不同的SQL查询和工具分析角色的使用
系统需求
要运行本教程中的例子,需要:
DB29.5Express-C
MicrosoftWindows2003、XP或Linux(ValidatedEnvironment)
Java®RuntimeEnvironment1.4.2或更高版本
此外,还应确保硬件满足DB29.5的需求。
DB29.5ExpressC可通过以上链接获得。
DB29.5是一个完整的安装程序,而不是一个升级补丁包。
默认情况下,除非明确要求不自动启动,否则DB2将在安装后自动启动。
请使用本教程附带的zip文件中提供的示例脚本和数据来演示本教程中的概念。
将zip文件解压到一个名为DB2Roles的子目录中(C:
\DB2Roles或home/userid/DB2Roles)。
本教程通篇将该目录简称为DB2Roles。
本教程假设您将DB2安装到默认目录中。
本教程要求创建很多用户id,所有练习都将使用这些创建的id。
角色的定义
角色是一个数据库对象,可以对其授予或撤销一个或多个DB2特权、权限或其他角色。
角色没有所有者,它只能由安全管理员(SECADM)创建或删除。
通过将一个角色与一个用户相关联,该用户除了已有的特权以外,还将继承该角色所具有的所有特权。
数据库角色的主要优点是简化了对数据库中的特权的管理。
例如:
安全管理员可以在接近于组织结构的抽象层次上控制对数据库的访问。
例如,如果公司有12个分公司,每个分公司中的每个人都有一组相同的特权,那么SECADM可以设置12种角色,然后根据用户的位置为用户授予成员资格。
为用户授予角色中的成员资格时,以用户的工作职责为依据。
当用户的工作职责变化时(这种情况在大型组织中经常发生),很容易授予和撤销用户的角色成员资格。
例如,如果用户从NewYork分公司调到Boston分公司,那么SECADM只需撤销他的NewYork分公司的角色,并为他授予Boston分公司的角色。
特权的分配也很简单。
管理员无需将同一组特权授给具有同一职能的每个用户,而只需将这组特权授给一个表示该职能的角色,然后将这个角色授给具有该职能的用户。
例如,一个任务常常会要求一个用户有很多不同的特权。
但是,如果将特权授给一个角色,那么就很容易授予或撤销特权,而不必为每个任务维护大量的脚本。
如果SECADM需要修改一个角色的特权,他可以只在一个地方进行修改,而不必为所有用户重复这个过程。
通过更新角色,可以避免逐个地为每个用户更新特权。
例如,如果SECADM需要修改NewYork分公司的特权,那么她可以修改角色的定义,而不必为所有用户重复该过程。
除了SECADM之外,数据库中所有可以被授予的DB2特权和权限都可以被授给一个角色。
通过只将特权和权限授给角色,并在角色中建立用户成员,可以大大简化数据库中特权的管理。
构建环境
本节介绍一些示例代码(这些代码可从本教程下载),以描述角色的行为。
这些示例代码基于可添加到SAMPLE数据库中的数据库对象。
填充这些表所需的数据位于一个有分隔符的ASCII文件中,该文件的文件名为data.del,它位于DB2Roles子目录中。
所有脚本都在子目录Section2中。
要在DB2命令窗口中运行脚本,使用:
db2 –tvf scriptname.sql
批处理脚本(后缀为.bat)可以通过输入名称来运行。
说明
首先,使用administrator/root用户id登录到系统,然后创建以下用户id:
用于SECADM的DB2SEC
将用于管理小组的MARK、ALLY和SAUL
ADAM、DEBS、PETE、YANG、MARY和ANNE
ROSE、STAN、ALAN、LORI、EVAN和KLEM
这些用户id不需要任何特殊的权限,因为它们将只用于DB2数据库。
所有需要的特权和权限将使用SQL发出。
另外还需要一个名为Pension_gp的组。
将ROSE放进这个组。
除此之外不需要设置其他的组权限。
如果使用Windows,那么应确保用户不在Administrators组中。
下面的图展示了公司和练习中将用到的角色的层次结构:
图1.角色结构
注意,有些名称出现在两个框中,这是因为有些人身兼两个部门的工作,因此需要处于不止一个角色中。
KLEM是一个新员工,因此没有被分配任何角色。
在后面的练习中,DB2数据库管理员为DB2inst1,数据库为SAMPLE数据库。
所有脚本都使用用户idDB2inst1和密码“password”。
如果您使用不同的数据库或数据库管理id(DBA),那么必须编辑这些脚本,使之与您自己的系统相符。
注意确认“Sample”或其他可使用的数据库已经存在。
如果不存在,请使用DB2SAMPL命令创建SAMPLE数据库。
现在,在这组练习中,将新用户和表添加到该数据库中:
将用户添加到数据库中。
以DBA身份连接到数据库,并授予以下特权:
清单1.将特权授给数据库用户
GRANT CONNECT ON DATABASE TO USER MARK;
GRANT CONNECT ON DATABASE TO USER ALLY;
GRANT CONNECT ON DATABASE TO USER ADAM;
GRANT CONNECT ON DATABASE TO USER DEBS;
GRANT CONNECT ON DATABASE TO USER PETE;
GRANT CONNECT ON DATABASE TO USER YANG;
GRANT CONNECT ON DATABASE TO USER SAUL;
GRANT CONNECT ON DATABASE TO USER MARY;
GRANT CONNECT ON DATABASE TO USER ANNE;
GRANT CONNECT ON DATABASE TO USER ROSE;
GRANT CONNECT ON DATABASE TO USER STAN;
GRANT CONNECT ON DATABASE TO USER ALAN;
GRANT CONNECT ON DATABASE TO USER LORI;
GRANT CONNECT ON DATABASE TO USER EVAN;
GRANT SECADM ON DATABASE TO USER DB2SEC;
或者使用AddUsers.sql脚本添加这些新用户。
使用luwebase.sql脚本为SAMPLE数据库创建新表。
这里假设将表放在USERSPACE1中。
下面添加基本表:
清单2.添加基本表
LE_DEPARTMENT
LE_EMPLOYEE
LE_EMP_PHOTO
LE_EMP_RESUME
LE_ORG
LE_SALES
LE_PENSIONS
使用luweload.sql脚本将数据装载到新表中。
如果使用Linux,或者改动了装载文件的位置,那么必须编辑该脚本。
接着,运行luweplus.sql脚本,以创建其他的视图、索引等数据库对象。
在运行该SQL脚本时,注意检查错误和警告。
可能还需要使用ControlCenter或其他工具查看这些对象,以确认这些表和数据已经存在。
设置和配置角色
在本节中,您将学习如何:
创建新角色
将特权分配给角色
将成员资格授给角色
管理角色中的成员资格的权限属于SECADM。
SECADM使用标准的DML命令管理角色。
用于角色的所有DML命令都可以嵌入到应用程序中,或者通过使用动态的SQL语句发出。
它是一条可执行语句,只有当DYNAMICRULES运行行为对包有效时,才可以动态地预置该语句。
CREATEROLE语句在当前服务器上定义一个角色。
角色必须有一个惟一的标识名称:
CREATE ROLE *role-name*
DROPROLE语句删除当前服务器上的一个角色。
该角色必须已经存在于当前服务器上,而且,如果角色当前正被用于作为一个连接属性(SESSION_USER)或可信上下文,那么不能被删除。
只有SECADM可以删除角色。
DROP ROLE *role-name*
GRANT和REVOKEROLE语句用于向用户、组或其他角色授予或撤销角色。
它们还可以与WITHADMINOPTION一起用于授予权限。
WITHADMINOPTION允许指定的授权ID向其他授权ID授予或撤销角色。
例如:
清单3.向其他授权ID授予或撤销角色
GRANT ROLE *role-name* TO *authorization-name*
GRANT ROLE *role-name* TO *authorization-name*
WITH ADMIN OPTION
REVOKE ROLE *role-name* FROM *authorization-name*
REVOKE ADMIN OPTION FOR ROLE *role-name*
FROM *authorization-name*
COMMENTON语句可用于在系统编目中提供对ROLE的描述。
例如:
COMMENT ON ROLE *role-name* IS *'comment'*
本节所需的脚本在子目录Section3中。
所有包含关于用户或组的详细信息的系统编目视图都已经被更新,以包括新的角色。
在DB29.5中,有两个新的视图显示角色的详细信息:
SYSCAT.ROLES:
该视图对于每个定义的角色有一行记录,其中包含角色的标识符,另外还有创建日期和相关的审计策略信息。
SYSCAT.ROLEAUTH:
对于每个已被授予角色的用户、组或角色,无论角色上是否授予了权限,该视图都有一行记录。
为了简化角色的管理,DB29.5提供了一个名为AUTH_LIST_ROLES_FOR_AUTHID的系统函数,该函数使管理员可以确认哪些角色被授给了一个用户、组或角色。
(该函数将在下一节“维护和管理角色”中描述和演示。
)
角色本身也是一个数据库对象,它可以用于定义其他数据库对象(例如表、视图、触发器和可信上下文)上的权限。
可以将角色指定给用户,使之获得访问数据库中的数据的权限。
在本教程中,学习创建一个角色层次结构,以标识图1展示的小公司的结构。
您将创建以下基本角色:
Sales:
用于销售部门
Mktg:
用于市场营销部门
Admin:
用于管理部门
Payroll:
用于薪资部门
Pension:
用于Yang,他是津贴管理员
SalesMgr:
包括角色Sales和Mktg
AdminMgr:
包括角色Admin和Payroll
CEO:
包括角色AdminMgr和SalesMgr
说明
使用您在上一节创建的安全管理员用户id和密码登录到系统。
将当前目录更改为Section3。
使用以下代码创建基本角色:
清单4.创建基本角色
CREATE ROLE Sales;
CREATE ROLE Mktg;
CREATE ROLE Admin;
CREATE ROLE Payroll;
CREATE ROLE Pension;
CREATE ROLE SalesMgr;
CREATE ROLE AdminMgr;
CREATE ROLE CEO;
或者使用CreateRoles.sql脚本创建角色。
下面的特权表显示了被授给这些角色的特权:
表1.特权
角色
特权
表
SELECT
LE_ORG、LE_SALES
Sales
UPDATE、INSERT
LE_SALES
Mktg
SELECT
LE_ORG、LE_SALES
SELECT
LE_DEPARTMENT、LE_EMPLOYEE、LE_ORG、LE_SALES
Admin
UPDATE
LE_EMPLOYEE、LE_DEPARTMENT
SELECT
LE_DEPARTMENT、LE_EMPLOYEE、LE_EMP_PHOTO、LE_EMP_RESUME、LE_PENSIONS
Payroll
UPDATE、INSERT、DELETE
LE_EMPLOYEE
Pension
SELECT、UPDATE、INSERT、DELETE、ALTER
LE_PENSIONS
使用以下命令将特权授给角色:
清单5.将特权授给角色
GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Sales;
GRANT SELECT, UPDATE, INSERT ON TABLE db2inst1.le_sales TO ROLE Sales;
GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Mktg;
GRANT SELECT ON TABLE db2inst1.le_sales TO ROLE Mktg;
GRANT SELECT ON TABLE db2inst1.le_department TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_employee TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_sales TO ROLE Admin;
GRANT UPDATE ON TABLE db2inst1.le_department TO ROLE Admin;
GRANT UPDATE ON TABLE db2inst1.le_employee TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_department TO ROLE Payroll;
GRANT SELECT ON TABLE db2inst1.le_emp_photo TO ROLE Payroll;
GRANT SELECT ON TABLE db2inst1.le_emp_resume TO ROLE Payroll;
GRANT SELECT ON TABLE db2inst1.le_pensions TO ROLE Payroll;
GRANT UPDATE, INSERT, DELETE ON TABLE db2inst1.le_employee TO ROLE Payroll;
GRANT SELECT, UPDATE, INSERT, DELETE, ALTER ON TABLE db2inst1.le_pensions
TO ROLE Payroll;
或者使用AssignRoles.sql脚本脚本创建角色。
现在需要将个人放到他们各自的角色中。
使用以下命令授予角色的成员资格:
清单6.授予角色的成员资格
GRANT ROLE SalesMgr, AdminMgr to ROLE CEO;
GRANT ROLE CEO TO USER Mark;
GRANT ROLE Admin, Payroll to ROLE AdminMgr;
GRANT ROLE AdminMgr TO USER Ally;
GRANT ROLE Sales, Mktg to ROLE SalesMgr;
GRANT ROLE SalesMgr TO USER Saul;
GRANT ROLE Admin TO USER Adam, Debs, Mary;
GRANT ROLE Mktg TO USER Mary, Anne, Rose;
GRANT ROLE Payroll TO USER Adam, Pete, Yang;
GRANT ROLE Pension TO USER Yang;
GRANT ROLE Sales TO USER Stan, Alan, Lori, Evan;
或者使用AssignUsers.sql脚本授予角色的成员资格。
现在有了基本结构,接下来可以运行一些查询,以验证属于用户的特权和权限。
以Anne的身份连接到SAMPLE数据库,并运行两个查询:
CONNECT TO SAMPLE USER Anne USING password
SELECT * FROM db2inst1.le_org
SELECT * FROM db2inst1.le_employee
或者使用AnneQueries.sql脚本运行查询。
将会执行ORG表的SELECT,但是Anne不能访问EMPLOYEE表,因为Anne只属于角色MKTG。
输出应该如下所示:
清单7.查询输出
CONNECT TO SAMPLE USER Anne USING
Database Connection Information
Database server = DB2/NT 9.5.0
SQL authorization ID = ANNE
Local database alias = SAMPLE
SELECT * FROM db2inst1.le_org
DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION
-------- -------------- ------- ---------- -------------
C21 Head Office C01 Corporate London
C21 Eastern C01 Finance Vienna
C21 Western C01 Finance Paris
.
.
.
9 record(s) selected.
SELECT * FROM db2inst1.le_employee
SQL0551N "ANNE" does not have the privilege to perform operation
"SELECT" on object "DB2INST1.LE_EMPLOYEE". SQLSTATE=42501
将用户改为Mary,重复上述查询:
CONNECT TO SAMPLE USER Mary USING password
SELECT * FROM db2inst1.le_org
SELECT * FROM db2inst1.le_employee
对于Mary,这两个查询都可以执行,因为她同时属于MKTG和ADMIN角色。
因此,您可以看到le_employee表的内容(参见清单8)。
以Debs的身份连接到SAMPLE数据库,并运行两个查询:
CONNECT TO SAMPLE USER Debs USING password
SELECT * FROM db2inst1.le_employee
SELECT * FROM db2inst1.le_pensions
或者使用DebsQueries.sql脚本运行查询。
将会执行EMPLOYEE表的SELECT,但是Debs不能访问PENSIONS表,因为Debs只属于角色Admin(参见清单9)。
将用户改为Adam,重复上述查询:
CONNECT TO SAMPLE USER Adam USING password
SELECT * FROM db2inst1.le_employee
SELECT * FROM db2inst1.le_pensions
对于Adam,这两个查询都可以执行,因为他同时属于PAYROLL和ADMIN角色。
因此,可以看到le_pensions表的内容(参见清单10)。
可选地,将用户改为Mark(CEO角色)。
他可以运行所有查询。
维护和管理角色
仅从本教程还难以看出角色为数据库管理带来的好处。
但是,如果考虑一个有数千名雇员、数百种角色的大型公司,那么这种好处就很明显了。
例如,如果该公司平均每个分公司有20个销售代表,每个地区或州有10个分公司,销售网络中一共有50个地区,那么总共就有10,000名销售代表,而且很可能还有1,000名相关的雇员。
在之前版本的DB2中,必须将特权授给每个人,或者在数据访问的安全性方面有所妥协。
假设每个分公司、地区和支持角色都有不同的角色;您仍然有超过500种角色。
然而,当有人加入或离开公司,或者调动位置时,只需授予或撤销一个角色。
假设耗损率为5%,那么一年中仍然有超过500次变化。
但是,如果将这项管理任务委派到地区或分公司这两级,那么这两级上的管理任务就容易得多了。
在本节中,您将看到:
WITHADMINOPTION
撤销角色权限的效果
查询成员资格权限
说明
使用您在本教程“构建环境”小节中创建的安全管理员用户id和密码登录到系统。
将当前目录改为Section4。
首先,我们来探索撤销角色成员资格的一些效果:
使用Mary身份连接到SAMPLE数据库。
运行SALES与EMPLOYEE表之间的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- db2 用户角色解读 用户 角色 解读