4

私はかなり新しいプロジェクトに参加しており、Oracle 11g データベース テーブルの設計をまだ変更しています。そのため、変更を行うたびにテーブル作成スクリプトが期待どおりに機能することを確認するために、かなり頻繁にテーブルを削除して再作成します。

私たちのデータベースは 2 つのスキーマで構成されています。INSERT1 つのスキーマには、データが 2 番目のスキーマのテーブルに時々コピーされる原因となるトリガーを持ついくつかのテーブルがあります。これには、次のような管理者アカウントでデータベースにログインし、最初のスキーマから 2 番目のスキーマの必要なテーブルにアクセスする必要がありますsysdbaGRANT

GRANT ALL ON schema_two.SomeTable TO schema_one;

私たちの問題は、データベースの設計を変更し、データベース テーブルを削除して再作成するたびに、テーブルが削除されたときにアクセスできなくなってしまうことですGRANTschema_oneしたがって、これによりGRANT、これらのテーブルの 1 つが削除されて再作成されるたびに、管理者アカウントでログインして再アクセスする必要があるという、別の厄介な手順が作成されます。

これは大したことではありませんが、開発とテストの手順からできるだけ多くのステップを削除したいと考えています. テーブルが削除されてから再作成された後も -ed パーミッションが存続するGRANTような方法でテーブルにアクセスする方法はありますか? GRANTこれが不可能な場合、これを行うためのより良い方法はありますか?

4

5 に答える 5

7

したがって、許可が取り消される理由は、新しいテーブルが別のオブジェクトであるためです。

SQL> select object_id from user_objects
  2  where object_name = 'T72'
  3  /

 OBJECT_ID
----------
    659195

SQL> drop table t72
  2  /

Table dropped.

SQL> create table t72 (id number)
  2  /

Table created.

SQL> select object_id from user_objects
  2  where object_name = 'T72'
  3  /

 OBJECT_ID
----------
    659212

SQL>

付与は、オブジェクトの名前ではなく、オブジェクトに対して行われます。

あなたの問題について私が理解していないのはこれです: のテーブルを削除して再作成するプロセスがありますschema_two。そのプロセスが、これらのテーブルに対する付与権限も に付与しないのはなぜschema_oneですか? 代わりに管理者アカウントを持っているのはなぜですか? schema_twoDROP ステートメントと CREATE ステートメントを実行するために接続していると思います。そのステップに GRANT ステートメントを追加してみませんか?

オブジェクトに対する特権の付与は、テーブルの作成と同じくらいインストールの一部であるためです。したがって、すべてを行うプロセスが必要です。

于 2010-05-25T02:31:45.037 に答える
5

select any table、などを schema_one に付与することもできますがinsert any table、それはやり過ぎのようであり、本番環境で行っていることを (うまくいけば) 反映しません。schema_two としてログインしているときに、テーブルの作成と同時に許可を発行できないのはなぜですか? 私は常に作成スクリプトでそれを行ってきましたが、管理者アカウントを使用してサードパーティまたはシステム特権を付与するだけで済みました. 私は何かが欠けていると思う...

于 2010-05-24T22:28:49.693 に答える
3

ALTER TABLE ステートメントで処理できないことを何をしていますか?

次善の策は、ときどき消えるテーブルを参照するビューを作成することです。ビューは消えません。そのような状況でテーブルが存在しない場合は、エラーが発生するだけです。いいえ:

CREATE VIEW table_vw AS
  SELECT t.* 
    FROM DISAPPEARING_TABLE t

* 表記を使用すると、テーブル内の列を公開するためにビューを継続的に更新する必要がないことも意味します。

于 2010-05-24T22:25:22.660 に答える
1

テーブルの作成に使用するアカウントに、権限付与も実行できるようにすることをお勧めします。

共有してお楽しみください。

于 2010-05-25T11:57:25.907 に答える
1

権限を自動的に付与する DDL トリガーまたは数分ごとに実行されるバッチ ジョブを使用できます。しかし、これはちょっとしたセキュリティ ホールであり、本番環境を表すものではありません。

于 2010-05-24T22:48:04.800 に答える