InterBase クイック スタート:Part V - アクセス権限

提供: InterBase

InterBase クイック スタート:Part V - 応用トピック へ戻る


このセクションは、重要なトピック「セキュリティ」への、本当に簡単な紹介にすぎません。 セキュリティの詳細については、『データ定義ガイド』のセクション「セキュリティの計画」を参照してください。

初期状態では、テーブルの作成者、テーブルの所有者、および、SYSDBA ユーザーのみが、テーブルへのアクセス権を持っています。 superuser もしくは root 権限を持つユーザーが存在する UNIX サーバー上では、これらのユーザーもすべてのデータベース オブジェクトへの権限を持っています。

他のユーザーには、GRANT 文を使って アクセス権限を割り当てることにより、テーブルを確認または変更する権限を与えることができます。 GRANT 文は、テーブルやビューへのアクセス権限を、特定のユーザー、ロール、プロシージャに対して割り当てます。 REVOKE 文は、先に与えたアクセス権限を削除します。

以下の表は、利用可能はアクセス権限のリストです:

権限 アクセス

ALL

SELECTDELETEINSERTUPDATE、および、REFERENCES

メモ: ALL には、EXECUTE 権限は含まれておりません。

SELECT

データの読み込み

DELETE

データの削除

INSERT

データの挿入

UPDATE

データの変更

EXECUTE

ストアド プロシージャの実行または呼び出し

REFERENCES

外部キーでの主キー参照

ROLE

そのロールに割り当てられたすべての権限

GRANT による権限の割り当て

GRANT 文は、1 つまたは複数の権限を、1 人または複数のユーザーに対して与えることができます。 それらの権限は、1 つまたは複数のテーブル全体に対して設定することもできますし、テーブルの特定の列に限定することもできます。 UPDATEREFERENCES の権限のみ、列レベルで割り当てることができます。

テーブル全体に対するアクセス権を与える

次の文では、department テーブルに対する権限を、一人のユーザーに与えます:

GRANT SELECT ON department TO emil

次の文は、department テーブルに対する 2 つの権限を、3 人のユーザーに割り当てます:

GRANT INSERT, UPDATE ON department TO emil, ravi, helga

全員に権限を与えるには、PUBLIC キーワードを使用します。 次の文は、Department テーブルに対する EXECUTE 以外のすべての権限を、データベースに接続したすべての者に与えます:

GRANT ALL ON department TO PUBLIC

列に対するアクセス権を与える

テーブル全体へのアクセスを許可する代わりに、テーブルの特定の列にだけアクセスを許可したい場合がよくあります。 次の文は、customer テーブルの contact および phone 列に対する UPDATE 権限を、すべてのユーザーに割り当てます:

GRANT UPDATE ON (contact, phone) ON customer TO PUBLIC

権限を取り消す

REVOKE 文は、テーブルやビューに対する、特定のユーザー、ロール、プロシージャのアクセス権限を、削除します。次の文は、前の例で Emil、Ravi、Helga に対して与えられた department テーブルに対する挿入、更新権限を、削除します。

REVOKE INSERT, UPDATE ON department FROM emil, ravi, helga

ロールを利用したセキュリティの制御

ロールは、権限の名前がつけられたグループです。

たとえば、企業が、営業社員に特定の権限のセットを、経理スタッフに別の権限のセットを与えたいと考えてるとしましょう。 いずれの場合にも、権限のセットは非常に複雑なものになります。 ロールがないと、営業や経理の新しい社員が企業に入ってくるたびに、長く煩雑な GRANT 文を使用しなければなりません。 それを、ロールを使用することで避けることができます。

ロールの実装は、4 ステップの処理で行います:

  1. ロールを定義する
    CREATE ROLE role_name
    
  2. 権限をロールに割り当てる
    GRANT privilege_list ON table_name TO role_name
    
    privilege_list = one OR more OF INSERT, UPDATE, DELETE, SELECT, REFERENCES, EXECUTE
    
    注意:
    EXECUTE は、常に、個別の文で割り当てられなければなりません。

    または

    GRANT [UPDATE],[REFERENCES] (col_name, [col_name 2, ...]) ON table_name TO role_name
    
  3. ロールをユーザーに割り当てる
    GRANT role_name TO user_name1, [user_name2, ...]
    
    これでユーザーが、role_name ロールに相当するすべての権限を持ちました。 しかし、これらの権限が利用できるようになるには、もう 1 ステップあります。 データベースに接続する際に、ロールを指定しなければなりません。
  4. データベースへ接続する際にロールを指定する
    TutorialRole1.png

Image 025.jpg アクセス制御にロールを使用する

先に進む前に、ここで作業をコミットしましょう。これにより、何かうまくいかなくなっても、この時点までロールバックすることができます。

この演習では、ロールを実装するための 4 つのステップすべてを行い、ロールをユーザーに割り当てます。

  1. サーバーからログアウトします。
  2. Tutorial データベースから切断します。
  3. サーバーに、ユーザー SYSDBA でログインします。
  4. 新しい ユーザーを作成します:
    • ユーザー名を CHRIS に設定。
    • パスワードを chris4ib に設定。
    このステップでヘルプが必要な場合には、「Part I - 新しいユーザーを作成する」を参照してください。
  5. Tutorial データベースにユーザー CHRIS で接続します(データベース > 名前を指定して接続... を使用)。
  6. 次の文を実行します:
    SELECT *
    FROM   Sales
    

    InterBase は、エラー プロンプトを表示します。これは、上の文の中で参照するテーブルのすべてが、ユーザー TUTOR に属するからです。ユーザー CHRIS には、このチュートリアルの間に作成したテーブルに対して、何かを行う権限がありません。

    TutorialRole2.png
  7. Tutorial データベースから切断し、TUTOR で再接続します。
  8. salespeople というロールを作成します。
    CREATE ROLE salespeople
    
  9. 次の GRANT 文を実行して、salespeople ロールに権限を割り当てます。
    GRANT SELECT, UPDATE, INSERT ON sales TO salespeople
    
    GRANT UPDATE (contact_first, contact_last, phone_no) ON customer TO salespeople
    
    GRANT salespeople TO chris
    
  10. Tutorial データベースから切断し、CHRIS で再接続します。 データベース接続 ダイアログで、salespeopleロールとして指定しなければなりません。
  11. ステップ 5 から、クエリを入力します。今度は、InterBase InterBase が Sales テーブルからすべての行を抽出してきます。なぜなら、ユーザー CHRIS が必要な権限を持つようになったからです。
    CREATE ROLE salespeople
    
  12. Tutorial データベースから切断し、TUTOR で再接続します。

次は: