关于权限设置的一个小把戏(r2第27天)

现在有一个需求,需要开放一些"特殊“的权限给开发组。 具体的背景是这样的: 有三个数据库用户,tabowner, tabconn, tab_temp三个用户 tableowner是owner用户,里面存放着表,索引,序列,存储过程等。 tabconn是一个连接用户,在这个用户里面建立了一些同义词,可以直接通过这个用户来进行数据的增删改查。 tab_temp是一个临时的连接用户,通过这个用户只能查询一些有限的信息,不能进行数据的改动。而且不能执行select sequence_name.nextval from dual这样类型的语句,避免人为干扰sequence的增长。 现在的问题是,因为没有开放select on sequence的权限给tab_temp,所以通过tab_temp无法查询到tabowner里的sequence信息。 举个简单的例子。 --tabowner创建一个视图,从user_sequence里面查询当前schema中的sequence信息,得到的结果是实时的。 SQL> create view a as select *from user_sequences; View created. --里面有198条记录 SQL> select count(*)from a; COUNT(*) ---------- 198 如果我尝试把视图访问的权限赋予tabconn,那么是否可以通过tabconn访问到tabowner中的user_sequences信息呢? SQL> grant select on a to tabconn; Grant succeeded. SQL> conn tabconn/tabconn Connected. SQL> select count(*)from tabowner.a; COUNT(*) ---------- 0 可以看到,这样是行不通的 不过可以做一个小把戏,使得权限的访问可以选择性的开放。通过dblink 目前tabconn可以访问all_sequences的信息,里面包含tabowner里的sequence信息 可以在tab_temp下创建一个db link,然后通过这个db link来做一些工作。 SQL> conn tab_temp/tab_temp Connected. SQL> SQL> create database link temp_link connect to tabconn identified by tabconnusing 'TESTDB'; Database link created. SQL> select count(*)from all_sequences@temp_link; COUNT(*) ---------- 230 可以看到能够查到数据了,不过如果足够细心的话,发现结果好像多了一点,按照我们的要求,指定查询的是tabowner下的sequence信息。 SQL> select count(*) from all_sequences@temp_link where sequence_owner='TABOWNER' 2 / COUNT(*) ---------- 197 这样就没有问题了。 创建视图 create view sequence_summary_v as select *from all_sequences@temp_link where sequence_owner='TABOWNER'; 直接暴露视图也不太好,可以通过同义词来进行屏蔽 SQL> select count(*)from sequence_summary; COUNT(*) ---------- 197 SQL> create synonym sequence_summary for sequence_summary_v; Synonym created. 这样对于开发来说,就能够查到实时的sequence信息了。而且也能够杜绝增长/修改sequence value 的情况。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cyhone的专栏

重新理解IO模型

本文试图理清楚几种IO模型的根本性区别,同时分析了为什么在Linux网络编程中最好要用非阻塞式IO?

3387
来自专栏高爽的专栏

增量接口的设计及实现

引言 在应用开发过程中,我们总会碰到这样的场景:某系统需要同步我们系统的数据去做一些业务逻辑,当数据量较小的时候,可以全量的提供,但当数据量很大时,全量提供就显...

2510
来自专栏desperate633

深入理解--异步和非阻塞同步和阻塞异步和非阻塞

异步和非阻塞的概念实际上已经出现了很长一段时间。但是异步真正开始流行起来,是因为AJAX技术逐渐成为主流的web开发技术。非阻塞的概念真正流行起来,是当java...

624
来自专栏鸿的学习笔记

关于数据库的一些学习笔记

一、锁、并发 一个很有趣的事实:容易理解的模型性能都不好,性能好的模型都不容易理解。(性能好,这就意味着锁的颗粒度很少,这样就需要更多的细节) 事务单元: 一个...

772
来自专栏Golang语言社区

【Go 语言,服务器模块】日志系统源码

后台服务器开发中,日志系统是针对运行的程序的检测,或者是后台统计功能的记录。 例如: 要求统计每日用户的访问量,可以通过统计日志的方式实现。 如下代码,自己...

3104
来自专栏Golang语言社区

高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non...

2656
来自专栏张善友的专栏

Entity Framework 4 的 POCO学习

Entity Framework 4的特性介绍可看这篇文章 .NET 4中Entity Framework简介,其中最感兴趣的一点就是对POCO的支持了:EF4...

1978
来自专栏cpp

缓存更新策略

问题:项目中,Redis用了缓存热点数据,持久化数据在MySQL DB中;那么Redis缓存数据什么时候更新呢?

890
来自专栏Java Edge

2018-08-02

hibernate执行更新需要较长时间,因此需要等待,否则无法获得更新后字段

802
来自专栏Java技术栈

什么是CPU密集型、IO密集型?

CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loadin...

5989

扫码关注云+社区