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。当然,具体细节取决于您如何维护应用用户名。
例如我有一个 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。当然,具体细节取决于您如何维护应用用户名。