今天一客户朋友咨询一个Oracle数据库用户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导出指定的表的更多相关文章

  1. MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )

    MySQL 如何只导出 指定的表 的表结构和数据 ( 转 ) 2011-01-04 15:03:33 分类: MySQL MySQL 如何只导出 指定的表 的表结构和数据 导出更个库的表结构如下:my ...

  2. oracle EXP导出一张表时使用query参数指定where条件

    oracle exp 导出一个表的部分内容,使用query参数可加上SQL的where条件进行过滤 注意:如果需要使用到日期字符串格式等单引号,需要使用双引号将where条件括起来,而且双引号要用\做 ...

  3. 高版本->低版本迁移,低版本客户端连接高版本数据库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,若 ...

  4. yii2搭建完美后台并实现rbac权限控制案例教程

    作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  5. yii2搭建完美后台并实现rbac权限控制实例教程

    1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 或者参考yii2实战教程之详细安装步骤 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/con ...

  6. oracle通过query导出指定条件的数据

    通过下面的方式oracle可以导出指定了条件的数据: exp mixcoaldb/mixcoaldb@server tables=(shengcssjk) query=\"where to_ ...

  7. exp导出出现:ORA-00904: "POLTYP": invalid identifier

    相关文章:    <exp导出出现:ORA-00904: : invalid identifier>:http://blog.itpub.net/23135684/viewspace-13 ...

  8. Oracle:exp导出exp-00091问题

    今天导出一数据库数据,发现EXP-00091问题: 连接到: Oracle Database 10g Enterprise Edition Release - Production With the ...

  9. Yii2搭建后台并实现rbac权限控制完整实例教程

    .安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际 ...

随机推荐

  1. 岭回归和Lasso回归以及norm1和norm2

    norm代表的是距离,两个向量的距离:下图代表的就是p-norm,其实是对向量里面元素的一种运算: 最简单的距离计算(规范)是欧式距离(Euclidean distance),两点间距离是如下来算的, ...

  2. EXCEL 将网络图片地址插入为锁定的图片单元格宏

    Sub InsertPic2(ByVal 图片链接 As String, ByVal 插入图片表名 As String, ByVal 插入图片单元格地址 As String) On Error Res ...

  3. 通过状态机来对axi_lite总线进行操作

    通过状态机来对axi_lite总线进行操作 状态跳转: 1.初始状态 将axi_lite读写两个信道分开进行控制,在初始状态,就根据读,写信号来判断应该跳转到那一个状态. 2.写状态 在写状态中不需要 ...

  4. OpenTSDB(时序数据库官网)

    官网地址:http://opentsdb.net/ 下载地址:https://github.com/OpenTSDB/opentsdb/releases ----------------------- ...

  5. Flutter at Google I/O 2018

    Flutter at Google I/O 2018   如何观看 https://flutterchina.club/ 极速构建漂亮的原生应用 Flutter是谷歌的移动UI框架,可以快速在iOS和 ...

  6. 苹果cms测试

    配置好权限,搞了半天,一直以为是容器镜像的问题 sudo chgrp -hR www-data maccms10 启动容器 docker run --rm -d --network=isolated_ ...

  7. ThinkPHP 3.1.2 输出和模型使用 配置项等 - 2

    一.ThinkPHP 3 的输出      (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出 想分配变量可以使用assign方法 c.修改左右定界符 休 ...

  8. 黄聪:is_file和file_exists效率比较

    目前在弄文件缓存的时候用到了判定文件存在与否,is_file()还是file_exists()呢?is_file和file_exists两者效率比较起来,谁的运行速度更快呢?还是做个测试吧: 1 2 ...

  9. PAT 乙级 1051 复数乘法 (15) C++版

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  10. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...