记录的一部份权限管理相关的东东。


实例级权限:


 SYSADM  最高管理权限,通常供DBA使用



 SYSCTRL  最高系统控制权限,有SYSMAINT 和SYSMON 的全部权限



 SYSMAINT  次级系统 控制权限



 SYSMON  最小的实例级管理权限





  Unix/Linux下的查看命令:



   db2 get dbm cfg|grep "SYSADM"



   db2 get dbm cfg|grep "SYSCTRL"



   db2 get dbm cfg|grep "SYSMAINT"



   db2 get dbm cfg|grep "SYSMON"



 



  Windows下的查看命令:



     db2 get dbm cfg  |find /I "SYSADM"



     db2 get dbm cfg  |find /I "SYSCTRL"



     db2 get dbm cfg  |find /I "SYSMAINT"



     db2 get dbm cfg  |find /I " SYSMON "







如何授权:



DB2实例级的管理权限是和操作系统用户绑定的.所以需先创建操作系统用户.

例子:

  假设有用户:   db2ctlusr 组: db2ctlgrp

 Linux:

  groupadd db2ctlgrp

  useradd -g db2ctlgrp -m -d  /home/db2ctlusr db2ctlusr 

AIX:

  groupadd -g 996 db2ctlgrp

  mkuser id=1005  pgrp=db2ctlgrp home/home/db2ctlusr db2ctlusr

[root@O11g64 bin]# id db2ctlusr

uid=1053( db2ctlusr) gid=1021(db2ctlgrp) groups=1021( db2ctlgrp)

对比db2inst1:


$ id db2inst1

uid=110( db2inst1) gid=104(db2grp1) groups=1(staff),101( dasadm1)



 db2inst1 db2iadm1 DB2实例用户,用户组

 db2fenc1 db2fadm1 受防护的用户,用户组. 运行自定义函数和过程

 dasusr1 dasadm1 创建DB2管理服务器用户,用户组.


 1. 参数中指定用户组:

          a.  [root@O11g64 bin]# ./db2 get dbm cfg|grep "SYSCTRL"



 SYSCTRL group name (SYSCTRL_GROUP) = 


b. [db2inst1@O11g64 ~]$  db2 update dbm cfg using SYSCTRL_GROUP db2ctlgrp

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed

successfully.

SQL1362W One or more of the parameters submitted for immediate modification

were not changed dynamically. Client changes will not be effective until the

next time the application is started or the TERMINATE command has been issued.

Server changes will not be effective until the next DB2START command.

c. db2stop

d. db2start

e. [db2inst1@O11g64 ~]$ db2 get dbm cfg|grep "SYSCTRL"

 SYSCTRL group name (SYSCTRL_GROUP) = DB2CTLGRP


           db2 connect to xcldb

db2 "grant dbadm on database to user db2ctlusr"

db2 connect reset 

        

3.收回权限

db2 connect to xcldb

db2 " revoke dbadm on database from user db2ctlusr "

db2 connect reset 

常见问题 :

SQL5001N错误:

     原因是需要SYSADM权限才能更改数据库管理器配置文件

     使用下面命令查出组

     [db2inst1@O11g64 ~]$ db2 get dbm cfg|grep "SYSADM"

 SYSADM group name (SYSADM_GROUP) = DB2IADM1

     进入此组下的用户,再去执行更新权限

   [root@O11g64 bin]# id db2inst1

uid=1051(db2inst1) gid=1010(db2iadm1) groups=1010(db2iadm1),1020(db2fadm1)

表授权命令: 

 -- public是全部用户  

 grant select on emp to group db2ctlgrp2

查询所有与权限相关的系统表:

db2 " select substr(tabname,1,20) from syscat.tables where tabschema='SYSCAT' and tabname like '%AUTH' ";

db2 " select  * from DBAUTH"

角色

create role myrole

grant select on table vacation to rle myrole

 grant role  myrole to user myusr1,user myus2

revoke role myrole from user myusr1;

-- 用户可以授予或撤消其它人角色,这个到和Oracle一个样

grant role  myrole to user myusr1 with admin option

  还有更细粒度的访问控制,

基于标签的访问控制(LBAC)
  工作原理是在 行级,列级或行列同时设置 安全性标签,以便特定用户 是否可以访问一个表中的某些行或列.


  这个好像没用上,不深究了.



$ id db2inst1



uid=110(db2inst1) gid=104(db2grp1) groups=1(staff),101(dasadm1)





