Oracleデータベースでは、複数のユーザーが異なる表領域(tablespace)を使用する環境も珍しくありません。システムの規模が大きくなると、表領域ごとにアクセス権限を明確に分離して管理したいというニーズも高まります。
本記事では、表領域単位でユーザーの操作を制限するための基本的な考え方と、ユーザー・ロール・権限を使った分離運用の方法について解説します。
Oracleで表領域単位のアクセス制御が必要な理由
表領域ごとのアクセス制御を行う目的は、次のようなものがあります。
- 部門ごとのデータを分離して管理したい
- 開発・検証・本番のデータを物理的に分けたい
- 運用管理者と利用者の役割を分けたい
Oracleでは表領域そのものにアクセス制御機能は存在しないため、ユーザーの作成と権限付与を工夫して「表領域を実質的に制限」する設計が求められます。
表領域とユーザーの紐付け方法
Oracleでは、ユーザーごとにデフォルト表領域を設定できます。ユーザーがオブジェクトを作成した場合は、基本的にこのデフォルト表領域に格納されます。
CREATE USER user_a IDENTIFIED BY password
DEFAULT TABLESPACE ts_sales
TEMPORARY TABLESPACE temp;
GRANT CONNECT, RESOURCE TO user_a;
このように定義することで、user_a
がテーブルなどを作成した際は、自動的にts_sales
表領域が使われるようになります。
不要な表領域へのアクセスを制限する方法
ユーザーが別の表領域にオブジェクトを作成できないようにするには、以下の対策を講じるのが一般的です。
クォータ制限を使う
QUOTAを明示的に与えた表領域以外ではオブジェクトを作成できません。
-- 使用許可を与える
ALTER USER user_a QUOTA 100M ON ts_sales;
-- 他の表領域には許可しない
ALTER USER user_a QUOTA 0 ON ts_hr;
CREATE ANY TABLEなどの権限を与えない
管理者権限やシステム権限を過剰に付与すると、他の表領域にも影響を与えられるため、最小権限の原則を徹底します。
ロールを活用して管理を効率化する
ユーザーが増えてくると、ロール(ROLE)を用いて権限セットを一括管理する方法が有効です。
-- ロールの作成
CREATE ROLE sales_role;
-- 必要な権限の付与
GRANT CREATE TABLE, CREATE VIEW TO sales_role;
-- ロールをユーザーに付与
GRANT sales_role TO user_a;
このようにしておけば、他のユーザーにも同様のロールを付与するだけで、管理が統一できます。
運用上の注意点
- ユーザーが自ら
TEMPORARY TABLESPACE
やUNDO TABLESPACE
を操作できないようにする - 不要なPUBLIC権限を確認・制限する
- 監査機能(AUDIT)を組み合わせて操作履歴を記録する
まとめ
Oracleでは表領域ごとに明示的なアクセス制御機能は備わっていませんが、ユーザーの作成時にデフォルト表領域やQUOTAを適切に設定することで、表領域単位の分離運用を実現できます。
ロールや権限管理を組み合わせることで、システム全体のセキュリティと運用効率を両立させることが可能です。開発・検証・本番の区別や部門別運用にも応用できるため、設計段階でのポリシー策定が重要になります。