Захист рівня стовпців


9

Мені потрібно рішення сховати конкретні стовпці в таблиці. У нас є люди, яким потрібно складати звіти проти цієї бази даних, зокрема деякі з цих таблиць із конфіденційною інформацією, але їм заборонено бачити такі предмети, як зарплата або ssn. Чи можна фільтрувати конкретні стовпці для користувачів?


1
Який номер версії oracle (10.1 / 10.2 / 11.1 / 11.2), і ви використовуєте Enterprise Edition / Standard Edition, а також чи є додаткові ліцензовані опції (наприклад, Oracle Advanced Security)?
Philᵀᴹ

10 г R2 Enterprise Edition. Ніяких додаткових ліцензованих функцій, про які я знаю.
Роберт

Відповіді:


13

Це можна зробити за допомогою звичайного перегляду, доки залучені користувачі ще не отримали доступ до базової таблиці.

EG:

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>

Якщо ви скасуєте дозволи на розглянуті таблиці та створюєте представлення даних, а також синонім кожного перегляду користувачів, який має те саме ім'я, що і вихідна таблиця, він повинен бути прозорим.

EG:

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ᵀᴹ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.