在Oracle上授予角色

时间:2012-05-20 02:16:31

标签: php oracle roles

我正在使用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表示没有表格。我的角色错了吗?

1 个答案:

答案 0 :(得分: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,则不必将表名称作为表格所有者的前缀。