使用shell脚本生成只读权限的sql脚本(r2第28天)

目前做数据迁移,有8套不同的环境,为了保护环境,每个环境中的表,视图等开发都不能修改,只能通过连接用户去查询。 每个环境中可能含有表,索引,序列,存储过程,函数等,所以一个一个写是不现实的,写了下面的动态脚本来自动生成相应的权限,然后创建对应的同义词。 脚本会生成两个sql脚本,一个是owner用户赋予权限使用的,另外一个脚本是connect用户使用的,创建了对应的同义词。 source_schema=$1 conn_schema=$2 sqlplus -s xxx/xx <<EOF set feedback off set pages 0 set linesize 150 spool owner_${source_schema}_grant.sql select 'grant select on ${source_schema}.'||object_name||' to '||' ${conn_schema};' from all_objects where object_type in ('TABLE','TABLE PARTITION','VIEW','SEQUENCE') and owner=upper('$source_schema') group by 'grant select on ${source_schema}.'||object_name||' to '||' ${conn_schema};' ; select 'grant execute on ${source_schema}.'||object_name||' to '||' ${conn_schema};' from all_objects where object_type in ('PROCEDURE','FUNCTION','PACKAGE') and owner=upper('$source_schema') group by 'grant execute on ${source_schema}.'||object_name||' to '||' ${conn_schema};'; spool off; spool conn_${conn_schema}_syn.sql select 'create synonym ${conn_schema}.'||object_name||' for '||' ${source_schema}.'||object_name||';' from all_objects where object_type in ('TABLE','TABLE PARTITION','VIEW','SEQUENCE','PROCEDURE','FUNCTION','PACKAGE') and owner=upper('$source_schema') group by 'create synonym ${conn_schema}.'||object_name||' for '||' ${source_schema}.'||object_name||';'; spool off; EOF exit 运行结果如下: grant select on cnvdbo8.aaaa to cnvdbc8; grant select on cnvdbo8.bbbb to cnvdbc8; grant select on cnvdbo8.cccc to cnvdbc8; grant execute on cnvdbo8.dddd to cnvdbc8; grant execute on cnvdbo8.eeee to cnvdbc8; grant execute on cnvdbo8.ffff to cnvdbc8; create synonym cnvdbc8.aaaa for cnvdbo8.aaaa; create synonym cnvdbc8.bbbb for cnvdbo8.bbbb; create synonym cnvdbc8.cccc for cnvdbo8.cccc;

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android学习之路

MySql命令集锦

21013
来自专栏乐沙弥的世界

Oracle 10.2.0.1 升级到 10.2.0.4

数据库升级并不难,只要遵循其步骤,一般问题不大。但是升级失败的情况也是屡见不鲜,尤其是生产数据库的升级,搞不定的时候甚至要创建SR。

1193
来自专栏后台及大数据开发

mysql 中select for update 锁表的范围备注

  实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是更新id不为1的项目时可以直接更新③,释放锁后④,可以任意更新⑤

782
来自专栏解Bug之路

MySql之自动同步表结构

在开发过程中,由于频繁的修改数据库的字段,导致rd和qa环境的数据库表经常不一致。 而由于这些修改数据库的操作可能由多个rd操作,很难一次性收集全。人手工去和...

551
来自专栏沃趣科技

MySQL统计信息相关表介绍

以前给大家介绍过MySQL中的统计信息,相信大家也都了解了。那么统计信息是存放在哪里呢?我们怎么去查看? 在MySQL中提供了两个表记录统计信息的相关内容,分别...

3548
来自专栏沃趣科技

RR与RC隔离级别下MySQL不同的加锁解锁方式

1)innodb_locks_unsafe_for_binlog是全局参数,影响所有session;但隔离级别可以是全局也可以是会话级别。

4155
来自专栏性能与架构

跨库的查询策略

对拆分字段的查询 单值查询 select * from table1 where user_id=‘test1234’ user_id 是分库时的拆分字段...

3525
来自专栏python读书笔记

python 数据分析基础 day10-sqlite3一、使用逻辑二、创建数据库及表三、插入记录四、更新记录五、获取记录

今天是读《python数据分析基础》的第10天,今天的笔记内容是利用sqlite3模块对数据库文件进行操作。这个模块的笔记主要分为五个板块:sqlite3的使用...

2836
来自专栏C/C++基础

gcc编译出现:error: dereferencing pointer to incomplete type

使用gcc编译c文件出现如下错误: getIP.c:14: warning: implicit declaration of function ‘getho...

1312
来自专栏博客园迁移

几种事务的隔离级别,InnoDB如何实现?

隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。

591

扫码关注云+社区