[数据库][DB2]数据库对象授权处理

来源:互联网 发布:卡盟源码官方最新 编辑:程序博客网 时间:2024/06/05 02:39

在 DB2 V10 以后的版本,对所有的数据库对象的授权开始严格管控起来,通常的只有创建对象的用户才能拥有较多的操作权限,而别的认证用户往往需要主动显示赋权,否则将报出以下错误信息:

SQL0551N  "JANE" does not have the privilege to perform operation "SELECT" on object "AS.KBPSZ".SQL0552N  "JANE" does not have the privilege to perform operation "INSERT" on object "AS.KBPSZ".SQL0553N  "JANE" does not have the privilege to perform operation "UPDATE" on object "AS.KBPSZ".SQL0554N  "JANE" does not have the privilege to perform operation "ALTER" on object "AS.KBPSZ".SQL0555N  "JANE" does not have the privilege to perform operation "INDEX" on object "AS.KBPSZ".SQL0556N  "JANE" does not have the privilege to perform operation "DELETE" on object "AS.KBPSZ".SQL0557N  "JANE" does not have the privilege to perform operation "REFERENCES" on object "AS.KBPSZ".SQL0558N  "JANE" does not have the privilege to perform operation "BIND" on object "AS.KBPSZ".SQL0559N  "JANE" does not have the privilege to perform operation "EXECUTE" on object "AS.KBPSZ".SQL0560N  "JANE" does not have the privilege to perform operation "ALTERIN" on object "AS.KBPSZ".SQL0561N  "JANE" does not have the privilege to perform operation "DROPIN" on object "AS.KBPSZ".SQL0562N  "JANE" does not have the privilege to perform operation "CREATEIN" on object "AS.KBPSZ".SQL0563N  "JANE" does not have the privilege to perform operation "CONTROL" on object "AS.KBPSZ".

此时需要使用grant命令来赋权。使用拥有权限的授权用户来对需要赋权的用户赋权

    db2 grant <权限> on  <对象种类> <对象名> to [user] <用户>    eg. db2 grant select on table as.kbpsz to user jim

权限词说明:

特权名称 相关对象 描述 CONTROL 表、视图、索引、包、别名、不同的类型、用户定义函数、序列 提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消对对象的特权。 DELETE 表、视图 允许用户从对象中删除记录。 INSERT 表、视图 允许用户通过 INSERT 或 IMPORT 命令将记录插入对象中。 SELECT 表、视图 提供使用选择语句来查看对象内容的能力。 UPDATE 表、视图 允许用户使用更新语句修改对象中的记录。 ALTER 表 允许用户使用更改语句更改对象定义。 INDEX 表 允许用户使用创建索引语句在对象上创建索引。 REFERENCES 表 提供在对象上创建或删除外键约束的能力。 BIND 包 允许用户重新绑定现有的包。 EXECUTE 包、过程、函数、方法 允许用户执行包和例程。 ALTERIN 模式 允许用户修改模式中的对象定义。 CREATEIN 模式 允许用户在模式中创建对象。 DROPIN 模式 允许用户删除模式中的对象。

如果需要对全部用户处理,赋权给public就可以了。

    db2 grant control on as.demo_table to public

附上全数据库对象赋权的脚本:

#!/bin/sh# 只能在inst用户下执行db2 CONNECT TO dbDemo# 表 & 视图TBS=` db2 -x "SELECT CHAR( RTRIM(TABSCHEMA) || '.' || TABNAME , 120) FROM SYSCAT.TABLES WHERE TABSCHEMA IN ( SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WHERE DEFINERTYPE = 'U')" `# 函数 & 存储过程FUNCS=` db2 -x "SELECT CHAR(RTRIM(FUNCSCHEMA) || '.' || FUNCNAME, 80) FROM SYSCAT.FUNCTIONS WHERE FUNCSCHEMA IN ( SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WHERE DEFINERTYPE = 'U') " `# 序列SEQS=` db2 -x "SELECT CHAR( RTRIM(SEQSCHEMA) || '.' || SEQNAME, 80) FROM SYSCAT.SEQUENCES WHERE  SEQTYPE = 'S'  AND SEQSCHEMA IN ( SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WHERE DEFINERTYPE = 'U')" `for t in ${TBS[@]}; do db2 GRANT CONTROL ON $t TO PUBLIC ; donefor t in ${FUNCS[@]}; do db2 GRANT EXECUTE ON FUNCTION $t TO PUBLIC ; donefor t in ${SEQS[@]}; do db2 GRANT USAGE ON SEQUENCE $t TO PUBLIC ; donedb2 CONNECT RESET
0 0
原创粉丝点击