ASP.NETもしくはXML Webサービスを利用した3層アプリケーションでは、通常中間層から共通のユーザーでデータベースに接続しますが、これでは個々のユーザーごとにデータベースへのアクセス制御や監査は行えません。プロキシ認証を利用すると、接続のためのユーザーは共有しますが、データベースのアクセス権限などは、個々のユーザーごとに実施することが可能になります。
Visual Studio .NETでプログラミングする前に、データベース上でプロキシ認証を利用するための設定が必要になります。データベースの設定に関しては、下記のスクリプトをダウンロードし、SQL*Plusなどのツールから実行してください。
スクリプトを実行すると、以下のユーザーが作成されます。
ユーザー名 | 説明 |
---|---|
custuser | テーブルなどオブジェクトを所有しているユーザー |
custproxy | データベースに接続するためのプロキシユーザー |
staff | custuserが所有しているオブジェクトに対して参照権限のみ付与されたユーザー |
manager | custuserが所有しているオブジェクトに対して参照/更新権限が付与されたユーザー |
表4 スクリプトによって作成されるユーザー |
ASP.NETからプロキシ認証を利用して接続するには、以下のような接続文字列を使用します。
Dim cnn As New OracleConnection |
リスト9 プロキシ認証を使用して接続するサンプルコード(VB.NET) |
OracleConnection cnn = new OracleConnection(); |
リスト10 プロキシ認証を使用して接続するサンプルコード(C#) |
それでは、staffユーザーで更新を行ってみます。
Dim cnn As New OracleConnection |
リスト11 プロキシ認証を行ってcustomerテーブルを更新するサンプルコード(VB.NET) |
OracleConnection cnn = new OracleConnection(); |
リスト12 プロキシ認証を行ってcustomerテーブルを更新するサンプルコード(C#) |
staffユーザーはcustomerテーブルに対してSELECT権限しかないので、以下のようなエラーが出力されます。
次にmanagerユーザーに変更し、customerテーブルに対して更新処理を行ってみます。リスト11/リスト12のConnnectionStringを以下のように修正して実行します。
User Id=manager;Password=manager;Data Source=orcl; |
managerユーザーでは正常に更新されるのが確認できると思います。このようにプロキシ認証を行うと、データベースの権限をアプリケーションで享受可能になります。データベースで認証された利用者でなければデータへのアクセス権限がないので、より安全な接続環境を実現できます。
また、データベース・ユーザーごとに監査を行うことが可能になります。Oracleのセキュリティに関する情報は、OTN(Oracle Technology Network)の「Documentation Library」で詳細な手順を説明していますので、そちらを参照してください。
今回のサンプルではstaffユーザーでアクセスする際に、OracleのエラーがそのままWebフォーム上に表示されていますが、実際のアプリケーションではエラー情報を取得して適切に対処する必要があります。その場合は、OracleExceptionクラスを利用します。OracleExceptionで提供される、メンバー/メソッド/プロパティの一覧は、OTNの「Oracle Data Provider for .NET開発者ガイド」にて詳細に説明してありますので、そちらを参照してください。(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.