oracle 如何实现一个table,每个用户进行查询看到的结果不同;只有管理员可以看到所有的内容
比如说:system用户(或sys)创建了一个表 test;
hr,scott,oe 等非dba权限的用户分别进行多次insert操作
scott用户执行 select * from 该表test;(注意没有where条件)只能看见自己dml后的结果,不能看到hr用户执行DML后的数据,只能update ,delete 自己的数据,
hr用户执行 select * from 该表test;(注意也没有where条件)也只能看见自己dml后的结果,不能看见scott用户的操作,只能update ,delete 自己的数据,
sys或system用户 select * from test; 能看见所有用户DML后的操作,
除sys或system用户外,所有的用户都不能drop table test ;只有sys或system才能drop table test
请问 如何实现上述问题,该用 oracle的什么技术实现??
创建一个视图,视图中查询这张表并带上where 操作者=user or user='SYS',然后程序里都改用这个视图。
至于增删改操作,可以使用视图触发器来操作
可以试一下临时表,两个会话不会相互影响,不知道对你有没有用
这个问题很好解决,当前最好的做法是将sql解析成语法树,然后根据你的逻辑改写sql,最后执行sql。
当前最好的工具是druid-parser,支持常用的数据库SQL
我认为,您应该需要这份资料:https://www.cnblogs.com/yzqm666/p/5886925.html
这是一份关于oracle的权限控制方面的资料,对于您的这个需求,我并不是很理解,如果不是必要的话,我还是推荐您分开建表,这样更安全些,效率也会更高,如果您非要这样使用的话,我推荐您在字段后面加一个权限字段,假设为a,根据每个用户执行的命令,去分开处理,如,管理员使用select * from test;时,实际代码为select * from test and a = '1';像是这样字,另一个用户可能就是=2,=3这样子,我们在他执行之前给他在sql命令后面加上一段关于权限的查找,算是有些自欺欺人,不过应该可以解决您的问题,不过,我还是推荐您分开建表。
如果我解决了您的问题,请您点击采纳,如果没有的话,请在下方留言,我会继续帮您解答
Oracle的表是属于用户的 每个用户都有自己的Schema (默认是当前用户名) 在程序里控制Schema 就会生成 select * from 用户名.表名
比如 用户zhangsan 就会生成 select * from zhangsan,test 这样应该就实现了你的需求
如果我解决了您的问题,请您点击采纳,如果没有的话,请在下方留言,我会继续帮您解答。