实验任务:
A.熟悉DB2UDB中PUBLIC组的默认特权;
B.学会管理DB2权限(SYSADM,SYSCYRL,SYSMAINT和DBADM),熟悉各种权限的操作能力;
C.能够对单个用户和组授予特权;
D.清楚何时组特权可用和何时需要个人特权等。
一.默认的PUBLIC特权
1.建立新用户user1
(1)使用Windows控制面板中的用户管理程序按下列要求创建一个新用户:
用户名:user1
密码:user1
全名:USER1
描述:DB2User
(2)在命令中心中输入如下命令确保没有应用程序或用户连接到INST1实例:
forceapplicationall;
terminate;
(3)将stock表的更新权限授予user1用户:
connecttomusicdb;
grantupdateonstocktouser1;
2.从DB2的控制中心,确定当前数据库的所有用户的默认权限。
从DB2控制中心,选择MUSICDB数据库,右键选择”权限”,然后分别选择“组”和“用户”页,查看有哪些组和用户,分别具有什么样的权限?
(1)具有授权的任一个ID用户可以对MUSICDB进行的操作包括:创建数据库、添加新的PACKAGES,连接到数据,以及隐式地创建模式等。
(2)NOFENCE列包含一个“not”符号,这表示PUBLIC组不具有创建NOTFENCED用户自定义函数的特权,该工作需要授予某个用户,和创建用户自定义函数相关的另一个命令CREATEEXTERNALROUTINE也不缺省地授予PUBLIC的特权。
(3)在LOAD列上也具有“not”符号,表示PUBLIC组不能够进行LOAD操作,只有SYSADM,DBADM,或在数据库上具有LOAD及与LOAD操作相关的其他操作特权的用户,可以进行LOAD操作。
(4)要查看所有的授权信息,可以通过SYSCAT.DBAUTH视图来进行。
3.建立一个以不同用户连接到数据库MUSICDB的对话。
打开DB2命令窗口,输入“titleuser1”。以user1用户连接到数据MUSICDB
db2connecttomusicdbuseruser1usinguser1
输入下列sql语句:
db2“selectsubstr(tbspace,1,18)fromsyscat.tablespaces”
由于PUBLIC组中,SELECT是默认的特权,自然user1用户也能够执行查询操作。
4.验证建表权限
(1)输入下列SQL语句:
db2"createtabletest1(partnointeger,subpartinteger)inDMS04"
该语句不能够成功执行,因为user1用户在DMS04表空间上没有USE特权。
(2)user1用户要想实现上述操作,可以通过其他用户对其授权实现,假设corp_spy用户具有相应的权限,可以实现对user1用户的授权。在DB2的命令窗口中输入下列命令即可:
titlecorp_spy
db2connecttomusicdb
db2grantuseoftablespacedms04touseruser1
(3)user1用户可以重新输入下列命令来实现上述操作:
db2"createtabletest1(partnointeger,subpartinteger)inDMS04"
此时,该语句就会成功执行。
5.在命令中心,列出表空间DMS04中的所创建的所有表。
(1)user1可以通过下列方法可查看MDS04表空间的ID:
在控制中心,在MUSICDB数据库下选择Views,然后选择TABLESPACES视图,并用右键查看其内容,可以看到DMS04的ID为6。
(2)在命令中心的交互页面,输入下列命令:
minate
connecttomusicdb
selecttabschema,namefromsyscat.tableswheretbspaceid=6
6.以用户inst1身份,通过GUI将表user1.test1从数据库中删除。这里需要清楚的是,inst1之所以能够删除该表,是因为该用户具有系统管理员权限。
7.撤销PUBLIC的默认权限。
在控制中心,在MUSICDB数据库的用户和组左侧单击+号,选择DBGroup,然后在内容部分选择PUBLIC,右键选择change,然后去掉其连接数据库、创建表、创建包等选项。
8.再以user1用户创建表test1:
db2createtabletest1(partnointeger,subpartinteger)inDMS04
由于CREATETAB特权被撤销,所以用户user1不能够再创建该数据表。但是此时user1与数据库的连接仍然处于活动状态。
二.DB2的权限
1.Inst1既是Windows的管理员,又是DB2的系统管理员。用inst1的Windows管理权限创建四个新的用户:usersys,userctl,usermnt和userdba,密码与用户名相同。在DB2的命令窗口,输入下列命令:
netuserusersysusersys/add
netuseruserctluserctl/add
netuserusermntusermnt/add
netuseruserdbauserdba/add
然后输入下列命令:
netlocalgroupSTAFF/add
netlocalgroupSTAFFuserdba/add
下面以usersys来作数据库系统管理员。首先通过inst1实例的数据库管理器配置参数,查看一下当前的系统管理员组是否是AMD1。
2.在DB2命令窗口中输入下列命令,可以查看ADM1组中的用户。
netlocalgroupADM1
这些用户具有数据库管理员权限。要是其他用户也要具有该权限,需要将其加入到ADM1组中。
3.在DB2命令窗口中输入下列命令,将usersys添加到ADM1组中,并可通过netlocalgroupADM1命令查看加入usersys用户后ADM1组中用户的变化。
netlocalgroupADM1usersys/add
4.在DB2命令窗口中输入titleusersys。
5.从usersys对话,可以确认usersys已经具有了相应的权限。
db2connecttomusicdbuserusersysusingusersys
db2selectnamefrominst1.artists
db2grantdeleteoninst1.artiststopublic
db2revokedeleteoninst1.artistsfrompublic
db2getsnapshotforlocksonmusicdb|more
虽然在第一部分中的Revoke已经撤销了部分public特权,但这些语句全部能够成功执行,因为数据库系统管理员可以完成任何工作。
6.作为具有sysadm权限的用户,usersys可以更新数据库管理器配置文件。如:
db2updatedbmcfgusingsysctrl_groupctrl1sysmaint_groupmaint1
该更改生效,需要执行下列语句:
db2forceapplicationall
db2terminate
db2stop
db2start
从控制中心,可以查看到更改后配置参数。
7.在DB2命令窗口,创建一个名为CTRL1的组,并为之添加一个成员userctl,然后创建一个MAINT1组,并添加一个用户usermnt。
netlocalgroupCTRL1/add
netlocalgroupMAINT1/add
netlocalgroupCTRL1userctl/add
netlocalgroupMAINT1usermnt/add
8.通过title命令分别为userctl和usermnt两个标题分别为userct和usermn命令提示窗口。
9.在userctl的命令窗口中,输入下列语句以查看该用户具有的权限:
db2connecttomusicdbuseruserctlusinguserctl
db2getauthorizations
我们会发现该用户具有SYSCTRL权限,即系统控制权限。
10.在usermntl的命令窗口中,输入下列语句以查看该用户具有的权限:
db2connecttomusicdbuserusermntusingusermnt
db2getauthorizations
usermnt用户具有SYSMAINT权限,即系统维护权限。
11.在userctl的命令窗口中,输入下列语句(此时不要做其他任何授权操作):
db2createtabletest1(col1char(1))
db2droptableinst1.reorder
db2select*frominst1.music
这三个语句均不能够成功执行,都会遇到权限错误。因为SYSCTRL权限不能够访问数据库对象,而SYSMAINT权限是SYSCTRL的子集,对SYSCTRL不能完成的操作,SYSMAINT也不能实现。
12.在userctl的命令窗口中,执行下列SQL语句:
db2selectnamefrominst1.artists
该语句会成功执行,因为从表artists中查询数据的特权被授予了PUBLIC,该特权可以通过控制中心,在用户和组的查看。需要清楚,和SYSCTRL权限相关的特权不是对特定表的,而是面向实例的。
13.在userctl的命令窗口中,为MUSICDB数据库指定一个新的别名:
db2catalogdbmusicdbasctrlsdb
14.在userctl和usermnt的命令窗口中输入db2terminate命令。
15.将userdba添加为数据库管理员。在控制中心,右键点击MUSICDB数据库,选择Authorities,然后单击ADD命令,在用户页面,选择用户userdba,并为其添加DBADM权限。添加后可以通过控制中心,在DBAUTH视图中查看到该用户的权限。
16.将userctl的的命令窗口标题改为userdba。
Titleuserdba
17.在userdba的命令窗口中,输入下列命令,连接到MUSICDB数据,并执行如下操作:
db2connecttomusicdbuseruserdbausinguserdba
db2selectnamefrominst1.artists
db2createtabletest1(col1char(1))
db2createtableinst1.dlc(col1char(1))
db2droptableinst1.dlc
三.DB2用户和组特权
1.以userdba用户身份,将下列内容插入到inst1.artists表中。
db2insertintoinst1.albumsvalues('DB2ConnectisMyLife',99,310)
db2insertintoinst1.albumsvalues('RustleUp',99,311)
2.系统维护权限用户usermnt没有SQL特权,从userdba的命令窗口对其授予delete特权:
db2grantdeleteoninst1.albumstousermnt
3.从usermnt的命令窗口,连接到数据库MUSICDB,并执行表inst1.albums的删除行操作:
db2connecttomusicdbuserusermntusingusermnt
db2deletefrominst1.albumswhereitemno=310
4.如果上述删除操作被inst1发现,并且inst1通过与授权相似的方式,将userdba的DBADM权限收回。同时,userdba想将删除的内容重新插入:
db2insertintoinst1.albumsvalues('DB2ConnectisMyLife',99,310)
但是该操作是被禁止的,因为userdba不再具有数据库管理权限,不能再对其他用户模式下创建的数据进行操纵。
5.如果userdba是数据对象的创建者,当被撤销数据库管理权限时,仍可执行如上的操作。如对userdba创建的表test1,仍可进行下列操作:
db2select*fromtest1
db2droptabletest1
6.通过db2terminate和exit命令分别关闭用户userdba、usermnt、usersys等对话窗口。