对table1建2个视图,将2个视图的权限分别授予user1,user2 表中添一个user字段,比如user1添加的记录,user字段值为1,user2则为2 授权视图table1_1给user1:select * from table1 where user=2; table1_2给user2:select * from table1 where user=1
给表添加以个字段用于区分是哪个用户添加的记录,然后根据这个字段的值建两个视图。 [TEST@ora10gr1#2009-11-20/08:15:28] SQL>create table test(user_name varchar(20),infor varchar(10));Table created.[TEST@ora10gr1#2009-11-20/08:16:42] SQL>create or replace view test_test01 as 2 select * from test where user_name='test01' 3 with check option;View created.[TEST@ora10gr1#2009-11-20/08:17:45] SQL>create or replace view test_test02 as 2 select * from test where user_name='test02' 3 with check option;View created.[TEST@ora10gr1#2009-11-20/08:17:53] SQL>grant all on test_test01 to test01;Grant succeeded.[TEST@ora10gr1#2009-11-20/08:18:12] SQL>grant all on test_test02 to test02;Grant succeeded. test01用户数据插入方法:[TEST01@ora10gr1#2009-11-20/08:24:10] SQL>insert into test.test_test01 values(user,'test01数据');1 row created. test02用户数据插入方法:[TEST02@ora10gr1#2009-11-20/08:25:21] SQL>insert into test.test_test02 values(user,'test02数据');1 row created. 只能想出这个方法满足你的要求了,如果你必须要求表名一样在数据库层面上想不出什么办法了,只有在应用程序中,人为的加 where 条件 限制了。
表中添一个user字段,比如user1添加的记录,user字段值为1,user2则为2
授权视图table1_1给user1:select * from table1 where user=2;
table1_2给user2:select * from table1 where user=1
对表的用户数据进行权限控制,这也太细了,自己做控制应该可以,在表里标志是谁增加的,在PLSQL里判断了,期待更好解决方案
[TEST@ora10gr1#2009-11-20/08:15:28] SQL>create table test(user_name varchar(20),infor varchar(10));Table created.[TEST@ora10gr1#2009-11-20/08:16:42] SQL>create or replace view test_test01 as
2 select * from test where user_name='test01'
3 with check option;View created.[TEST@ora10gr1#2009-11-20/08:17:45] SQL>create or replace view test_test02 as
2 select * from test where user_name='test02'
3 with check option;View created.[TEST@ora10gr1#2009-11-20/08:17:53] SQL>grant all on test_test01 to test01;Grant succeeded.[TEST@ora10gr1#2009-11-20/08:18:12] SQL>grant all on test_test02 to test02;Grant succeeded.
test01用户数据插入方法:[TEST01@ora10gr1#2009-11-20/08:24:10] SQL>insert into test.test_test01 values(user,'test01数据');1 row created.
test02用户数据插入方法:[TEST02@ora10gr1#2009-11-20/08:25:21] SQL>insert into test.test_test02 values(user,'test02数据');1 row created.
只能想出这个方法满足你的要求了,如果你必须要求表名一样在数据库层面上想不出什么办法了,只有在应用程序中,人为的加 where 条件 限制了。
补充一点:
创建视图的时候where user_name='test01'后面的【'test01'】名要大写,测试完后,忘记修改了,抱歉。
一开始想法是如果user1增加了一条记录,那么是不是日志里有这样的记录,通过调用日志来确定只有user1来修改或者删除该记录。我觉得ORACLE应该能做到吧,只是我不知道怎么做而已。table1建2个视图,还不如两个表,对这两个表建一个视图。