Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户
起因
为什么会有这篇文章呢? 因为最近在做项目的时候遇到一个问题...实际生产环境中程序datasource登陆的Oracle数据库用户user1不是我们创建的.这个用户没有访问我们业务表的权限(因为和其他公司合作,用user1去访问它们的数据)....我们开发中用到的用户user2是我们自己创建的有相关业务表的权限,而这个用户user2在实际生产环境中也是有的...
所以我要做的事情就是把我们user2的相关表的查询权限赋值给user1就行了...实际解决那个问题的时候我是手动写SQL赋权限的...因为依赖的表不多...
这个问题解决以后我思考了下,其实这个问题简化抽象一下的话就是问 如何能够批量把一个用户下的所有表的select权限赋值给另外一个用户
这个问题我百度了下,有一些解决办法,比如可以将表的权限赋值给public..但是这些都不是特别好的(因为这样随便哪个用户都能访问你的业务表,很不安全)....
解决办法
已知
首先应该整理一下我已知的知识,然后再去想办法...我已知的事情是:
1.赋单张表的select权限的SQL是 grant select on user1.table1 to user2
2.要找出user1下的所有表赋权限,那表名肯定不是写死的.而是通过SQL动态获取的
3.要通过SQL获取user1下的所有表名肯定需要dba的权限,通过查询dba的什么什么表才能获取..
解决
通过各种百度与实践..我找到了1个视图,dba_tables.查询这个视图可以得到一个用户下的所有表..
我就不啰嗦了,直接贴代码..
create or replace procedure test(v_from in varchar2, v_to in varchar2) is
v_sql varchar2(1000);
cursor v_cur is
select t.* from dba_tables t where t.OWNER = v_from; begin
for v_row in v_cur loop
v_sql := 'grant select on ' || v_from || '.' || v_row.table_name ||
' to ' || v_to;
execute immediate v_sql;
end loop;
end test;
解释如下:
我创建了这个test存储过程,它有2个入参,v_from和v_to,表示我准备将v_from用户下的所有表的select权限赋值给v_to用户,然后test存储过程里面有一个游标v_cur,这个游标就是为了找出用户v_from下的所有表...这个游标是通过dba_tables视图加上where条件过滤用户名得到的..
得到这个v_from用户下的所有表以后我打算构造一个SQL,用来赋权限,这个SQL就是保存在v_sql中..
在loop中,每次loop都可以得到1个v_from用户的表名,存储在v_row.table_name中.通过拼接字符串可以得到v_sql授权语句.
运行这个授权语句..然后继续下一次的loop得到新的表名.
以上便是我的思路...
测试
我新建了用户JYZ1和JYZ2,都是普通用户,然后我在JYZ1下新建了2张表,t1和t2....JYZ2是没有权限select的...(如下图,dba_tab_privs可以查询一张表授权给过哪些用户,图中没有记录表示JYZ1用户下的所有表都没有授权给过其他用户)

运行存储过程(我是用system connect as sysdba执行的)

运行test以后可以发现现在JYZ2有JYZ1的表的权限了.

