例如,我有一个这样的表:
+-----------------------------+
| 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>也是。
答案 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(如果没有用户名)。当然,具体细节取决于您维护应用用户名的方式。