生产库中含有查询权限的具体操作

在日常优化生产库sql的过程中,我们经常遇到生产库和测试库(包括pre)索引结构和个数的不同,表数据量的不同,从而导致sql的执行计划出现严重的偏差,既而在优化的过程中带来许多不便,同时也给运维同事带来许多不必要的工作量。为此,我们需要生产库中权限,来加快日常优化的效率,在此,我专写了一篇关于在生产库中留有查询权限的具体操作。

大纲如下:
1、建立新组和新用户,为此组赋予 CONNECT、BINDADD和EXPLAIN权限。
2、能够查询生产库表的数据量、某个字段的不同值和做sql的explain,在生产库上所有的表上赋SELECT权限。并在以后生产库中加入新的表时,及时的赋SELECT权限。
3、为此用户组的PACKAGE "NULLID"."SQLADH1B"、"NULLID"."DB2L0H00"、"NULLID"."DB2L2H13" 赋予BIND、EXECUTE权限。

具体步骤如下:
1.
新建用户、赋予权限
    建立新用户,创建组和用户。系统用户下运行以下命令:(以下没有提别声明,均是在linux下执行。)
>groupadd monitor
>useradd -g monitor -m -d /home/dbamon dbamon)
>passwd dbamon
密码:*******
2.
赋权限
2.1
对用户赋权限
为DBAMON用户赋CONNECT和EXPLAIN权限。(同时在该用户下,创建EXPLAIN.DDL中所有的表)。在登录此用户的时候用堡垒机登录,申请的名单请看附录
步骤如下:
进入实例用户,连接数据库,然后执行以下命令
$db2 update dbm cfg using SYSMON_GROUP MONITOR
(注意:此实例参数改变后,不要重启实例。在sap系统中,不执行此命令)
$GRANT EXPLAIN,CONNECT,BINDADD,CREATETAB, IMPLICIT_SCHEMA ON DATABASE TO GROUP MONITOR;
进入dbamon用户下,并在当前模式下创建EXPLAIN.DDL 中的表
>su - dbamon
>vi .bash_profile
在此文件中添加如下命令行:(在AIX系统中对应的文件是.profile,注意profile前有个“.”)
if [ -f /home/db2inst1/sqllib/db2profile ]; then
   source /home/db2inst1/sqllib/db2profile
fi
(注意:这里db2inst1 是实例用户的名称,各个数据库因为实例名不同,因此注意实例名的变化(若不知道实例名是什么,可以通过db2 get instance 命令查看实例名))保存后,退出,然后再进入dbamon用户,执行db2 命令,检查环境变量是否设置正确(若一下第一条命令可以运行则配置正确)。

$db2 connect to db_name
$cp /home/db2inst1/sqllib/misc/EXPLAIN.DDL /home/dbamon   (注意:db2inst1 为实例名,可以通过db2 get instance 命令找到实例名)
$db2 -tvf EXPLAIN.DDL
执行成功后:
$exit(退出dbamon 用户,进入实例用户,并进入自己工作的目录中)
> su - db2inst1
$db2 REVOKE CREATETAB, IMPLICIT_SCHEMA ON DATABASE FROM GROUP MONITOR;  --这样做主要是为了使dbamon用户只有查询权限

2.2
对表赋SELECT 权限
    为了能够查询生产库表的数据量、某个字段的不同值和做sql的explain,在生产库上所有的表上赋SELECT权限。并在以后生产库中加入新的表时,及时的赋SELECT权限。步骤如下(在实例用户下):
$db2 -x "select 'GRANT SELECT ON TABLE ' || trim(TABSCHEMA) || '.' || trim(TABNAME) || ' TO USER DBAMON;'  from syscat.tables where TABNAME NOT LIKE 'EXPLAIN%' AND TABNAME NOT LIKE 'ADVISE%'"  > sel_prd.out

$db2 -tvf sel_prd.out

2.3
对PACKAGE付赋权限
为此用户组的PACKAGE "NULLID"."SQLADH1B"、"NULLID"."DB2L0H00"、"NULLID"."DB2L2H13" 赋予BIND、EXECUTE权限。
在实例用户下执行以下命令:
$db2 GRANT BIND , EXECUTE ON PACKAGE "NULLID"."SQLADH1B" TO GROUP "MONITOR";
$db2 GRANT BIND , EXECUTE ON PACKAGE "NULLID"."DB2L0H00" TO GROUP "MONITOR ";
$db2 GRANT BIND , EXECUTE ON PACKAGE "NULLID"."DB2L2H13" TO GROUP "MONITOR ";
3.
完成
    到此,所有赋权限工作已经完毕,进入相应的目录下删掉工作过程中生成的文件prd-sel.out和EXPLAIN.DDL。
参与1

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

hanbing_2021
数据库管理员江苏省南京市苏宁易购

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2014-10-13
  • 关注会员:1 人
  • 问题浏览:10473
  • X社区推广