5

状況は、user1 が user2 に許可を与えることです。

GRANT CREATE ANY TABLE, SELECT ANY TABLE TO user2;

そしてuser2にログオンした後、テーブルを作成しようとしています:

CREATE TABLE user1.test(id NUMBER PRIMARY KEY);

その結果ORA-01031 - insufficient privileges 、独自のスキーマでテーブルを作成し、他のスキーマからテーブルを選択できます。CREATE ANY TABLEこれで問題は解決すると思いましたが、違うようです。ああ、両方のユーザーに無制限のテーブルスペースがあります。他に何を保証すればよいですか?

4

3 に答える 3

6

おそらく、あなたも付与する必要がありCREATE ANY INDEXますか?主キーを追加すると、インデックスが作成されます。これは、PK 制約を省略して簡単にテストできます。

于 2013-03-03T18:28:01.583 に答える
4

「任意のテーブルの作成」は、非 DBA に付与するには強力すぎる権限です。より良いアプローチは、必要な DDL のサニタイズされたコンポーネントを受け入れるターゲット スキーマに「テーブルの作成」プロシージャを作成し、必要なユーザーにその実行権限を付与することです。

適切なインターフェースは次のようなものです...

create procedure
  create_table(
    table_name varchar2,
    columns    varchar2,
    etc        varchar2)

...できるように...

begin
  user1.create_table(
    table_name => 'TEST',
    columns    => 'id NUMBER PRIMARY KEY',
    etc        => '');
end;

...そして、プロシージャにDDLを構築して実行させます。

于 2013-03-03T18:51:42.240 に答える