日期:2014-05-17  浏览次数:22078 次

oracle 用户授权问题,提示授权成功,但是还是访问不到表
用system账号创建A用户,然后用A用户创建表(N个)

用system账号创建B用户,然后授权A的一个表的查询权限给B,提示授权成功,没有报错也没有警告

但是用B连接数据库之后还是查询不到这个表(提示表或者视图不存在)

这是怎么回事呢?











分割广告线
————————————————————————————————————————————






























------解决方案--------------------
要用A.表名进行查询,因此表属于A不属于B的

或者你定义同义词才可不加owner(A)进行查询

------解决方案--------------------
还要在B用户建立A用户表的同义词
或者select * from A.表名;
------解决方案--------------------
探讨
引用:

要用A.表名进行查询,因此表属于A不属于B的

或者你定义同义词才可不加owner(A)进行查询


非常感谢,另问:如何对连接账号(非owner授权Owner表的增删查改权限),是用sql生成授权的脚本再执行吗?

------解决方案--------------------
应该没有的吧,没听说过,借用下网上的
select 'grant select,insert,update,delete on A.' || table_name || ' to B;' from 
user_tables;
用spool命令保存执行结果,然后将执行结果copy至sqlpplus执行就可以了


------解决方案--------------------
一个表的读写权限批量的授权给另外一个用户是什么意思?

一个表的读写权限就是insert,update,delete,你的意思是想把这个表上面包含的所有权限都给授权给另外一个用户吗?
------解决方案--------------------
只能从user_table中读取到所有的表明,然后grant对象权限
或者直接sys用户grant一个select any tables的权限,不过这样B用户不止能访问A,其他任何用户的表都能访问了
------解决方案--------------------
Database、User、Schema、Tables、Col、Row等之间的关系

“可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了。
然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床, User就是每个Schema的主人(所以Schema包含的是Object,而不是User)。
其实User是对应与数据库的(即User是每个对应数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间。还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了”

------解决方案--------------------
用b用户查询A用户创建的表时要加上b用户才可以查询。。。。
select * from a.表名