首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBA只读帐户

DBA只读帐户
EN

Stack Overflow用户
提问于 2016-07-19 18:05:27
回答 3查看 90关注 0票数 0

我在一个oracle DB中有一个模式作为ui_prod。我要求我的数据库管理员团队创建与ui_prod完全相同的模式,但它是只读的,并将其命名为ui_prod_readonly。通常我会使用Oracle SQL developer来连接数据库,并直接使用表名进行查询,如下所示。

代码语言:javascript
复制
--Connect to ui_prod
select * from table

但为什么当查询他们为我创建的只读模式时,我要求将所有者姓名放在前面,因为如果不放,我得到的错误表不存在。

代码语言:javascript
复制
--Connect to ui_prod_readonly
select * from ui_prod.table

我有项目文件,其中硬编码的sql查询只与表名和添加所有者名称在前面将导致许多变化和努力。有人能给我解释一下吗?或为我提供任何文档/链接以供阅读。谢谢

EN

回答 3

Stack Overflow用户

发布于 2016-07-19 18:08:47

您应该查看同义词,显然您连接到数据库的用户不是对象的所有者。因此,要查看对象,必须在名称前面加上模式名称(对象本身的所有者)。

http://www.techonthenet.com/oracle/synonyms.php

代码语言:javascript
复制
CREATE OR REPLACE  SYNONYM ui_prod_readonly.synonym_name
  FOR ui_prod.object_name 

在我看来,您的dbas并没有创建另一组表,而只是将现有的表授予了用户ui_prod_readonly。

票数 1
EN

Stack Overflow用户

发布于 2016-07-19 19:06:03

当您登录到Oracle时,当前方案是您用于登录的用户名。因此,如果您使用Oracle登录,如果您没有使用所有者(= schema )限定该表,则ui_prod_readonly将检查该表模式。

如果要更改当前模式,以便不需要对表进行完全限定,则可以使用ALTER SESSION进行更改

代码语言:javascript
复制
alter session set current_schema = ui_prod;

完成此操作后,不需要使用所有者(=schema)完全限定该表。

票数 1
EN

Stack Overflow用户

发布于 2017-07-24 23:44:47

如果您只需要用户读取数据,那么只需创建新用户并授予它select权限

您可以使用以下命令创建用户并授予select权限

代码语言:javascript
复制
CREATE USER [user] IDENTIFIED BY [your_password];
grant select on table to [user]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38455403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档