ロールを使うと、リレーショナル・データベースのユーザーに対する権限の付与や取り消しが簡単になります。各ユーザーごとに権限を個別に管理するのではなく、ロールごとに権限を管理し、そのロールが割り当てられているすべてのユーザーに変更内容が反映されます。組織は、それぞれの固有のニーズに合わせて複数のロールを作成することがよくあります。
しかし、ほとんどのデータベースには、PUBLIC という事前定義されたロールが付属しています。このブログでは、Oracle における PUBLIC ロールの意味と、使用する際の重要なベストプラクティスを解説します。
Oracle における PUBLIC ロールとは?
PUBLIC ロールは、すべてのデータベース ユーザーが作成時に暗黙的に継承する特別なロールです。Oracle 11g のドキュメントでは、PUBLIC ロールはすべてのデータベース ユーザーからアクセス可能であり、そのため PUBLIC ロールに付与されたすべての権限とロールは、すべてのデータベース ユーザーからアクセス可能であるとされています。管理者は、特定のユーザーに対して PUBLIC ロールを付与する、または取り消すコマンドを発行できますが、これらのコマンドには実質的な効果はありません。ユーザーは常にこのロールを持ち続けます。
なお、DBA_ROLES ビューには PUBLIC ロールが表示されない点は興味深いです:
SQL> SELECT * FROM DBA_ROLES WHERE ROLE =’PUBLIC’;
no rows selected
しかし、SYS.USER$ テーブルをクエリすると PUBLIC が存在することが分かり、その type# 値が 0 であることから、それがロールであることが示されます:
SQL> SELECT user#, type#, name FROM SYS.USER$ WHERE type# = 0 ORDER BY 1;
すべてのデータベース ユーザーに対する PUBLIC ロール割り当てが暗黙的であることは、次の例からわかります。PUBLIC ロールに CONNECT 権限を付与すると、新しいユーザーに対して明示的に権限を付与しなくても、その権限が継承されるようになります。
SQL> CREATE USER bob IDENTIFIED BY MyPassword;
SQL> conn bob/MyPassword;
PUBLIC ロールのベストプラクティス
PUBLIC ロールは、ユーザーの権限管理に使用すべきではありません。言い換えると、これらの権限やロールを現在のすべてのデータベース ユーザー、および将来作成される可能性のある新しいユーザーにも付与する意図がある場合を除き、PUBLIC に対して権限やロールを割り当てないでください。
実際に、PUBLIC ロールに対して権限やロールを直接付与することは、指摘事項 として分類されます。これは国防情報システム局(DISA)によるものです。DISA Security Technical Implementation Guide(STIG)の脆弱性 ID V-61435 では、データベースまたはシステムの権限を PUBLIC に付与してはならないとしています。また V-61443 では、アプリケーション ロールの権限を PUBLIC に割り当ててはならないとしています。
なぜそうなるのかを理解するには、いくらかの前提知識が必要です。コンテナ データベース(CDB)またはプラガブル データベース(PDB)の環境には、「共通ロール(common roles)」と「ローカル ロール(local roles)」という考え方があります。CDB では、共通ロールはルートで作成され、現在および将来のすべてのコンテナに認識されます。PDB 環境では、ローカル ロールは特定の PDB に対してローカルです。定義されている PDB の中でのみ使用できます。
ただし、Oracle のマルチテナント環境では、ロールはもう少し複雑になります。デフォルトでは、Oracle が PUBLIC ロールに付与するすべての権限が、ローカルかつ一般的に付与されます。Oracle によると、権限は PUBLIC に通常の方法で付与してはなりません。言い換えれば、ルートまたは CDB で PUBLIC ロールにいかなる種類の権限も付与しないでください。各 CDB 内で PUBLIC ロールを個別に変更することは可能ですが、必要な場合を除き、そのような対応は推奨されません。
PUBLIC ロールに対してユーザーが付与した権限は、悪影響を伴わずに取り消すことができます。ただし、データベース作成の一環として PUBLIC ロールに付与されたデフォルト権限を取り消す場合は注意が必要です。これらの権限は、将来のアップグレードやパッチ適用の際に再付与される可能性があるためです。
PUBLIC ロールを含む、すべての Oracle のロールと権限を列挙するのに役立てるためには、Netwrix StealthAUDIT のようなサードパーティ製のソリューションへの投資を検討してください。これは、標準機能だけで詳細な権限(entitlement)レポートを作成できます。
共有する
もっと詳しく
著者について
Kevin Joyce
プロダクトマネジメント担当ディレクター
Netwrix のプロダクトマネジメント担当ディレクター。Kevin はサイバーセキュリティに情熱を持ち、特に攻撃者が組織の環境を悪用するために用いる戦術や手法を理解することに注力しています。Active Directory と Windows のセキュリティに焦点を当てたプロダクトマネジメントでの 8 年の経験を通じて、その情熱を活かし、組織がアイデンティティ、インフラ、データを保護できるようなソリューションの構築を支援しています。