Oracle 数据库:如何限制用户只能看到 his/her 自己的数据?

Oracle Database: how to restrict a user to see only his/her own data?

例如我有一个 table 这样的:

                 +-----------------------------+
                 |        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'|
+-----------------------------+

限制每个用户只能访问(选择-更新-删除)his/her 数据的好方法是什么? (所有用户都可以插入数据,但我让他们只能查看或修改他们的数据)。感谢您的回答和指导。 注意: 我的意思是 Database users 但如果有人给出解决方案,我们将不胜感激application users也是。

向 USER 函数填充的 table 添加一个 Data_Owner 字段。不允许直接访问 table。所有访问都是通过一个视图进行的,该视图仅公开那些与查询视图的人的 USER 值匹配的行。 "instead of" 视图上的触发器可以使用 USER 函数来控制 DML。

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

对于应用程序用户,只需使用提供应用程序用户名或用户名(如果没有)的 UDF 而不是 USER。当然,具体细节取决于您如何维护应用用户名。