Oracle 数据库:如何限制用户只能看到他/她自己的数据?
Posted
技术标签:
【中文标题】Oracle 数据库:如何限制用户只能看到他/她自己的数据?【英文标题】:Oracle Database: how to restrict a user to see only his/her own data? 【发布时间】:2015-01-02 04:58:07 【问题描述】:例如我有一个这样的表:
+-----------------------------+
| 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'|
+-----------------------------+
限制每个用户仅访问(选择-更新-删除)他/她的数据的好方法是什么? (所有用户都可以插入数据,但我让他们只能查看或修改他们的数据)。感谢您的回答和指导。
注意: 我的意思是 Database users
但如果有人也为 application users
提供解决方案,我们将不胜感激.
【问题讨论】:
您需要具体说明是application
用户还是database
用户?
你好@LalitKumarB,我的意思是“数据库”用户,但如果我也想知道“应用程序”用户的最佳方式,我现在就编辑帖子
除非您将输入数据的用户存储在表中,否则您以后无法将其过滤掉。所以你必须在表中添加一个“所有者”列
检查 Oracle 功能:Virtual Private Database。但是,这也要求您的数据包含@a_horse_with_no_name 指出的哪个用户输入了数据。
【参考方案1】:
将 Data_Owner 字段添加到由 USER 函数填充的表中。不允许直接访问表。所有访问都通过一个视图,该视图仅公开与查询该视图的用户的 USER 值匹配的那些行。视图上的“instead of”触发器可以使用 USER 函数来控制 DML。
create view Sample as
select col_1, col_2, col3
from Sample_Table
where Data_Owner = USER;
对于应用用户,只需使用提供应用用户名或 USER(如果没有)的 UDF 代替 USER。当然,具体细节取决于您维护应用用户名的方式。
【讨论】:
感谢这个Idea,这个机制我以前看过,但是没审核也没关注,反正谢谢你的回答。以上是关于Oracle 数据库:如何限制用户只能看到他/她自己的数据?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 隐藏数据库并限制用户只能看到一个视图对象