Keamanan tingkat kolom


9

Saya membutuhkan solusi untuk menyembunyikan kolom tertentu dalam sebuah tabel. Kami memiliki orang-orang yang perlu membuat laporan terhadap database ini dan secara khusus beberapa tabel ini dengan informasi rahasia tetapi tidak diizinkan untuk melihat item seperti gaji atau ssn. Apakah mungkin untuk memfilter kolom khusus untuk pengguna?


1
Berapa nomor versi oracle (10.1 / 10.2 / 11.1 / 11.2) dan apakah Anda menggunakan Edisi Enterprise / Edisi Standar, plus apakah Anda memiliki opsi berlisensi tambahan (Oracle Advanced Security, misalnya)?
Philᵀᴹ

10g R2 Edisi Perusahaan. Tidak ada fitur berlisensi tambahan yang saya ketahui.
Robert

Jawaban:


13

Anda dapat melakukan ini dengan tampilan normal, selama pengguna yang terlibat belum mendapatkan akses ke tabel dasar.

MISALNYA:

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>

Jika Anda mencabut izin pada tabel yang dimaksud & membuat tampilan, bersama dengan sinonim untuk setiap tampilan pengguna yang memiliki nama yang sama dengan tabel asli, itu harus transparan.

MISALNYA:

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>

Anda juga dapat melakukan ini dengan Virtual Private Database , tetapi saya pikir ini merupakan opsi berlisensi ekstra mahal. Anda menggunakan DBMS_RLS untuk mengonfigurasi kebijakan keamanan yang relevan yang Anda butuhkan.


Terima kasih atas jawaban terinci. Tidak mungkin Anda sadar untuk memfilter pada tabel sebenarnya. Ini akan menjadi solusi yang jauh lebih bersih bagi kita karena kita akan memiliki sejumlah tabel untuk melakukan ini. Solusi Anda bisa berhasil.
Robert

2
Jika Anda mencabut izin pada tabel yang dimaksud & membuat tampilan, bersama dengan sinonim untuk setiap pengguna yang memiliki nama yang sama dengan tabel asli, itu harus transparan.
Philᵀᴹ

Ok ... itu masuk akal. Saya tidak berpikir tentang membuat sinonim untuk pengguna. Jadi saya perlu membuat pengguna pelaporan, memberi mereka akses ke semua tabel, lalu menghapus tabel tertentu yang saya khawatirkan. Setelah itu mulailah membuat tampilan untuk menyembunyikan kolom.
Robert

Ya! Ada pertanyaan lagi, jatuh bebas untuk kembali dan bertanya. Jangan lupa untuk menguji :)
Philᵀᴹ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.