我这边的一般做法是:
1、创建一个与 schema 相对应的角色 ROLE1
2、将该 schema 中的所有表的 select 或 insert 或 update 或 delete等特权赋予到这个角色 ROLE1
3、将角色 ROLE1 赋予需要的普通用户
DB2里给表‘select’权限只能针对表,不能针对schema。如果要给某个schema下的所有表授只读权限可以先查‘syscat.tables’表将某个schema的表全部查出来,然后全部通过
grant select on TABLE_NAME to user USER_NAME。
来授权,每个表一条授权语句。所以可以搞个循环脚本去跑。
使用此脚本:
db2 connect to $1
rm -f table.txt
db2 grant connect on database to user $2
db2 -x "select TABSCHEMA,tabname from syscat.tables with ur" > table.txt
cat table.txt|while read schema tabname
do
db2 grant select on table $schema.$tabname to user $2
done
如果需要指定某个schema,修改一下脚本里面的 $schema 这个变量就行。
执行:sh xxx.sh dbname xxxuser
执行完毕后,如果连接或查询报错,看具体的报错信息(一般是某些包没有赋权限),再赋予相关包的权限给此用户即可