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を使用すると、そのようなテーブルがないと表示されるのはなぜですか。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;

2番目のオプションはcurrent_schema、接続後にを設定することです。

ALTER SESSION SET current_schema=hr;

適切なシノニムが設定されている場合、またはを設定している場合はcurrent_schema、テーブル名の前にテーブルの所有者を付ける必要はありません。

于 2012-05-20T02:29:12.827 に答える