열 수준 보안


9

테이블에서 특정 열을 숨길 수있는 솔루션이 필요합니다. 이 데이터베이스에 대해 보고서를 작성해야하는 사람들과 특히 기밀 정보가 포함 된 일부 테이블이 있지만 급여 나 ssn과 같은 항목은 볼 수 없습니다. 사용자의 특정 열을 필터링 할 수 있습니까?


1
Oracle의 버전 번호 (10.1 / 10.2 / 11.1 / 11.2)는 Enterprise Edition / Standard Edition을 사용하고 있으며 추가 라이센스 옵션 (예 : Oracle Advanced Security)이 있습니까?
Philᵀᴹ September

10g R2 엔터프라이즈 에디션. 내가 알고있는 추가 라이센스 기능이 없습니다.
Robert

답변:


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를 사용하여 필요한 관련 보안 정책을 구성하십시오.


자세한 답변 주셔서 감사합니다. 실제 테이블 자체를 필터링하는 방법을 알고 있지 않습니다. 이 작업을 수행 할 테이블이 많으므로이 방법은 훨씬 깔끔한 솔루션입니다. 당신의 솔루션은 작동 할 수 있습니다.
Robert

2
문제의 테이블에 대한 권한을 취소하고 원래 테이블과 이름이 같은 각 사용자에 대한 동의어와 함께보기를 작성하는 경우 투명해야합니다.
Philᵀᴹ

알겠습니다. 나는 사용자의 동의어를 만드는 것에 대해 생각하지 않았습니다. 따라서보고 사용자를 만들고 모든 테이블에 대한 액세스 권한을 부여 한 다음 걱정되는 특정 테이블을 제거해야합니다. 그런 다음 열을 숨길 뷰를 작성하기 시작하십시오.
Robert

예! 더 이상 궁금한 점이 있으면 다시 물러서서 물었다. 테스트하는 것을 잊지 마십시오 :)
Philᵀᴹ September
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.