この記事では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 <ユーザ名>;
ただし、この権限が付与されると全てのリダクションポリシーの適用対象外となるので注意が必要です。