0

我正在使用 oracle 和 php 创建一个用于分配的数据库,我必须展示角色的使用。我创建了一个名为employee 的新角色并将其分配给一个名为employee1 的新用户

CREATE ROLE read_only;
GRANT create session TO read_only;
GRANT select ON workson TO read_only;
GRANT select ON employee TO read_only;
GRANT select ON project TO read_only;
GRANT select ON department TO read_only;

CREATE ROLE employee;
GRANT read_only TO employee;
GRANT update ON employee TO employee;
GRANT insert ON workson TO employee;

Create user employee1 identified by qwerty1;
GRANT employee TO employee1;

为什么在以employee1 连接时使用任何选择说没有这样的表。select * from employee 表示没有表。我的角色是错误的还是什么?

4

1 回答 1

2

你的赠款似乎很好。假设employee1用户不拥有该employee表,您需要将您的表名限定为表SELECT的所有者。例如,如果我们谈论的employee是用户拥有的表hr,您需要

SELECT *
  FROM hr.employee;

如果你不想限定你的表名,你有几个选择。首先,您可以创建同义词。employee1您可以在仅适用于employee1用户的架构中创建私有同义词

CREATE SYNONYM employee
   FOR hr.employee;

或者您可以创建一个适用于所有用户的公共同义词

CREATE PUBLIC SYNONYM employee
   FOR hr.employee;

第二个选项是current_schema在连接后设置。

ALTER SESSION SET current_schema=hr;

如果您有适当的同义词或设置了current_schema,则不必在表名前加上表的所有者。

于 2012-05-20T02:29:12.827 回答