`
mikixiyou
  • 浏览: 1098692 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353057
社区版块
存档分类
最新评论

如何实现Oracle中用户B只能访问用户A的视图

阅读更多

我们有这样一个需求:在数据库中建立两个用户,用户 A 用于创建一些视图,直接访问自己数据库中一个模式下的表,以及通过数据库链路访问其他数据库中的表;另一个用户 B 能访问到这个用户 A 中的视图,并且只能访问视图,且访问连接数有限制。

 

miki 西游的文档,原文链接 http://mikixiyou.iteye.com/blog/1543530

 

这个用户 B 是用来给其他系统访问的,因此对权限和资源使用都需要有限制条件。

这种需求在很多行业的应用中都很常见。假如这是一道面试题,您该如何去回答呢?

我采用下面的方法来回答这个问题。

 

第一步,创建新用户 A B

这里用户名称分别为 ryd_interface_src  ryd_interface ,对这两个用户都授予非常有限的权限。

drop user ryd_interface_src cascade;

create user ryd_interface_src identified by ryd_interface_src;

grant connect,create view to ryd_interface_src;

 

drop user ryd_interface cascade;

create user ryd_interface identified by ryd_interface;

grant connect,create synonym to ryd_interface;

 

第二步,登录数据库一个模式中,授权给用户 A ,使得用户 A 能创建视图

conn xxyyclient/xxyyclient

grant select on INVEST_CLOCK  to ryd_interface_src with grant option;

grant select on INVEST_LOG   to ryd_interface_src with grant option;

这里授权方法加了一个 with grant option ,请注意。

 

第三步,登录数据库用户 A 中,创建视图

conn ryd_interface_src/ryd_interface_src

create or replace view run_views as

select id as doc_id, title,fbsj as upload_date,'' as branch_code from xxyy.runs_lantern@CLIENT_XXYYWEB

where EXT1='1' and sysdate >  START_TIME

and sysdate < SOLID_TIME

union

select a.doc_id,a.title,a.upload_date,a.branch_code  from xxyy.cms_doc_single_attr@CLIENT_XXYYWEB a

left   join xxyy.cms_doc_category_map@CLIENT_XXYYWEB b on a.doc_id=b.doc_id

where

a.state =1 and a.is_delete =0

and  a.upload_date> sysdate-90

and  b.cat_id=4;

 

create or replace view INVEST_CLOCK_VIEWS as

select  *  from  xxyyclient.INVEST_CLOCK;

 

create or replace view INVEST_LOG_VIEWS as

select  *  from  xxyyclient.INVEST_LOG;

 

第四步,在数据库用户 A 中,将视图查询权限授予给用户 B

因为在步骤二中,加了 with grant option ,所以这里视图查询权限可以成功授予。

grant select on INVEST_CLOCK_views to ryd_interface;

grant select on INVEST_LOG_views to ryd_interface;

grant select on run_views to ryd_interface;

 

第五步,在数据库用户 B 中,检查视图能否查询得到,再创建同义词。

conn ryd_interface/ryd_interface

select count(*) from ryd_interface_src.run_views;

select count(*) from ryd_interface_src.INVEST_CLOCK_views;

select count(*) from ryd_interface_src.INVEST_LOG_views;

 

create synonym  run_views for  ryd_interface_src.run_views;

create synonym  INVEST_CLOCK_views for  ryd_interface_src.INVEST_CLOCK_views;

create synonym  INVEST_log_views for  ryd_interface_src.INVEST_log_views;

第三方的系统直接通过这个同义词就可以访问到用户 A 中的视图。这也是对系统安全的一种保护措施。第三方系统登录后,只能看到其同义词,其他的都不会访问得到。

 

第六步,限制资源使用

因为用户 B 是给第三方系统使用,我们无法控制第三方应用的质量,为了防止在应用出现异常连接时数据库会话数暴涨导致数据库整体服务出现故障,所以我们对该用户的数据库会

话数做一个限制。

这里采用 profile sessions_per_user 功能,实现单个用户会话数的限制。

conn / as sysdba

alter system set resource_limite=true scope=both sid='*';

新建 profile, 初始限制为 1 ,用于测试。

create profile third_user limit SESSIONS_PER_USER 1 FAILED_LOGIN_ATTEMPTS unlimited;

alter user ryd_interface profile third_user;

将会话数调整到 30

alter profile third_user limit SESSIONS_PER_USER 30;

 

通过以上操作,我们就可以实现这个需求了。

 

再想一下,这个实现方法真的完全满足要求了吗?

请见下文: Oracle用户访问权限与 PUBLIC角色的关系 http://mikixiyou.iteye.com/blog/1546581

 

本文链接 : http://mikixiyou.iteye.com/blog/1543530 欢迎转载,请注明出处和作者,谢谢合作。

 

5
4
分享到:
评论
6 楼 datawarehouse 2012-07-26  
不错,感谢分享。
5 楼 mikixiyou 2012-05-29  
bullet100 写道
这样的需求我也遇到过,不错!

呵呵,谢谢鼓励!
4 楼 bullet100 2012-05-29  
这样的需求我也遇到过,不错!
3 楼 mikixiyou 2012-05-29  
wukele 写道
不错。为什么需要同义词。b用户不是只能访问指定的视图了吗

让用户B访问时,不用输入用户A.视图名称。
等于将用户A隐藏起来,减少一些技术还不熟练的好奇者的窥视。
2 楼 mikixiyou 2012-05-29  
让用户B访问时,不用输入用户A.视图名称。
等于将用户A隐藏起来,减少一些技术还不熟练的好奇者的窥视。
1 楼 wukele 2012-05-29  
不错。为什么需要同义词。b用户不是只能访问指定的视图了吗

相关推荐

    ORACLE中一个用户操作另一个用户的某些表 oracle同义词

    例如,用户 A 有一个表 a,用户 B 需要访问该表,可以在用户 B 下创建一个同义词 a,指向用户 A 的表 a。这样,用户 B 就可以使用同义词 a 来访问用户 A 的表 a。 在实现同义词的过程中,需要 grant 权限给用户 B,...

    Oracle查询用户锁表

    Oracle 查询用户锁表是指在 Oracle 数据库中查询当前用户锁定的表,以便诊断和解决锁表问题。本文档将详细介绍如何查询用户锁表,并提供相关的代码。 一、查询用户锁表的必要性 在 Oracle 数据库中,锁表是指用户...

    oracle中将一个用户的所有表的权限授予另一个用户的方法

    在Oracle数据库管理中,权限管理是一项至关...总之,通过PL/SQL环境下的脚本编写,可以高效、批量地实现Oracle数据库中用户权限的管理,但同时也需要谨慎处理可能遇到的各种异常情况,以确保数据库的安全与稳定运行。

    Oracle数据字典和动态性能视图

    - **数据字典视图**:数据字典视图是基于数据字典基本表构建的视图,它们为用户提供了一个更友好、更易于理解的方式来访问数据字典中的信息。数据字典视图通常分为三类: - **USER_XXX**:仅显示当前用户拥有或...

    Oracle创建视图(View)

    WITH READ ONLY :默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不...

    oracle 视图、索引(自用)

    4. 安全性:视图可以限制用户对基础表的访问权限,只允许他们查看和操作所需的数据。 5. 动态视图:动态视图(MATERIALIZED VIEW)会定期或按需刷新,提供即时的数据视图,适用于报表和分析场景。 二、Oracle索引 1...

    Oracle创建用户语句

    这条语句授予了用户`A`创建表、视图、序列等资源的权限。 #### 三、设置默认表空间 为了确保用户能够存储数据,需要为用户设置一个默认表空间。这可以通过以下命令实现: ```sql ALTER USER username DEFAULT ...

    oracle 创建视图

    3. **安全性**:通过视图可以实现细粒度的访问控制,例如可以为不同的用户授予对不同视图的访问权限,从而限制他们对敏感数据的访问。 4. **维护成本**:随着业务的发展,可能需要对视图进行修改或替换。使用`CREATE...

    oracle按用户导入导出数据

    ### Oracle按用户导入导出数据:详细...通过以上步骤,可以在Oracle数据库中实现按用户级别的数据导入导出操作,这对于数据迁移、备份恢复等场景具有重要意义。在整个过程中,细致的数据准备和权限管理是成功的关键。

    oracle数据库应用技术期末考试试题(A,B卷)

    概念数据模型主要用于理解用户需求,而结构数据模型直接描述数据库中的数据逻辑结构。 2. 结构数据模型的类型:包括层次模型、网状模型、关系模型以及面向对象模型。SQL数据库,如Oracle,是基于关系模型建立的,它...

    oracle第13讲使用视图、索引、序列和同义词[定义].pdf

    - **限制数据访问**:通过视图,可以限制用户只能看到和修改他们被授权的数据列,提高了数据安全性。 - **简化复杂查询**:对于复杂的多表查询,可以通过创建视图来简化查询过程,使查询更加直观。 视图根据其...

    oracle数据库 视图和索引

    2. 安全性:通过视图,可以限制用户访问特定的数据,实现数据的访问控制。 3. 动态聚合:视图可以预定义一些聚合操作,如计数、分组等,简化查询。 4. 重用查询:视图可以作为查询的基础,避免重复编写复杂的SQL语句...

    oracle物化视图资料

    通过深入理解Oracle物化视图的原理和特性,可以有效利用这一强大工具来优化数据库性能,特别是在处理大数据量和复杂查询的场景下,物化视图能显著提升查询速度,减少系统负载,为用户提供更佳的数据访问体验。...

    Oracle数据库_实例_用户_表空间之间的关系.doc

    - **LHBZZY**用户同样在自己的表空间中创建了表a、表b、表c。这些表的数据也将随机存储在一个或多个数据文件中。 值得注意的是,尽管不同用户可以在同一个表空间中创建同名表,但实际上通过用户名来区分不同的表。 ...

    查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)

    Oracle数据库中的用户是具有特定权限的角色,用于组织数据的访问。每个用户都有自己的命名空间,与其他用户的对象相互独立。创建新用户后,可以分配不同的权限和角色,以控制他们对数据库资源的访问。 **表和视图**...

    oracle_11gR2_09 视图 VIEW 的介绍(

    在Oracle 11g Release 2版本中,视图(VIEW)是一种强大的数据库对象,它提供了对表数据的另一种访问方式。视图可以被看作是存储在一个表上的查询,或者说是虚拟表,它们并不实际存储数据,而是保存了查询语句。视图...

    ora-01720 授权选项对于'xxxx'不存在的解决方法

    通过以上步骤,用户C现在可以正常访问视图`V_B`了。需要注意的是,如果未来C用户也需要将这些权限传递给其他用户,则B用户在最初接收权限时也需要包含WITH GRANT OPTION。 #### 注意事项 - **WITH GRANT OPTION的...

    Oracle8i 数据库中B-tree索引的维护

    在Oracle数据库中,B-tree索引是一种常用的索引类型,特别是在Oracle8i版本中。B-tree索引基于二叉树数据结构,能够高效地支持等值查找、范围查找和排序操作。这种索引的主要特点是其分层结构,使得数据访问速度较快...

    Oracle一个用户如何访问其它用户的表应用指南

    在Oracle数据库环境中,不同用户之间的数据隔离是默认的,每个用户只能访问他们自己的对象,如表、视图等。然而,有时需要一个用户(用户A)能够访问另一个用户(用户B)的数据。本文将深入探讨如何使用户A能够访问...

    03oracle 用户管理

    13. 用户权限的层次结构:Oracle支持权限的继承,如果用户A被赋予了角色B,而角色B拥有某些权限,那么用户A也就间接拥有了这些权限。 14. 默认权限:新创建的用户通常只具有连接数据库的权限,其他权限需要根据需求...

Global site tag (gtag.js) - Google Analytics