※ 本記事は、Russ Lowenthalによる”Schema-level privilege grants with Database 23c“を翻訳したものです。

2023年6月30日


多くの最新のアプリケーションでは、データ所有スキーマと、そのデータへのアクセスに使用されるアプリケーション・サービスまたはランタイム・アカウントを分離しています。このスキーマは、職務の分離と最小特権モデルを提供し、アクセス・アカウントが危険にさらされた場合のリスクを低減するのに役立ちます。ただし、このリストはどのように管理しますか。アプリケーション・スキーマが時間の経過とともに変化するにつれて、どのようにしてそのリストを最新の状態に保ちますか。

以前は、開発者は次のオプションを使用していました。:

  • アプリケーション・スキーマ内の各表およびビューに対する個別の権限を付与
  • ANY権限の付与: 任意の表の選択、任意の表の更新などを行います。

1つ目の選択肢は、すべての表またはビューを識別し、すべてのランタイムまたはサービス・ユーザー権限を個別に付与する必要があるため、不便な場合があります。スクリプトを作成することもできますが、それは余計なステップです。このオプションは、新しい表やビューを追加するようなアプリケーション・スキーマの変更に対処するための最適な方法ではありません。これでは、対応する権限付与を忘れずに行う必要があるためです。また、このような詳細リストの視覚化および検証も大変な場合があります。

ユーザーにデータベース内のすべての表から選択する権限を付与できるため、ANY権限を付与する2番目の選択肢は、セキュリティ角度から最適ではありません。このユーザー・アカウントが危険にさらされると、データベース全体が危険にさらされる可能性があります。

Oracle Database 23cから救出まで

これに対処するために、Oracle Database 23cでは新しいスキーマ・レベルの付与が導入されています。GRANT SELECT ANY TABLE ON SCHEMA HR TO BOBの場合、そのユーザーはHRスキーマのすべての表およびビュー(HRスキーマ内のみ)を表示できます。スキーマに新しい表が追加された場合、その新しい表には即時にアクセスできます。追加の管理は不要で、職務を適切に分離した最小限の権限のセキュリティ・モデルを引き続きサポートします。

A gif showing the old process of granting privileges to a user versus the new process with 23c.

ユーザーは、特別な権限がなくても、独自のスキーマに対するスキーマ・レベルの権限を付与できます。他のユーザーのスキーマに対するスキーマ・レベルの権限を付与するには、GRANT ANY SCHEMAまたはGRANT ANY PRIVILEGEシステム権限のいずれかが必要です。

付与されているスキーマ権限を確認するには、DBA_SCHEMA_PRIVSビューを使用します。ROLE_SCHEMA_PRIVS、USER_SCHEMA_PRIVSおよびSESSION_SCHEMA_PRIVSビューを使用することもできます。

まとめ

今すぐ試してみてください。Oracle Database 23c Freeが利用可能になりました。質問や提案がある場合は、Database 23cの無料フォーラムに参加してください。

この機能を説明するスクリプト・チュートリアルについては、GitHubのSchemaPrivilegesを参照してください。