ORA-28081: 権限が不十分です - コマンドはリダクションされたオブジェクトを参照しています。の対処法

この記事ではORA-28081のエラーの対処法について解説します。

 ORA-28081: 権限が不十分です - コマンドはリダクションされたオブジェクトを参照しています。

このエラーはData Redactionを設定している環境で発生します。

ソース列がData Redactionのポリシーで保護されている場合はDMLの操作ができずにエラーが発生します。

エラーが発生する例は下記のようなSQLになります。

INSERT INTO <テーブル名> SELECT * FROM <リダクションポリシーのあるテーブル>;
CREATE TABLE <テーブル名> AS SELECT * FROM <リダクションポリシーのあるテーブル>;

このエラーはSQLを実行するユーザに対してリダクションが発生しているか(expressionパラメータがTRUEかどうか)は関係ありません。

ポリシーが作成され、有効化されていればエラーが発生します。

SQL> select * from test.card;  ←リダクションポリシーのあるテーブル
PID NAME   CARD_NO
---- ------ -----------------------
   2 Tanaka 1234-5678-1234-78  ←リダクション対象外のユーザなので通常通り表示される
   6 TANAKA 123456789
   1 tanaka 1234-5678-1234-5678
   3 Tanaka 1234-5678-1234-78910000
   4 Tanaka 12345678123478910000
   5 Tanaka 1234567
 
SQL> insert into test.card2 select * from test.card where pid=2;
insert into test.card2 select * from test.card where pid=2
                              *
行1でエラーが発生しました。:
ORA-28081: 権限が不十分です - コマンドはリダクション済のオブジェクトを参照しています。


 対処法

SQLを実行するユーザに対して「EXEMPT REDACTION POLICY」システム権限を付与することでエラーを回避することが可能です。

権限の付与は下記のSQLで行います。

GRANT EXEMPT REDACTION POLICY TO <ユーザ名>;

ただし、この権限が付与されると全てのリダクションポリシーの適用対象外となるので注意が必要です。