1

Oracle DB に読み取り専用ユーザー A を作成しました。(スキーマ X にアクセスできるが、何も変更できない人) 次に、ユーザー A にスキーマ X に対するテーブル作成権限を付与するよう求められます。

ただし、私の知る限り、ユーザー A にcreate any table特権を与えるか、 create table 特権を与えることができます。1 つは自分のスキーマでテーブルを作成するためのもので、もう 1 つはすべてのスキーマでテーブルを作成するためのものですが、これは推奨されません。

そのため、ユーザー A にcreate any table権限を付与し、ユーザー A が X 以外のスキーマでテーブルを作成できないようにするトリガーを作成しました。

ただし、ユーザー A としてトリガーを作成する必要がありましたが、A が所有者であるため、ユーザー A はそのトリガーを簡単に削除できます。ユーザー A が所有者であっても、ユーザー A がトリガーをドロップしないようにする方法はありますか?

私が経験した限りでは、トリガーはすでに自分のものであるため、ユーザー A はトリガーを削除したり、データベーストリガー権限を管理したりする必要はありません。

これに対する回避策はありますか? または、他のスキーマでテーブル作成権限を付与する別の方法を探す必要があります。

前もって感謝します。

4

1 に答える 1

2

いいえ、ユーザーが所有するオブジェクトを削除するのを防ぐ方法はありません。

また、「ANY」権限の付与を開始しない限り、ユーザー A がユーザー X のスキーマにオブジェクトを作成することを直接許可する方法もありません。

考えられる回避策の 1 つは、ユーザー X のスキーマにストアド プロシージャを作成し、ユーザー X のスキーマにオブジェクトを作成し (即時実行)、そのストアド プロシージャに対する EXECUTE 権限をユーザー A に付与することです。

したがって、このようにして、ユーザー A は次のようなことができます。

exec create_in_x_schema('create table blah(a number)');

そして、そのプロシージャは、渡された文字列に対してすぐに実行するだけです。

A procedure that looks something like:
create or replace procedure create_in_x_schema(doit varchar2)
begin
  execute immediate doit;
end;
/

するべきです。

(コードはテストされていませんが、いくつかのアイデアが得られるはずです。)

それが役立つことを願っています。

于 2012-04-20T13:14:53.577 に答える