列级安全


9

我需要一种隐藏表中特定列的解决方案。我们有些人需要针对此数据库(特别是其中一些带有机密信息的表)生成报告,但不允许查看薪水或ssn等项目。是否可以为用户过滤特定的列?


1
oracle的哪个版本号(10.1 / 10.2 / 11.1 / 11.2),并且您正在使用企业版/标准版,此外,您还有其他许可的选项(例如,Oracle Advanced Security)吗?
Philᵀᴹ

10g R2企业版。我知道没有其他许可功能。
罗伯特

Answers:


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ᵀᴹ

好吧...那是有道理的。我没有考虑为用户创建同义词。因此,我需要创建一个报告用户,向他们授予对所有表的访问权限,然后删除我担心的特定表。之后,开始创建视图以隐藏列。
罗伯特

对!任何其他问题,请随意弹出并提出。不要忘了测试:)
Philᵀᴹ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.