能为dblink创建同义词吗?--分散与统一的问题

来源:百度知道 编辑:UC知道 时间:2024/04/28 19:25:45
我现在的需求是这样的:
现在我有一个数据库实例:
里面有n个用户(各个用户都不能访问其他用户的数据),各个用户具有相同的数据库表结构(例如都有test表,且表结构完全一样)
但各个用户可以在表中存放不同的数据(也就是结构一致,内容不同),现在有一个管理用户,管理用户能操作所有其他用户下的数据。现在要实现这样:管理员用户创建一个公共的存储过程,可供所有的用户共同使用,但是各个用户在执行这条存储过程时只操作执行这个存储过程的用户自己的数据,而不影响到其他用户的数据

例如管理员用户创建这样一个存储过程:
create or replace procedure gettest( p_cursor in out types.mytype)
as
begin
open p_cursor for select name,gender,major,age from test order by id;
end;
各个用户执行的时候只返回他自己 test表里的结果集
请问怎么能实现?
非常感谢两位的回答:
我在这里补充说明
表的拥有者是属于各个一般用户的,因为存在相同的表,所以这些表不可能同属于dba对不对?否则表名就冲突了
这里我觉得这里有两个问题需要解决:
1.如何让所有的用户都能使用同一个存储过程
2.如何让存储过程在不同用户执行时操作不同的表(虽然表名相同,结构相同,但是却属于不同的schema,实质上是不同的表)?

想了半天,用了游标觉得没办法实现。
你可以到这里问问
http://www.itpub.net/forum-3-1.html
应该能得到你的答案

用一般的方法创建就行了.只给用户执行此存储过程的权限.前提是各用户表的所有者是用户自己而不是管理员。
如果所有表的所有者都是DBO的话建议更改为使用改表的用户.
这样由于如果存储过程和用户表的所有者不是同一权链.所以当存储过程对表进行操作的时候会检查用户是否有对该表的权限.