我正在使用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表示没有表格。我的角色错了吗?
答案 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
,则不必将表名称作为表格所有者的前缀。