我在一个oracle DB中有一个模式作为ui_prod。我要求我的数据库管理员团队创建与ui_prod完全相同的模式,但它是只读的,并将其命名为ui_prod_readonly。通常我会使用Oracle SQL developer来连接数据库,并直接使用表名进行查询,如下所示。
--Connect to ui_prod
select * from table但为什么当查询他们为我创建的只读模式时,我要求将所有者姓名放在前面,因为如果不放,我得到的错误表不存在。
--Connect to ui_prod_readonly
select * from ui_prod.table我有项目文件,其中硬编码的sql查询只与表名和添加所有者名称在前面将导致许多变化和努力。有人能给我解释一下吗?或为我提供任何文档/链接以供阅读。谢谢
发布于 2016-07-19 18:08:47
您应该查看同义词,显然您连接到数据库的用户不是对象的所有者。因此,要查看对象,必须在名称前面加上模式名称(对象本身的所有者)。
http://www.techonthenet.com/oracle/synonyms.php
CREATE OR REPLACE SYNONYM ui_prod_readonly.synonym_name
FOR ui_prod.object_name 在我看来,您的dbas并没有创建另一组表,而只是将现有的表授予了用户ui_prod_readonly。
发布于 2016-07-19 19:06:03
当您登录到Oracle时,当前方案是您用于登录的用户名。因此,如果您使用Oracle登录,如果您没有使用所有者(= schema )限定该表,则ui_prod_readonly将检查该表模式。
如果要更改当前模式,以便不需要对表进行完全限定,则可以使用ALTER SESSION进行更改
alter session set current_schema = ui_prod;完成此操作后,不需要使用所有者(=schema)完全限定该表。
发布于 2017-07-24 23:44:47
如果您只需要用户读取数据,那么只需创建新用户并授予它select权限
您可以使用以下命令创建用户并授予select权限
CREATE USER [user] IDENTIFIED BY [your_password];
grant select on table to [user]https://stackoverflow.com/questions/38455403
复制相似问题