$ db2 get dbm cfg



 SYSADM group name (SYSADM_GROUP) = DB2GRP1



 SYSCTRL group name (SYSCTRL_GROUP) =



 SYSMAINT group name (SYSMAINT_GROUP) =



 SYSMON group name (SYSMON_GROUP) = 





p104



实例级权限:



 SYSADM  最高管理权限,通常供DBA使用



 SYSCTRL  最高系统控制权限,有SYSMAINT 和SYSMON 的全部权限



 SYSMAINT  次级系统 控制权限



 SYSMON  最小的实例级管理权限





  Unix/Linux下的查看命令:



   db2 get dbm cfg|grep "SYSADM"



   db2 get dbm cfg|grep "SYSCTRL"



   db2 get dbm cfg|grep "SYSMAINT"



   db2 get dbm cfg|grep "SYSMON"



 



  Windows下的查看命令:



     db2 get dbm cfg  |find /I "SYSADM"



     db2 get dbm cfg  |find /I "SYSCTRL"



     db2 get dbm cfg  |find /I "SYSMAINT"



     db2 get dbm cfg  |find /I " SYSMON "







如何授权:



DB2实例级的管理权限是和操作系统用户绑定的.所以需先创建操作系统用户.

例子:

  假设有用户:   db2ctlusr 组: db2ctlgrp

 Linux:

  groupadd db2ctlgrp

  useradd -g db2ctlgrp -m -d  /home/db2ctlusr db2ctlusr 

AIX:

  groupadd -g 996 db2ctlgrp

  mkuser id=1005  pgrp=db2ctlgrp home/home/db2ctlusr db2ctlusr

[root@O11g64 bin]# id db2ctlusr

uid=1053(db2ctlusr) gid=1021(db2ctlgrp) groups=1021(db2ctlgrp)


 db2inst1 db2iadm1 DB2实例用户,用户组

 db2fenc1 db2fadm1 受防护的用户,用户组. 运行自定义函数和过程

 dasusr1 dasadm1 创建DB2管理服务器用户,用户组.


 1. 参数中指定用户组:

        [root@O11g64 bin]# ./db2 get dbm cfg|grep "SYSCTRL"



 SYSCTRL group name (SYSCTRL_GROUP) = 


db2 update dbm cfg using SYSCTRL_GROUP db2ctlgrp

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed

successfully.

SQL1362W One or more of the parameters submitted for immediate modification

were not changed dynamically. Client changes will not be effective until the

next time the application is started or the TERMINATE command has been issued.

Server changes will not be effective until the next DB2START command.

db2stop

db2start

[db2inst1@O11g64 ~]$ db2 get dbm cfg|grep "SYSCTRL"

 SYSCTRL group name (SYSCTRL_GROUP) = DB2CTLGRP


          db2 connect to xcldb

db2 "grant dbadm on database to user db2ctlusr"

db2 connect reset 

        

3.收回权限

db2 connect to xcldb

db2 " revoke dbadm on database from user db2ctlusr "

db2 connect reset 

常见问题 :

   报SQL5001N错误:

     原因是需要SYSADM权限才能更改数据库管理器配置文件

     使用下面命令查出组

     [db2inst1@O11g64 ~]$ db2 get dbm cfg|grep "SYSADM"

 SYSADM group name (SYSADM_GROUP) = DB2IADM1

     进入此组下的用户,再去执行更新权限

   [root@O11g64 bin]# id db2inst1

uid=1051(db2inst1) gid=1010(db2iadm1) groups=1010(db2iadm1),1020(db2fadm1)

[root@O11g64 bin]# ./db2 update dbm cfg using SYSCTL_GROUP db2ctlgrp

SQL0104N An unexpected token "SYSCTL_GROUP" was found following "USING".

Expected tokens may include: "AGENTPRI". SQLSTATE=42601

其它的 

 -- public是全部用户  

 grant select on emp to group db2ctlgrp2

  

查询

 -- 所有与权限相关的系统表

db2 " select substr(tabname,1,20) from syscat.tables where tabschema='SYSCAT' and tabname like '%AUTH' ";

db2 " select  * from DBAUTH"

角色

  create role myrole

grant select on table vacation to rle myrole

 grant role  myrole to user myusr1,user myus2

revoke role myrole from user myusr1;

-- 用户可以授予或撤消其它人角色,这个到和Oracle一个样

grant role  myrole to user myusr1 with admin option

还有更细粒度的访问控制,基于标签的访问控制(LBAC)

  工作原理是在 行级,列级或行列同时设置 安全性标签,以便特定用户 是否可以访问一个表中的某些行或列.

  这个好像没用上,不深究了.