Oracle关于数据的导出导入的权限问题

由于工作原因,oracle是用到比较多的数据库,其中权限的设定部分也是使用比较频繁的。今天我主要以备份数据即导出数据为例,简单说下权限问题,也给自己做个阶段性总结。

一、权限分类

权限根据针对性特点分类,将之分为系统权限和实体权限。

系统权限意指针对用户来进行权限管理操作,实体权限指的是针对表、视图等实体来进行权限管理操作。

二、对于系统权限分类

系统权限分为具有最高权限的DBA和普通用户两种;DBA在安装的过程中会有指定,一般都是sys用户,当然你也可以将你的用户通过sys用户授权为DBA,授权方式如下:

grant dba to kqportal;

当然,指定为dba肯定会有很多权限,但我强烈建议你不要这样做,除非你有比较特殊的管理任务;撤销授权方式如下:

revoke dba from kqportal;

注释:权限可以被授予,也可以用同样的方式撤销。

三、对于实体权限分类

实体权限分类是为了获取或操作用户的表或视图等实体;在默认情况下,新建的用户具有一些权限,想要更多权限,可以如下:

grant connect,resource,create session,create table,create view,create sequence to kqportal;

四、数据备份

由于昨天库被人莫名清空,导致系统一度停止使用,万幸数据库快照没被破坏掉,数据被找回来了;这里多说一点,一般情况下,数据被清空之后,没做ddl操作,则可以恢复数据到该时间。

鉴于上述情况,我写了一个脚本,用来完成自动备份数据工作。脚本后期再补充,还在做优化。

脚本中写了一句常用的导出语句,如下:

exp kqportal/123456@ORCL file=D:\ksk\OrclDBackup\backupdbdir\kqportal_orcl_%BACKUPDATE%.dmp full=y

大家应该也注意到了,其中加了一句full=y;该参数表示导出所有表,包括系统表及其他表空间的表。

如果真有这样的需求,即导出所有的表,则上面这句还不行,会报需要有授权才能导出。可以用以下语句进行授权:

--需要以dba权限用户登录,进行EXP_FULL_DATABASE角色的授权
grant EXP_FULL_DATABASE to kqportal;

以上语句可以让你达到在普通用户下导出全部表及数据的目的。(当然,有EXP_FULL_DATABASE角色,就会有IMP_FULL_DATABASE角色,具体后期再谈,不过也差不多)

不过下面我将重点说明下,执行了上面语句之后,会带来哪些问题,并怎么解决这些问题。

上面语句让你具有了导出所有表及数据的能力,但是如果你的数据库中有多个表空间,并且表空间中有相同表名的表,那么你的程序将运行不起来,实测。将报错More than one table found in namespace。

最后解决方案为,执行下面语句:

revoke SELECT ANY TABLE from exp_full_database;

解释:EXP_FULL_DATABASE 这个色包含8种权限,其中有一个SELECT ANY TABLE权限,正因为包含这个权限,导致kqportal用户可以exp mema用户任何表。

于是我尝试将该SELECT ANY TABLE这个权限EXP_FULL_DATABASE里面回收掉,然后解决了问题。

现在想到的只有这种方式,目前测试也没出现其他问题,如果有其他副作用,后期我再补充。

你可能感兴趣的:(Oracle)