关于权限设置的一个小把戏(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 的情况。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法