Oracle Databaseでは、ユーザーがテーブルを操作したり、特定の機能を利用したりするために権限管理が必要になります。その権限を別のユーザーへ付与するときに利用される代表的なSQL文がGRANTコマンドです。
GRANTでは、単純な操作権限だけでなく、複数の権限をまとめたロールも付与できます。この記事では、OracleにおけるGRANTコマンドの基本的な使い方や、ユーザー権限とロールの違い、具体的な記述例について解説します。
OracleのGRANTコマンドでできること
OracleのGRANTコマンドは、ユーザーやロールに対して権限を与えるためのSQL文です。例えば、あるユーザーにテーブルの参照権限や更新権限を付与するといった操作ができます。
基本的な構文は以下の形式です。
GRANT 権限名 ON オブジェクト名 TO ユーザー名;
例えば、USER_AというユーザーにEMPLOYEEテーブルの参照権限を与える場合は、以下のように記述します。
GRANT SELECT ON EMPLOYEE TO USER_A;
このSQLを実行すると、USER_AはEMPLOYEEテーブルのデータを検索できるようになります。
GRANTでユーザーに権限を付与する方法
Oracleでは、テーブルやビューなどのデータベースオブジェクトに対する権限をユーザーへ直接付与できます。代表的な権限にはSELECT、INSERT、UPDATE、DELETEなどがあります。
| 権限 | できる操作 |
|---|---|
| SELECT | データの検索 |
| INSERT | データの追加 |
| UPDATE | データの更新 |
| DELETE | データの削除 |
例えば、ユーザーTEST_USERにCUSTOMERテーブルへの検索と更新を許可する場合は、以下のように指定します。
GRANT SELECT, UPDATE ON CUSTOMER TO TEST_USER;
このように複数の権限をカンマ区切りで指定することも可能です。
GRANTでロールをユーザーへ付与することも可能
GRANTコマンドは、個別の権限だけではなくロールの付与にも利用できます。ロールとは、複数の権限をまとめたグループのようなものです。
例えば、データベース管理用の権限をまとめたロールをユーザーへ付与する場合は、以下のように記述します。
GRANT ロール名 TO ユーザー名;
例として、CONNECTロールをUSER_Aへ付与する場合は以下になります。
GRANT CONNECT TO USER_A;
ロールを利用すると、多数のユーザーへ同じ権限セットを効率よく配布できます。企業のデータベース運用では、ユーザーごとに権限を設定するよりもロール管理を利用するケースが一般的です。
システム権限とオブジェクト権限の違い
Oracleの権限には大きく分けて「システム権限」と「オブジェクト権限」の2種類があります。
オブジェクト権限は、特定のテーブルやビューなどに対する操作権限です。例えば、特定テーブルへのSELECT権限などが該当します。
一方、システム権限はデータベース全体の操作に関係する権限です。例えば、ユーザー作成やテーブル作成などの操作が含まれます。
システム権限を付与する場合は、以下のように記述します。
GRANT CREATE TABLE TO USER_A;
この例では、USER_Aがテーブルを作成できる権限を取得します。
GRANTを使用するときの注意点
GRANTによる権限付与は便利ですが、必要以上の権限を与えるとセキュリティ上のリスクになります。
例えば、アプリケーション用ユーザーにデータベース管理者レベルの権限を与えると、誤操作や不正アクセス時の影響範囲が大きくなります。
実際の運用では、「そのユーザーが必要とする最低限の権限だけを付与する」という最小権限の考え方が重要です。
また、権限を削除したい場合はREVOKEコマンドを使用します。
REVOKE SELECT ON EMPLOYEE FROM USER_A;
GRANTで与えた権限を適切に管理することで、安全なOracle Database環境を維持できます。
まとめ
OracleのGRANTコマンドを利用すると、ユーザーへ個別の権限を付与したり、複数の権限をまとめたロールを付与したりできます。
テーブル操作権限を与える場合は「GRANT SELECT ON テーブル名 TO ユーザー名」のように指定し、ロールを付与する場合は「GRANT ロール名 TO ユーザー名」の形式を使用します。
GRANTはOracleの権限管理における基本的なSQL文ですが、適切な権限設計と組み合わせることで、安全で管理しやすいデータベース運用が可能になります。

コメント