同义词的重要性,而不是授予对象的访问权限

时间:2014-10-30 14:34:20

标签: plsql

假设我的部门架构中有员工表,并且我想授权销售部门从中选择数据。在这种情况下,同义词的重要性是什么,因为我可以通过向特定用户组授予权限来实现。

1 个答案:

答案 0 :(得分:1)

考虑department.employees是你的桌子。

您已通过从部门架构执行以下语句,已授予sales用户的选择权限。

grant select on employees to sales;

此声明仅赋予用户/架构sales的选择权限。

但是当用户sales尝试执行以下语句时,

select * from employees;

他将收到以下错误,

ERROR at line 1: 
ORA-00942: table or view does not exist

因为employees架构中不存在sales表。它位于department架构中。

如果用户sales尝试执行以下语句,

select * from department.employees;

他会得到结果。

但是,在引用department表的每个查询中为employees模式名称添加前缀是一种开销,大多数开发人员都不会喜欢这样做。这就是同义词的帮助。

department用户通过以下语句为department.employees创建同义词

create public synonym employees for department.employees 

然后sales用户就可以在employees表上运行select查询,而不会在架构名称前加上department

注意:

  1. 这里我创建了一个public同义词。如果省略同义词创建语句中的public,则同义词对于模式是私有的。但是,同义词和表名不能相同。
  2. 创建不同类型的同义词需要一些权限。要了解有关详情,请查看Orale Documentation