今天一客户朋友咨询一个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. Elasticsearch(四)优化用户体验

    改正用户拼写 Term suggester:词项匹配建议:可以通过wiki的插件来下载wiki上面的单词以及短语,来作为你的拼写提示基础仓库: Phrase suggester:n-gram算法,短语 ...

  2. java IO流(二)

    一.字符编码 char计算机存储的都是二进制数据,其实就是一个一个的数值字符要存储,就必须让这个字符对应一个数 将一个字符转成数字,这个过程就叫编码,反过来将一个数字转成字符就叫解码 中国大陆 (GB ...

  3. 基于openresty的https配置实践

    最近机器人项目的子项目,由于和BAT中的一家进行合作,人家要求用HTTPS连接,于是乎,我们要改造我们的nginx的配置,加添HTTPS的支持. 当然了,HTTPS需要的证书,必须是认证机构颁发的,这 ...

  4. excel技巧--多行排成单列

    要将上图的多行排成单列的效果,做法如下: 1.在倒数第二列的下方单元格,写入=号,然后再点击倒数第一列第一个单元格.这样复制该单元格的公式. 2.然后对着这个复制好的单元格的右下角一直往下拖拉,尽量拖 ...

  5. Debian下Netbeans编辑器字体锯齿现象

    第一步:到你netbeans安装目录下的etc目录下,找到netbeans.conf文件,打开准备编辑:第二步:在netbeans_default_options后面加上-J-Dawt.useSyst ...

  6. WPF DataGrid 用法

    XAML==> <Window x:Class="QueueSystem.MainWindow" xmlns="http://schemas.microsof ...

  7. 跟未名学Office - PPT核心:表达

    目录 第一章. PPT核心:表达    2 第一节 观点    2 第二节 数据来源    2 第三节 逻辑顺序    3 PPT核心:表达 观点 1    vs    N 要表达什么? 为什么要做成 ...

  8. 【Maven】从Maven中导出项目依赖的Jar包

    从SVN上下载源代码 svn export https://10.200.1.201/xxxx/PLATFORM code/ --force --username xxx --password xxx ...

  9. Espresso小试

    Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...

  10. Python 解析XML实例(xml.sax)

    已知movies.xml <collection shelf="New Arrivals"> <movie title="Enemy Behind&qu ...