列レベルのセキュリティ


9

テーブルの特定の列を非表示にするソリューションが必要です。このデータベース、特に機密情報を含むこれらのテーブルのいくつかに対してレポートを作成する必要があるが、給与やssnなどのアイテムを表示できない人がいます。ユーザーの特定の列をフィルタリングすることは可能ですか?


1
oracleのバージョン番号(10.1 / 10.2 / 11.1 / 11.2)とEnterprise Edition / Standard Editionを使用していますか?さらに、追加のライセンスオプション(Oracle Advanced Securityなど)がありますか?
Philᵀᴹ

10g R2 Enterprise Edition。私が知っている追加のライセンス機能はありません。
Robert

回答:


13

これは、関係するユーザーがベーステーブルにまだアクセスしていない限り、通常のビューで実行できます。

例えば:

SQL> create user reportuser identified by reportuser;

User created.

SQL> grant create session to reportuser;

Grant succeeded.

SQL> grant create synonym to reportuser;

Grant succeeded.

SQL> select user from dual;

USER
------------------------------
PHIL

SQL> create table basetable
(
  id number primary key,
  viewable varchar2(30),
  secret varchar2(30)
);

Table created.

SQL> insert into basetable values ( 1, 'hello world','this is secret' );

1 row created.

SQL> commit;

Commit complete.

SQL> create view reportview
as
select id, viewable
from basetable;

View created.

SQL> grant select on reportview to reportuser;

Grant succeeded.

SQL> conn reportuser/reportuser
Connected.
SQL> select * from phil.basetable;
select * from phil.basetable
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select secret from phil.basetable;
select secret from phil.basetable
                        *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from phil.reportview;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

問題のテーブルに対する権限を取り消してビューを作成し、元のテーブルと同じ名前を持つ各ユーザービューの同義語を使用する場合、それは透過的である必要があります。

例えば:

SQL> select user from dual;

USER
------------------------------
REPORTUSER

SQL> create synonym basetable for phil.reportview;

Synonym created.

SQL> select * from basetable;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

Virtual Private Databaseでもこれを行うことができますが、これは高価な追加ライセンスオプションだと思います。DBMS_RLSを使用して、必要な関連セキュリティポリシーを構成します。


詳細な回答ありがとうございます。実際のテーブル自体でフィルタリングすることに気付いている方法はありません。これを行うためのテーブルがいくつもあるので、これは私たちにとってははるかにクリーンなソリューションです。あなたのソリューションはうまくいくかもしれません。
ロバート

2
問題のテーブルに対する権限を取り消してビューを作成し、元のテーブルと同じ名前を持つ各ユーザーのシノニムを作成する場合、それは透過的である必要があります。
Philᵀᴹ

わかりました...それは理にかなっています。ユーザーの同義語を作成することは考えていませんでした。そのため、レポートユーザーを作成し、すべてのテーブルへのアクセスを許可してから、心配している特定のテーブルを削除する必要があります。その後、列を非表示にするビューの作成を開始します。
Robert

うん!これ以上の質問は、自由に戻って尋ねることができました。テストすることを忘れないでください:)
Philᵀᴹ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.