DBA只读帐户

时间:2016-07-19 10:05:27

标签: sql oracle database-administration

我在一个oracle DB中有一个架构为ui_prod。我让我的DBA团队成员创建了与ui_prod完全相同的模式,但是只读,并将其命名为ui_prod_readonly。通常我会使用Oracle SQL开发人员连接数据库并直接查询表名,如下所示。

--Connect to ui_prod
select * from table

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

--Connect to ui_prod_readonly
select * from ui_prod.table

我有项目文件,只使用表名对sql查询进行硬编码,并在前面添加所有者名称将导致许多更改和努力。任何人都可以解释我吗?或者提供任何文件/链接阅读。感谢

3 个答案:

答案 0 :(得分:1)

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

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。

答案 1 :(得分:1)

当您登录Oracle时,当前架构是您用于登录的用户的名称。因此,如果您使用ui_prod_readonly登录,Oracle会检查该表的架构如果您没有使用所有者(= schema)限定它。

如果您想更改当前架构,以便不需要完全限定表格,可以使用ALTER SESSION

执行此操作
alter session set current_schema = ui_prod;

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

答案 2 :(得分:1)

如果您需要用户只读取数据 它很容易创建新用户并仅授予它选择权限

您可以使用

创建用户和授予选择权限
CREATE USER [user] IDENTIFIED BY [your_password];
grant select on table to [user]