如何实现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 数据库:如何限制用户只能看到他/她自己的数据?

如何查看oracle数据库里面,用户自己创建的所有用户还有表空间

如何查看oracle 用户权限

oracle数据库创建实例

如何查看oracle的日志文件

[精]Oracle VPD详解(虚拟专用数据库)