小结
通过我上面那个test存储过程可以将一个用户下的所有表的select权限赋值给另外一个用户,当然如果要增加其他权限,比如update什么的,可以直接修改SQL,也是比较方便的...
另外需要特别注意的就是这个存储过程我用system connect as normal的时候不知到为什么一直编译不通过,即使system确实是有dba的权限的...而system connect as dba的时候才可以执行..不明白为什么....
Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户的更多相关文章
- Linux下批量修改文件及文件夹所有者及权限
Linux下批量修改文件及文件夹所有者及权限需要使用到两个命令,chmod以及chown 例:对/opt/Oracle/目录下的所有文件与子目录执行相同的权限变更: chmod -R 700 /opt ...
- Oracle 一个用户将表权限赋给另一个用户
原文地址:https://blog.csdn.net/u012129031/article/details/76218764 1.将用户user1的表权限赋给用户user2 select 'gra ...
- Sqlserver------SQLServer2008R2中新增用户并设定表的访问权限
在进行项目对接时,有时候处于系统安全性考虑,我们需要设置数据库的访问权限,这个时候,我们可以新增一个用户,然后设定用户的访问权限,具体步骤如下: 1, 新建登录对象 2, 点击用户映射 3, 操 ...
- linux中添加一个用户到指定用户组的两种方式,修改一个用户到指定用户组的一种方式
添加一个用户到指定用户组: gpasswd –a 用户名 组名usermod –G 组名 用户名 //第一种:gpasswd –a 用户名 组名 [root@localhost ~]# id user ...
- Oracle用户的单张表的读写权限控制
在oracle数据库的用户下,一张表需要做读写控制,只能读和写,不能删除和修改.开发人员开始想从用户权限上去实现. 经过一番讨论,判读从权限上去实现该需求是不合适的. 这个用户下很多表,根本不会被一个 ...
- python基础一 ------linux某目录下批量的为特定文件加入可执行权限
需求: 一个文件夹中有个文件,要求对特定的文件加入可执行权限 某文件系统目录下有一系列文件: quicksort graph.py heap.java install.sh ...
- oracle在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户?
我们通过如下的方法,可以安全使用该用户,然后再跳转回来,在某些时候比较有用 需要Alter user权限或DBA权限: SQL> select password from dba_users w ...
- oracle给用户分配特定用户下特定表的只读权限
以下是测试过程,测试环境oracle 11.2.0.3 linux平台: 模拟将HR用户下的employees表的只读权限非配给test_ycr创建用户:SQL> create user tes ...
- oracle查询在当前数据库下当前用户拥有的表语句
1.查询表的数目: select count(*) from tabs select count(*) from user_tables 2.查询用户拥有哪些表: select * from tabs ...
随机推荐
- SqlServer表结构查询
一.前言 近两天项目升级数据迁移,将老版本(sqlserver)的数据迁移到新版本(mysql)数据库,需要整理一个Excel表格出来,映射两个库之间的表格字段,示例如下: Mysql数据库查询表结构 ...
- 吐槽CodeDom
用着.NET Framework,发现了CodeDom的先天性缺陷,心里百般难受. 不知道 CodeDom 是什么的请看这里 CodeDom_百度百科 这里有CodeDom非常全的中文教程 CodeD ...
- ab
ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed ...
- ambari2.4.2_centos7 学习全纪录
目录: 为什么要用Ambari 概念概述 原理简介 安装 创建集群 创建集群 手动修改配置 NameNode HA 安装SmartSense 二次开发 为什么要用Ambari Ambari 是 Apa ...
- 【转】XenServer架构之XAPI的调用流程
XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上.XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较.对同一物体的两个引用,不保证是文本相同的. ...
- CANopen学习——同步
在发送和接收之间必须相互协调和同步,为此,CANopen引入同步的概念. 同步报文:包含一个数据字节或者不含数据字节的CAN报文.数据字节中包含一个从1开始递增计数的同步计数器.溢出值可在参数(索引1 ...
- 【译】什么是 web 框架?
Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...
- 结对项目:代码复审+PSP
一.代码复审 首先我从代码风格规范和程序修改两方面进行审查. (一)代码风格规范修改 1 . 代码的部分未缩进:在用markdown粘贴代码时,需要后期tab,无形中加大工作量. 2 . ...
- web前端(实习生)之“百度二面”
2016.3.18,星期五.我经历了我的第一次面试. 在面完一面之后,面试官说“我对你的考核到这里结束了,我去看一下公司是决定现在就安排二面还是只有再做安排,你先在这里等一下.”我当时就蒙圈了:一是在 ...
- js form 表达关于onpress 的一个问题
<form id="search-form" method="get" action="/search"> <fields ...