如何实现oracle数据库用户只能查看自己的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现oracle数据库用户只能查看自己的数据相关的知识,希望对你有一定的参考价值。
select*
from
dba_users;
查看数据库里面所有用户,条件是你是有dba权限的帐号,如sys,systemselect
*
from
all_users;
查看你能管理的所有用户!select
*
from
user_users;
查看当前用户信息
!select
count(*)
from
dba_users;查看数据库里面用户数望采用! 参考技术A 默认都是用户只能看自己的,
只要不给用户赋予select
any
table
,select
any
view,dba这些权限大的权限和角色就行; 参考技术B Oracle用户权限表管理方式,:
一、创建
sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,默认未解锁
sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,默认未解锁
二、
登陆
sqlplus
/
as
sysdba;//登陆sys帐户
sqlplus
sys
as
sysdba;//同上
sqlplus
scott/tiger;//登陆普通用户scott
sqlplus
/
as
sysdba;//登陆sys帐户
sqlplus
sys
as
sysdba;//同上
sqlplus
scott/tiger;//登陆普通用户
设置好各个用户的权限就行了。需要其他设置方法见百度。
Oracle 数据库:如何限制用户只能看到他/她自己的数据?
【中文标题】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数据库用户只能查看自己的数据的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 数据库:如何限制用户只能看到他/她自己的数据?