如何通过权限控制EXP导出指定的表
问题是这样的: 目前他们那边有外面的开发公司人员在核心系统做开发,考虑到系统数据的敏感性,给他们建了一个数据库用户test,该用户test可以做exp导出操作,但是只能导出指定的几张表,而不是所有的表test都有权限导出。
测试情况如下:
假设MEMA为业务用户,下面有(t1,t2,t3,t4,这4张表),TEST是给外面开发人员使用的用户,
要求:test可以做exp导表操作,但是test用户只能导出t1表,t3表test用户是没有权限导出的
测试内容如下:
1:创建test用户
SYS@EMREP>create user test identified by oracle;
2:赋予test用户create session的权限(最基本权限)
SYS@EMREP>grant create session to test;
3:尝试用test用户去导出mema用户的t1表
[oracle@even ~]$ exp test/oracle file=/u01/b.dmp tables=mema.t1,mema.t3
Export: Release 10.2.0.2.0 - Production on Mon Aug 25 07:58:18 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
EXP-00009: no privilege to export MEMA's table T1
EXP-00009: no privilege to export MEMA's table T3
Export terminated successfully with warnings.
没有权限执行EXP操作。这是因为test用户需要被赋予exp_full_database的权限才能够导mema用户的表,
SYS@EMREP>grant exp_full_database to test;
此时mema用户下面的表能成功导出:
[oracle@even ~]$ exp test/oracle file=w.dmp tables=mema.t1,mema.t3
Export: Release 10.2.0.2.0 - Production on Tue Aug 26 00:57:02 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
Current user changed to MEMA
. . exporting table T1 5 rows exported
. . exporting table T3 7 rows exported
Export terminated successfully without warnings.
赋予exp_full_database的权限后,test用户能够导出mema用户下面的所有表,但是我们想限制test用户只导特地的表,也就是说,exp_full_database这个权限有点大了。
查看exp_full_database具有哪些权限:
SYS@EMREP>select * from dba_sys_privs where grantee='EXP_FULL_DATABASE';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
EXP_FULL_DATABASE READ ANY FILE GROUP NO
EXP_FULL_DATABASE RESUMABLE NO
EXP_FULL_DATABASE EXECUTE ANY PROCEDURE NO
EXP_FULL_DATABASE EXECUTE ANY TYPE NO
EXP_FULL_DATABASE SELECT ANY TABLE NO
EXP_FULL_DATABASE ADMINISTER RESOURCE MANAGER NO
EXP_FULL_DATABASE BACKUP ANY TABLE NO
EXP_FULL_DATABASE SELECT ANY SEQUENCE NO
8 rows selected.
EXP_FULL_DATABASE 这个role角色包含上面8种权限,注意SELECT ANY TABLE这个权限,正因为包含这个权限,导致test用户可以exp mema用户任何表。于是我先尝试将该SELECT ANY TABLE这个权限从EXP_FULL_DATABASE里面回收掉
SYS@EMREP>revoke SELECT ANY TABLE from exp_full_database;
Revoke succeeded.
接下来我们再来看test用户exp导出情况:
[oracle@even ~]$ exp test/oracle file=1.dmp tables=mema.t1,mema.t3
Export: Release 10.2.0.2.0 - Production on Tue Aug 26 01:28:41 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
Current user changed to MEMA
. . exporting table T1
EXP-00056: ORACLE error 942 encountered
ORA-00942: table or view does not exist
. . exporting table T3
EXP-00056: ORACLE error 942 encountered
ORA-00942: table or view does not exist
Export terminated successfully with warnings.
SELECT ANY TABLE 从 exp_full_database回收掉之后,test用户无法导出mema下面的表。这也进一步验证了我的猜想。
根据要求,test用户能导出mema.t1表,不能导出mema.t3表,于是我再赋予mema.t1对应的select权限。
SYS@EMREP>grant select on mema.t1 to test;
Grant succeeded.
继续测试exp操作结果:
[oracle@even ~]$ exp test/oracle file=1.dmp tables=mema.t1,mema.t3
Export: Release 10.2.0.2.0 - Production on Tue Aug 26 01:29:08 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
Current user changed to MEMA
. . exporting table T1 5 rows exported
. . exporting table T3
EXP-00056: ORACLE error 942 encountered
ORA-00942: table or view does not exist
Export terminated successfully with warnings.
我们看到,mema.t1被单独赋予select权限后,能够成功导出。而mema.t3因为没有赋予select权限,所以它不能被导出。
总结: 经过上面一系列的测试,使用上述方法可以实现客户的最终需求。
不过需要说明的是: EXP_FULL_DATABASE作为系统自带的role,考虑到是测试,我是直接在上面revoke select any table,在实际的生产系统中我们不建议直接在该role上面做revoke回收操作。实际的数据库系统中,我们可以新建一个role ,然后把exp_full_database包含的权限(排除select any table)赋予给新建的role.
题外话: 现在很多客户都有一些外面的开发公司在给他们做系统开发,需要频繁的将生产数据导入到测试环境供开发人员访问或者做测试,系统内有些敏感数据客户又不想把这些真实数据提供给他们做测试,Oracle有一款产品叫data masking , 部署该产品,配置相关规则,能够实现真实数据根据规则转换为非真实的数据,这样一方面即没有泄露真实的数据,又能够保证开发人员的测试。有兴趣的同学可以了解下。
如何通过权限控制EXP导出指定的表的更多相关文章
- MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
MySQL 如何只导出 指定的表 的表结构和数据 ( 转 ) 2011-01-04 15:03:33 分类: MySQL MySQL 如何只导出 指定的表 的表结构和数据 导出更个库的表结构如下:my ...
- oracle EXP导出一张表时使用query参数指定where条件
oracle exp 导出一个表的部分内容,使用query参数可加上SQL的where条件进行过滤 注意:如果需要使用到日期字符串格式等单引号,需要使用双引号将where条件括起来,而且双引号要用\做 ...
- 高版本->低版本迁移,低版本客户端连接高版本数据库EXP导出报错EXP-00008,ORA-01455,EXP-00000
生产环境: 源数据库:RHEL + Oracle 11.2.0.3 目标数据库:HP-UX + Oracle 10.2.0.4 需求:迁移部分表 11.2.0.3-->10.2.0.4,若 ...
- yii2搭建完美后台并实现rbac权限控制案例教程
作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...
- yii2搭建完美后台并实现rbac权限控制实例教程
1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 或者参考yii2实战教程之详细安装步骤 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/con ...
- oracle通过query导出指定条件的数据
通过下面的方式oracle可以导出指定了条件的数据: exp mixcoaldb/mixcoaldb@server tables=(shengcssjk) query=\"where to_ ...
- exp导出出现:ORA-00904: "POLTYP": invalid identifier
相关文章: <exp导出出现:ORA-00904: : invalid identifier>:http://blog.itpub.net/23135684/viewspace-13 ...
- Oracle:exp导出exp-00091问题
今天导出一数据库数据,发现EXP-00091问题: 连接到: Oracle Database 10g Enterprise Edition Release - Production With the ...
- Yii2搭建后台并实现rbac权限控制完整实例教程
.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际 ...
随机推荐
- Day 02 编程语言介绍及运行python
一.编程语言介绍 1.1.机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件. 1.2.汇编语言:用英文标签取代二进制指令编写程序,本质也是在直接控制硬件. 1.3.高级语言:用人能理解的 ...
- Fixed-point multiplication (C166 A*B/B)
I want to multiply two fixed point numbers. After the multiplication I have to shift the result so t ...
- Anaconda 安装 Python 库(MySQLdb)的方法-(转)
安装python库的过程中,最重要的地方就是版本需要兼容.其中操作系统为64位,Python为2.X 64位,下载安装文件的时候也要注意版本匹配.其中文件名中包含的cp27表示CPython 2.7版 ...
- [转] Centos7 yum lock,无法上网问题,以及安装python3.5
centos 7 无法上网问题 转自 http://www.cnblogs.com/katios/p/5660336.html 博主本着学无止境的精神在虚拟机上安装了一个centos7 来敲敲命令行. ...
- HDFS管理工具HDFS Explorer
HDFS Explorer是一个在windows上管理HDFS系统的工具,支持上传.下载.重命.复制.移动和删除等. 一.下载地址 CSDN下载地址:http://download.csdn.net/ ...
- mybatis 使用oracle merge into 语句踩坑实录
由于需求涉及oracle的clob类型字段,在mybatis的mapper xml文件中编写merge into语句时总是失败. 附上错误代码 <insert id="mergeInt ...
- Star Schema and Snowflake Schema
在设计数据仓库模型的时候,最常见的两种是星型模型与雪花模型.选择哪一种需要根据业务需求以及性能的多重考量来定. 星型模型 在星型模型当中,一张事实表被若干张维度表所包围.每一个维度代表了一张表,有主键 ...
- ML: 降维算法-LDA
判别分析(discriminant analysis)是一种分类技术.它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类.判别分析的方法大体上有三类,即Fishe ...
- java中Future与FutureTask使用与分析
Future与FutureTask都是用于获取线程执行的返回结果.下面我们就对两者之间的关系与使用进行一个大致的介绍与分析 一.Future与FutureTask介绍: Future位于java.ut ...
- java集合之List源码解析
List是java重要的数据结构之一,我们经常接触到的有ArrayList.Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下 接下来,我们对 ...