当我们对一个启用管理精细审计的表进行导出数据时,会出现如下错误:
EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的。常规路径只能导出部分表。
. . 正在导出表 PURCHASEORDER导出了 132 行
EXP-00079:
用户在没有对DBMS_RLS(存取控制包)的执行权限时,进行了对需要存取控制的表的导出。因为表的所有者也受存取控制权限的限制,所以即使是表的所有者也不能导出整个表的所有行,而只能导出他所能看到的行。另外,为保证表的一致性,导出表的用户必须拥有足够的权限,以保证在导入时重建表及其安全策略。因此,强烈建议由数据库管理员来处理导出表的操作。赋予表的所有者以执行权限将有利于这个安全检查,当然这会引起其他安全冲突.....
一 解决方法
1 以dba的身份导出
C:\Users\aaaa>exp '/ as sysdba' wner=oe file=oe.dmp log=oe.log
连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过常规路径...
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
. . 正在导出表 PURCHASEORDER导出了 132 行
. . 正在导出表 WAREHOUSES导出了 9 行
.......
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
================================================
C:\Users\aaaa>exp system/yang wner=oe file=oe2.dmp log=oe2.log
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过常规路径...
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的。常规路径只能导出部分表。
. . 正在导出表 PURCHASEORDER导出了 132 行
. . 正在导出表 WAREHOUSES导出了 9 行
. 正在导出同义词
........
. 正在导出统计信息
导出成功终止, 但出现警告。
================================================
2 使用system用户,使用direct=y 参数 导出数据。但是oe用户使用direct=y参数导出时依然报错!
C:\Users\aaaa>exp system/yang wner=oe file=oe3.dmp log=oe3.log direct=y
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过直接路径...
表 CATEGORIES_TAB 将以常规路径导出。
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
表 CUSTOMERS 将以常规路径导出。
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
表 PURCHASEORDER 将以常规路径导出。
. . 正在导出表 PURCHASEORDER导出了 132 行
表 WAREHOUSES 将以常规路径导出。
. . 正在导出表 WAREHOUSES导出了 9 行
. 正在导出同义词
.........
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
C:\Users\aaaa>exp oe/yang wner=oe file=oe4.dmp log=oe4.log direct=Y
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过直接路径...
表 CATEGORIES_TAB 将以常规路径导出。
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
表 CUSTOMERS 将以常规路径导出。
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
表 PURCHASEORDER 将以常规路径导出。
EXP-00080: 表 "PURCHASEORDER" 中的数据是被保护的。请使用常规模式。
EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的。常规路径只能导出部分表。
. . 正在导出表 PURCHASEORDER导出了 132 行
表 WAREHOUSES 将以常规路径导出。
. . 正在导出表 WAREHOUSES导出了 9 行
. 正在导出同义词
........
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
导出成功终止, 但出现警告。
================================================
3 赋予用户exempt access policy 再次导出。当oe 用户自己导出数据是依然报错!
C:\Users\aaaa>exp oe/yang wner=oe file=oe3.dmp log=oe3.log
Export: Release 11.1.0.6.0 - Production on 星期日 2月 20 21:08:14 2011
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过常规路径...
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的。常规路径只能导出部分表。
. . 正在导出表 PURCHASEORDER导出了 132 行
. . 正在导出表 WAREHOUSES导出了 9 行
. 正在导出同义词
.......
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
导出成功终止, 但出现警告。
================================================
sys@ORACL> grant exempt access policy to oe;
================================================
C:\Users\aaaa>exp oe/yang wner=oe file=oe3.dmp log=oe3.log
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 OE 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 OE 的对象类型定义
即将导出 OE 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 OE 的表通过常规路径...
. . 正在导出表 CATEGORIES_TAB导出了 22 行
. . 正在导出表 PRODUCT_REF_LIST_NESTEDTAB导出了 288 行
. . 正在导出表 SUBCATEGORY_REF_LIST_NESTEDTAB导出了 21 行
. . 正在导出表 CUSTOMERS导出了 319 行
. . 正在导出表 INVENTORIES导出了 1112 行
. . 正在导出表 ORDERS导出了 105 行
. . 正在导出表 ORDER_ITEMS导出了 665 行
. . 正在导出表 PRODUCT_DESCRIPTIONS导出了 8640 行
. . 正在导出表 PRODUCT_INFORMATION导出了 288 行
. . 正在导出表 PROMOTIONS导出了 2 行
. . 正在导出表 PURCHASEORDER导出了 132 行
. . 正在导出表 WAREHOUSES导出了 9 行
. 正在导出同义词
.........
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
====================================
二 如何确定导出的数据是否完整
以dba身份执行如下查询并对比导出日志中的行数,是否相等。
sys@ORACL> select count(*) from oe.PURCHASEORDER;
COUNT(*)
----------
132
查询某些表是否启动了管理精细审计
sys@ORACL> SELECT enable,sel,object_owner||'.'||object_name "OBJECT_OWNER.NAME"
2 FROM dba_policies WHERE object_name='PURCHASEORDER';
ENA SEL OBJECT_OWNER.NAME
--- --- -------------------------------------------------------------
YES NO OE.PURCHASEORDER
YES NO OE.PURCHASEORDER
YES YES OE.PURCHASEORDER
sys@ORACL> desc dba_policies