Oracle数据库:如何限制用户只查看他/她自己的数据?

时间:2015-01-02 04:58:08

标签: database plsql oracle11g

例如,我有一个这样的表:

                 +-----------------------------+
                 |        sample_table         |
                 +-----------------------------+
                 |  col_1  |  col_2  |  col_3  |
                 +-----------------------------+
User_1 Entered : |'val_1_1'|'val_1_2'|'val_1_3'|
                 +-----------------------------+
User_2 Entered : |'val_2_1'|'val_2_2'|'val_2_3'|
                 +-----------------------------+

现在我想要以上每个用户发出以下查询:

Select * from sample_table

结果 对于 User_1 是:

+-----------------------------+
|  col_1  |  col_2  |  col_3  |
+-----------------------------+
|'val_1_1'|'val_1_2'|'val_1_3'|
+-----------------------------+

User_2 是:

+-----------------------------+
|  col_1  |  col_2  |  col_3  |
+-----------------------------+
|'val_2_1'|'val_2_2'|'val_2_3'|
+-----------------------------+

限制每个用户访问(select-update-delete)仅限于他/她的数据的好方法是什么? (所有用户都可以插入数据,但我只能查看或修改他们的数据)。感谢您的回答和指南。 注意: 我的意思是 Database users 但如果有人为 application users <提供解决方案,我将不胜感激/ strong>也是。

1 个答案:

答案 0 :(得分:0)

将Data_Owner字段添加到USER函数填充的表中。不允许直接访问表。所有访问都是通过一个视图,该视图仅公开那些与查询视图的用户的USER值相匹配的行。视图上的“代替”触发器可以使用USER函数来控制DML。

create view Sample as
select col_1, col_2, col3
from   Sample_Table
where  Data_Owner = USER;

对于应用用户而言,只使用提供应用用户名的UDF或USER(如果没有用户名)。当然,具体细节取决于您维护应用用户名的方式。