Sütun düzeyinde güvenlik


9

Tablodaki belirli sütunları gizlemek için bir çözüme ihtiyacım var. Bu veritabanına ve özellikle bu tabloların bazılarına gizli bilgiler içeren raporlar oluşturması gereken, ancak maaş veya SSN gibi öğeleri görmesine izin verilmeyen kullanıcılarımız var. Kullanıcılar için belirli sütunları filtrelemek mümkün mü?


1
Hangi sürüm numarası (10.1 / 10.2 / 11.1 / 11.2) ve Enterprise Edition / Standard Edition kullanıyorsunuz, ayrıca ekstra lisanslı seçenekleriniz var mı (örneğin Oracle Advanced Security)?
Philᵀᴹ

10g R2 Enterprise Sürümü. Farkında olduğum ek lisanslı özellik yok.
Robert

Yanıtlar:


13

İlgili kullanıcılar temel tabloya zaten erişmedikleri sürece bunu normal bir görünümle yapabilirsiniz.

ÖRNEĞİN:

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>

Söz konusu tablolarda izinleri iptal ederseniz ve görünümleri oluşturursanız, orijinal tabloyla aynı ada sahip her kullanıcı görünümü için eşanlamlı olarak, şeffaf olmalıdır.

ÖRNEĞİN:

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>

Bunu Sanal Özel Veritabanı ile de yapabilirsiniz , ancak pahalı bir ekstra lisanslı seçenek olduğunu düşünüyorum. Gereksinim duyduğunuz ilgili güvenlik ilkelerini yapılandırmak için DBMS_RLS kullanırsınız.


Detaylı cevap için teşekkürler. Gerçek tablonun kendisini filtrelemenin hiçbir yolu yoktur. Bunu yapmak için bir takım masalarımız olacağından, bu bizim için çok daha temiz bir çözüm olacaktır. Çözümünüz işe yarayabilir.
Robert

2
Söz konusu tablolarda izinleri iptal ederseniz ve görünümleri oluşturursanız, orijinal tabloyla aynı ada sahip her kullanıcı için eşanlamlı olarak, şeffaf olmalıdır.
Philᵀᴹ

Tamam ... bu mantıklı. Kullanıcı için eşanlamlılar oluşturmayı düşünmüyordum. Bu nedenle, bir raporlama kullanıcısı oluşturmam, onlara tüm tablolara erişim izni vermem ve ardından endişelendiğim belirli tabloları kaldırmam gerekiyor. Bundan sonra sütunları gizlemek için görünümler oluşturmaya başlayın.
Robert

Evet! Başka soru, geri pop ve sormak için serbest düştü. Test etmeyi unutmayın :)
Philᵀᴹ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.