PL / SQLを実行するアプリケーション開発者のOracleでの作業


13

Oracleのスキーマレベルの権限の欠如をどのように処理しますか?オラクルのセキュリティアーキテクチャは、オブジェクトレベルの権限のみを必要とするアプリケーションに適しています。また、制限をほとんど必要としないDBAにも適しています。ただし、フロントエンドアプリケーションと複数のスキーマのPL / SQLを使用して開発を行うプログラマにとって、アーキテクチャには大きなギャップがあるようです。以下に、私のオプションとその欠点をいくつか示します。

  1. 各プログラマーが独自のスキーマで開発を行うようにします。DBAは、それらを必要とするプログラマーにオブジェクトレベルの特権を付与します。パッケージ開発はすべてDBAが行う必要があります。主な欠点は、プログラマーがデータベースのパフォーマンスを損なうために、少しバケットのようにデータベースを使用することです。プログラマーにデータベースで開発してほしいのですが、この方法では大いに落胆します。

  2. 各プログラマーに開発に必要な12個程度のスキーマのユーザー名/パスワードを与えます。これらのアプリケーションスキーマにプロシージャ、テーブルなどを作成するためのアクセス許可を与えます。このアプローチの欠点のいくつかは、複数のログイン自分自身としてログインすることはほとんどありません。クロススキーマ開発も困難です。

  3. プログラマーが開発に必要な各スキーマのプロキシ認証特権を付与します。これにより、プロキシ権限以外の権限を付与する必要なく、ユーザーは自分自身としてログインしたままになります。欠点には、プロキシするスキーマごとに個別の接続を維持する必要があるプログラマーが含まれます。接続を絶えず変更する必要があるため、クロススキーマ開発はより面倒です。また、認証に合格したパブリックデータベースリンクを使用するパッケージは、プロキシ接続内でコンパイルされません。

  4. 各プログラマにDBA特権を付与します。–ここでの欠点はセキュリティです。スキーマプログラマーをスキーマから締め出すことはできず、プログラマーは他のプログラマー(DBA)になりすますことができます。

各プログラマーにSELECT / INSERT / CREATE / etcを付与するオプションがないようです。開発を行うために必要なスキーマに対する権限。自分でログインして、1つの接続を使用して作業を行います。アクセスできるスキーマ内の新しいオブジェクトはすぐに使用できます。

何か不足していますか?PL / SQL開発を行うアプリケーションプログラマをどのように扱いますか?


3
+1の大きな質問-これは、統合されたソース管理の欠如と相まって、マルチ開発者環境におけるOracleの主要な問題です。
-ScottCher

回答:


11

私がOracleショップで働いていた頃、特定の「開発」(開発)サーバーがあり、「プロ」(運用)サーバーとは異なるセキュリティ制限がありました。開発者は必要なことを何でも行うことができ、必要なスクリプトをDBAに渡して、運用サーバーに適用します。

クリティカルシステム(クラスおよび学生の追跡用のSCTバナー、およびOracle Financials)の場合、「テスト」および「シード」サーバーもありました。テストは、devからprodに移行する前のユーザー受け入れテスト用でした。「シード」はソフトウェアの標準インストールであるため、バグを見つけた場合、それが導入されたものであるか、SCTまたはOracleのソフトウェアからのものであるかを確認できます。


+1開発者は汎用データベースを使用して、非常に多様なプロジェクトに取り組んでいます。そのため、最小特権の原則では、開発サーバーにさえ完全にアクセスすることはできません。(en.wikipedia.org/wiki/Principle_of_least_privilege
リーRiffel

@リー-私はおそらく明確にすべきでした...開発サーバーは、#4ではなく、ほとんどの部分であなたが持っているものの下に落ちました
ジョー

1
ProductionからDEVデータベースのクローンを作成した後、開発者が制限なしで作業できるようにするための複雑な許可を覚えています。最終的には、各開発者に独自のデータベースおよびDBAアクセス権を付与する方が簡単でした。次に、リリースサイクルを介して変更をDevにフィードします。仮想化により簡単になります。
-Sumnibot

@Sumnibot-権限を付与するよりも、開発者ごとに個別のデータベースの保守、バックアップなどをインストールする方が簡単です!?!これらをそれぞれ最新の状態に保つのに必要な時間に加えて、ライセンスコストがかなり高いように思われますか、またはエンタープライズバージョンを提供しませんでしたか?
リーリッフェル

1
具体的な答えは含まれていません。
マイケルO

3

ロールを使用してオブジェクトのコレクションを関連付け、ロールへのアクセスを許可します

GRANTの文は、DBAにすることができます:

ユーザー、ロール、およびPUBLICに対する特定のオブジェクトのオブジェクト特権。表18-2に、オブジェクト権限と、それらが許可する操作を示します。

オブジェクト特権をロールに付与できるため、スキーマ内のすべてのテーブルへのロールアクセスを比較的簡単に付与できます。

sql>スプールprivs.sql
sql> select 'scottでの選択を許可する' || table_name || ' role_select; ' owner = 'SCOTT'のdba_tablesから。
sql> @ privs.sql
sql> john、sam、peterにrole_selectを付与します。

これはGRANT CREATE TABLE、適切なスキーマユーザーがロールに対して発行することと組み合わせて、開発者がテーブルを選択して作成できることを意味します。作成されたテーブルではスクリプトの再実行が必要ので完全ではありませんがWITH GRANT OPTION、各開発者は作成したテーブルへのアクセスを適切なロールに許可することをお勧めします。

これは、適切な付与プロセスを実行できるDDLレベルトリガーを作成できることを示唆しています。明らかに大量のテストが必要になりますが、create tableステートメントが適切なロールに適切な権限を自動的に付与できるようにする必要があります。

編集-

GRANTによると、CREATE TABLE特権:

権限受領者のスキーマに表を作成します。

したがって、正しいユーザーからテーブルの作成、テーブルの変更などを行うことにより、適切なユーザーであるかのようにそのユーザーのスキーマにアクセスできるようになります。


あなたが参照する方法論は、あまり成功せずに試みたことがあります。ただし、広範囲のテストで実行できることは正しいと思います。問題は、これは開発者がテーブルの選択アクセスのみを許可することです。直接またはロールを介してテーブルの作成を許可すると、自分のスキーマに対するテーブルの作成権限のみが付与されます。彼らはまだテーブル、プロシージャ、パッケージ、トリガー、または自分以外のスキーマで他のオブジェクトを作成できませんか、または開発時にも自分のスキーマでのみオブジェクトを作成する必要があるという点ですか?
リーリッフェル

@Leigh詳細を更新しました。
ブライアンボールサンスタントン

これは、Oracleの仕組みではありません。これを試してください:「ThisIsMy1Password」で識別されるユーザーu1を作成します。「ThisIsMy1Password」で識別されるユーザーu2を作成します。u1にdbaを付与します。u2への接続を許可します。connect u1 / "ThisIsMy1Password" @db; createテーブルをu2に付与します。connect u2 / "ThisIsMy1Password" @db; createテーブルu1.t1(c1 varchar2(10)); 最後のステップは、不十分な特権で失敗します。
リーリッフェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.