ストアド・プロシージャ監査(SPA)を使用すると、ユーザーは、監視対象データベースのストアド・プロシージャに対する変更を監査および承認できます。Oracle Database Firewallは、スケジュールされた間隔でデータベース・サーバーに接続し、ストアド・プロシージャに対して行われた変更または追加があればそれを検出します。ストアド・プロシージャ監査は、Oracle、Microsoft SQL Server、MySQL、Sybase ASE、Sybase SQL AnywhereおよびIBM DB2 (Microsoft Windows、UNIXおよびLinux)データベースでサポートされています。
この章では、ストアド・プロシージャに対する変更をユーザーが監査できるように、Database Firewallで保護されたデータベースを構成する方法について説明します。監査の実行手順については、『Oracle Database Firewallセキュリティ・ガイド』を参照してください。
Oracleデータベース(Oracle Database 8iより後のすべてのリリース)のユーザー・アカウントを設定する手順は、次のとおりです。
Oracle Database Firewall製品のCD (Oracle Database Firewall Utilities 5.1
)から、スクリプトを実行するサーバーにdatabase
ディレクトリをコピーします。
このサーバーで、database/spa
ディレクトリに移動し、oracle
圧縮ファイルをoracle
というディレクトリ(推奨)に解凍します。
oracle
ディレクトリに移動して解凍したファイル(spa_setup.sql
)を確認し、その設定を理解します。
spa_setup.sql
スクリプトには、次の情報に関する設定が含まれています。
$(username)
は、ストアド・プロシージャ監査を担当するユーザー・アカウントです。このユーザー・アカウントは、ユーザー・ロール監査および直接データベース問合せ(DDI) (spa_auditor
など)用に指定したユーザー・アカウントとは異なるユーザー・アカウントにすることが理想的です。
$(password)
は、このユーザー・アカウントのパスワードです。
ユーザーの作成およびユーザー権限の設定を行う権限が付与されているユーザーとして、Oracle Databaseにログインします。
次に例を示します。
sqlplus sys/ as sysdba
Enter password: password
Connected.
SQL>
Oracle Database Vaultとともに使用するデータベースの場合は、DV_ACCTMGR
ロールが付与されたユーザーとしてログインします。
spa_setup
スクリプトを実行し、プロンプトに応答します。
次に例を示します。
SQL> @database/spa/oracle/spa_setup.sql username: as parameter 1: Enter value for 1: user_name password: as parameter 2: Enter value for 2: password
spa_setup.sql
スクリプトでは、ストアド・プロシージャ監査用のユーザー・アカウントに次の権限が付与されます。
CREATE SESSION
sys.dba_objects
およびsys.dba_source
システム表に対するSELECT
(オプション)このユーザー・アカウントを削除する必要がある場合には、spa_drop
スクリプトを実行します。
次に例を示します。
SQL> @database/spa/oracle/spa_drop.sql
username: as parameter 1:
Enter value for 1: user_name
Microsoft SQL Server (2000、2005または2008)データベースのユーザー・アカウントを設定する手順は、次のとおりです。
スクリプトを実行する場所がデータベース・サーバー(ローカル)なのか別のコンピュータ(リモート)なのかを決定します。
スクリプトを実行するコンピュータにsqlcmd.exe
ユーティリティがインストールされていることを確認します。
ストアド・プロシージャ監査を担当するデータベース・ユーザー・アカウントのユーザー名とパスワードを選択します。
このユーザー・アカウントとパスワードは、この手順の後半で作成します。
Oracle Database Firewall製品のCD (Oracle Database Firewall Utilities 5.1
)から、スクリプトを実行するサーバーにdatabase
ディレクトリをコピーします。
このサーバーで、database/spa
ディレクトリに移動し、sqlserver
圧縮ファイルをsqlserver
というディレクトリ(推奨)に解凍します。
sqlserver
ディレクトリに移動して解凍したファイルを確認し、その設定を理解します。
このスクリプトには、次の情報に関する設定が含まれています。
$(username)
は、ストアド・プロシージャ監査を担当するユーザー・アカウントです。このユーザー・アカウントは、ユーザー・ロール監査および直接データベース問合せ(DDI) (spa_auditor
など)用に指定したユーザー・アカウントとは異なるユーザー・アカウントにすることが理想的です。
$(password)
は、このユーザー・アカウントのパスワードです。
$(database)
は、監査対象データベースです。
ユーザーの作成およびユーザー権限の設定を行う権限が付与されたユーザーとして、SQL Serverデータベースに対してspa_add_user
スクリプトを実行します。
構文は、次のとおりです。
sqlcmd -S server_name -U sa -P sa_password -i spa_add_user.sql -v username="username
" password="password
"
詳細は、次のとおりです。
server_name
: 保護対象データベースが存在するデータベース・サーバーの名前またはIPアドレスを入力します。この引数を使用するのは、リモート・サーバーからスクリプトを実行する場合のみです。
sa
: システム管理者のユーザー名を入力します。
sa_password
: システム管理者のパスワードを入力します。
username
: スクリプトに$(username)
で指定された、ストアド・プロシージャ監査用に作成するユーザー・アカウントを入力します。このユーザー名は二重引用符で囲みます。
password
: スクリプトに$(password)
で指定された、ストアド・プロシージャ監査用のユーザー・アカウントのパスワードを入力します。このパスワードは二重引用符で囲みます。
次に、コマンドの例を2つ示します。(行が折り返していますが、1行のコマンドです。)
sqlcmd -U sa -P sa_password -i spa_add_user.sql -v username="spa_auditor" password="abcd1234" sqlcmd -S my_server -U sa -P sa_password -i spa_add_user.sql -v username="spa_auditor" password="abcd1234"
spa_add_db_permissions
またはspa_add_all_db_permissions
スクリプトを実行して、ユーザーに権限を付与します。
次の例はスクリプトをリモートで実行する方法を示していますが、スクリプトをローカルで実行する場合は、-S server_name
引数を省略します。
特定のデータベースに対する権限については、次の構文を使用します。
sqlcmd -S server_name -U sa -P sa_password -i spa_add_db_permissions.sql -v username="username" database="protected_database"
database="
protected_database
"
の設定は、次のようにします。
スクリプトに$(database)
で指定された、このサーバー内の監査対象データベースの名前を入力します。
このデータベース名は二重引用符で囲みます。
すべてのデータベースに対する権限については、次の構文を使用します。
sqlcmd -S server_name -U sa -P sa_password -i spa_add_all_db_permissions.sql -v username="username"
次に、コマンドの例を2つ示します。(行が折り返していますが、1行のコマンドです。)
sqlcmd -S my_server -U sa -P sa_password -i spa_add_db_permissions.sql -v username="jsmith" database="my_database" sqlcmd -S my_server -U sa -P sa_password -i spa_add_all_db_permissions.sql -v username="jsmith"
このスクリプトでは、ストアド・プロシージャ監査用のユーザー・アカウントに次の権限が付与されます。
バージョンが8よりも後の製品のsys.all_objects
およびdbo.syscomments
システム表に対するVIEW DEFINITION
およびSELECT
バージョンが8よりも前の製品のdbo.sysobjects
およびdbo.syscomments
に対するSELECT
(オプション)前述のユーザー権限を削除する必要がある場合には、spa_drop_db_permissions
またはspa_drop_all_db_permissions
スクリプトを実行します。
個々のデータベースの場合は、次の構文を使用します。
sqlcmd -S server_name -U sa -P sa_password -i spa_drop_db_permissions.sql -v username="username" database="protected_database"
すべてのデータベースの場合は、次の構文を使用します。
sqlcmd -S server_name -U sa -P sa_password -i spa_drop_all_db_permissions.sql -v username="username"
次に、コマンドの例を2つ示します。(行が折り返していますが、1行のコマンドです。)
sqlcmd -S my_server -U sa -P sa_password -i spa_drop_db_permissions.sql -v username="jsmith" database="my_database" sqlcmd -S my_server -U sa -P sa_password -i spa_drop_all_db_permissions.sql -v username="jsmith"
(オプション) SQL Serverデータベースからストアド・プロシージャ監査のユーザーを削除する必要がある場合には、spa_drop_user
スクリプトを実行します。
構文は、次のとおりです。
sqlcmd -S server_name -U sa -P sa_password -i spa_drop_user.sql -v username="username
" password="password
"
次に例を示します。
sqlcmd -U sa -P sa_password -i spa_drop_user.sql -v username="spa_auditor"
MySQLデータベースのユーザー・アカウントを設定する手順は、次のとおりです。
ユーザーの作成およびユーザー権限の設定を行う権限が付与されているユーザーとして、データベースにログインし、MySQLデータベースに対して次のコマンドを実行します。
create user 'username'@'hostname' identified by 'password'
username
にはストアド・プロシージャ監査のアカウント名を使用し、hostname
にはDatabase Firewallのホスト名を使用します。次に例を示します。
create user 'spa_auditor'@'10.155.56.2' identified by 'jj_1234'
次のコマンドを実行して、作成したユーザーに必要な権限を付与します。
grant select on mysql.proc TO 'username'@'hostname'
次に例を示します。
grant select on mysql.proc TO 'spa_auditor'@'10.155.56.2'
上のコマンドでは、ストアド・プロシージャ監査用のユーザー・アカウントに次の権限が付与されます: SELECT on the mysql.proc
system table。
(オプション) MySQLデータベースからストアド・プロシージャ監査のユーザーを削除する必要がある場合には、次のコマンドを実行します。
drop user 'username'@'hostname'
次に例を示します。
drop user 'spa_auditor'@'10.155.56.2'
Sybase ASEストアド・プロシージャ監査の場合、tempdb
データベースは生成された一時ファイルに対応できる大きさである必要があります。
tempdb
のサイズを確認するには、次の手順を実行します。
sp_helpdb
システム・ストアド・プロシージャを実行します。
sybsystemproc
およびtempdb
の各データベースについてdb_size
列を比較します。
tempdb
データベースは、sybsystemproc
と比較して少なくとも2、3MB大きい必要があります。
Sybase Adaptive Server Enterpriseのユーザー・アカウントを設定する手順は、次のとおりです。
Oracle Database Firewall製品のCD (Oracle Database Firewall Utilities 5.1
)から、スクリプトを実行するサーバーにdatabase
ディレクトリをコピーします。
このサーバーで、database/spa
ディレクトリに移動し、sybase
圧縮ファイルをsybase
というディレクトリ(推奨)に解凍します。
ユーザーの作成およびユーザー権限の設定を行う権限が付与されたユーザーとして、Sybase ASEデータベースに対してspa_add_user
スクリプトを実行します。
構文は、次のとおりです。
isql -S server_name -U sa -P sa_password -i spa_add_user.sql
詳細は、次のとおりです。
server_name
: この引数を使用するのは、データベースがリモートの場合のみです。サーバーまたはそのIPアドレスの名前を入力できます。スクリプトをローカルで実行する場合は、-S server_name
引数を省略できます。
sa
: システム管理者のユーザー名を入力します。
sa_password
: システム管理者のパスワードを入力します。
次に例を示します。
isql -U sa -P sa_password -i spa_add_user.sql isql -S my_server -U sa -P sa_password -i spa_add_user.sql
このスクリプトでは、デフォルトのストアド・プロシージャ監査ユーザーdbfw_spa_user
とデフォルトのパスワードdefaultpassword
が追加されます。このパスワードは後で変更することをお薦めします。
spa_add_db_permissions
スクリプトを実行して、このユーザーに権限を付与します。
構文は、次のとおりです。
isql -S server_name -U sa -P sa_password -i spa_add_db_permissions.sql
詳細は、次のとおりです。
server_name
: サーバーの名前またはそのIPアドレスを入力できます。データベースがリモートの場合は、引数として-S server_name
のみを使用します。
sa_password
: システム管理者のパスワードを入力します。
このスクリプトでは、ストアド・プロシージャ監査用のユーザー・アカウントに次の権限が付与されます。
dbo.sysdatabases
、dbo.sysobjects
およびdbo.syscomments
に対するSELECT
(オプション)前述の権限を削除する必要がある場合には、spa_drop_db_permissions
スクリプトを実行します。
構文は、次のとおりです。
isql -S server_name -U sa -P sa_password -i spa_drop_db_permissions.sql
(オプション) ストアド・プロシージャ監査のユーザーを削除する必要がある場合には、Sybase ASEデータベースに対してspa_drop_user
スクリプトを実行します。
構文は、次のとおりです。
isql -S server_name -U sa -P sa_password -i spa_add_user.sql
この項の内容は、次のとおりです。
Sybase SQL Anywhereを使用する前に、Linux用のSQL Anywhere ODBCドライバをインストールする必要があります。
Linux用のODBCドライバをインストールする手順は、次のとおりです。
Database Firewallサーバーにroot
ユーザーとしてログインします。
Sybase SQL Anywhereのインストール・メディアから、linux_x86_GA_sa1101_2044_l10n.tar.gz
をDatabase Firewallサーバー上の一時的な場所にコピーします。
このアーカイブ・ファイルを展開します。
tar zxvf linux_x86_GA_sa1101_2044_l10n.tar.gz
setup
ユーティリティを実行し、クライアントのインストールを開始します。
./setup
プロンプトが表示された場合は、次のインストールのみを選択します。3.Administration Tools
。
プロンプトが表示された場合は、/var/sqlanywhere11
ディレクトリにクライアントをインストールします。
Sybase SQL Anywhereのインストール・メディアから、sa11_full_linux_x86+x64.1101_2420_ebf.tar.gzをDatabase Firewallサーバーにコピーします。
このアーカイブ・ファイルを展開します。
tar zxvf sa11_full_linux_x86+x64.1101_2420_ebf.tar.gz
setup
ユーティリティを実行し、クライアントのインストールを開始します。
./setup
プロンプトが表示された場合は、/var/sqlanywhere11
ディレクトリへのインストールを選択します。
Sybase SQL Anywhereのユーザー・アカウントを設定する手順は、次のとおりです。
Oracle Database Firewall製品のCD (Oracle Database Firewall Utilities 5.1
)から、スクリプトを実行するサーバーにdatabase
ディレクトリをコピーします。
このサーバーで、database/spa
ディレクトリに移動し、sqlanywhere
圧縮ファイルをsqlanywhere
というディレクトリ(推奨)に解凍します。
sqlanywhere
ディレクトリに移動して解凍したファイル(spa_setup.sql
)を確認し、その設定を理解します。
spa_setup.sql
スクリプトには、次の情報に関する設定が含まれています。
$(username)
は、ストアド・プロシージャ監査を担当するユーザー・アカウントです。このユーザー・アカウントは、ユーザー・ロール監査および直接データベース問合せ(DDI) (spa_auditor
など)用に指定したユーザー・アカウントとは異なるユーザー・アカウントにすることが理想的です。
$(password)
は、このユーザー・アカウントのパスワードです。
ユーザーの作成およびユーザー権限の設定を行う権限が付与されたユーザーとして、SQL Anywhereデータベースに対してspa_setup.sql
スクリプトを実行します。
構文は、次のとおりです。
isql -S server_name -U sa -P sa_password -i spa_setup.sql -v username="username" password="password" database="protected_database"
詳細は、次のとおりです。
server_name
: この引数を使用するのは、データベースがリモートの場合のみです。サーバーまたはそのIPアドレスの名前を入力できます。スクリプトをローカルで実行する場合は、-S server_name
引数を省略できます。
username
: spa_setup.sql
スクリプトに$(username)
で指定された、ストアド・プロシージャ監査用に作成するユーザー・アカウントを入力します。このユーザー名は二重引用符で囲みます。
password
: spa_setup.sql
スクリプトに$(password)
で指定された、ストアド・プロシージャ監査用のユーザー・アカウントのパスワードを入力します。このパスワードは二重引用符で囲みます。
database="
protected_database
"
: spa_setup.sql
スクリプトに$(database)
で指定された、このサーバー内の保護対象データベースの名前を入力します。このデータベース名は二重引用符で囲みます。
次に例を示します。
isql -S my_server -U sa -P password -i spa_setup.sql -v username="spa_auditor" password="$(password)_password" database="sales_db"
spa_setup.sql
スクリプトでは、ストアド・プロシージャ監査用のユーザー・アカウントに次の権限が付与されます。
CONNECT
sys.sysuser, sys.sysprocedure,
およびsys.sysprocparm
システム表に対するSELECT
(オプション)前述の権限を削除する必要がある場合には、SQL Anywhereデータベースに対してspa_drop
スクリプトを実行します。
構文は、次のとおりです。
isql -S server_name -U sa -P password -i spa_drop.sql -v username="username" password="password" database="protected_database"
ストアド・プロシージャ監査を有効にする手順は、次のとおりです。
スタンドアロンDatabase FirewallまたはManagement Server管理コンソールにログインします。
詳細は、「管理コンソールへのログイン」を参照してください。
「Monitoring」タブで、「Enforcement Points」メニューの「List」をクリックします。
ストアド・プロシージャを監視する強制ポイントを選択し(または強制ポイントを作成し)、「Settings」ボタンをクリックします。
すべての強制ポイントは、指定されたデータベース・サーバーに対するSQLトラフィックも監視します。必要に応じて、強制ポイントは異なるサーバーにあるデータベース内のストアド・プロシージャを監視できます。
「Monitoring Settings」で、「SPA」チェック・ボックスを選択します。
SPAの各フィールドとオプションを入力します。
Database Address、Port: 監査対象データベースが格納されているサーバーのIPアドレスを指定します。ポート番号については、データベースで使用するポート番号を入力します。(たとえば、Oracleデータベースのデフォルトのポート番号は1521です。Oracleデータベースについては、この情報はtnsnames.ora
ファイルで見つけることができます。)IPアドレスのかわりにホスト名を使用する場合には、先に「System Services」ページでDNSサーバーを構成します。
強制ポイントで指定されている保護対象データベースのIPアドレスは、監査には自動的に含まれません。
Database Name: データベースの名前。Oracleデータベースについては、tnsnames.ora
ファイルに定義されているサービス名を入力します。
User Name: ストアド・プロシージャ監査のアカウントのユーザー名、たとえばspa_auditor
などを入力します。
Change Password: ユーザーのパスワードを変更する場合は、「Change Password」ボタンをクリックして、新しいパスワードを入力します。(このフィールドが表示されるのは、既存の構成を編集している場合のみです。ストアド・プロシージャ監査を最初に構成するときは、「Password」フィールドと「Confirm Password」フィールドが表示されます。)
Database Connection (Test Now): 「Test Now」をクリックすると、指定したユーザーがデータベースにログインし、必要な権限が付与されるかが確認されます。
First Run Time、Repeat Every: 最初の監査を実行する日時および監査を繰り返す頻度を指定します。データベースの使用が少ない時間(午前2時など)を選択します。
監査を即時に実行する場合は、「Enforcement Points」メニューで「List」をクリックし、該当する強制ポイントの「Manage」ボタンをクリックし、続いて「Run Now」をクリックします。
ストアド・プロシージャ監査を無効にできます。ストアド・プロシージャ監査を完全に削除する場合は、『Oracle Database Firewallインストレーション・ガイド』を参照してください。
ストアド・プロシージャ監査を無効にする手順は、次のとおりです。
スタンドアロンDatabase FirewallまたはManagement Server管理コンソールにログインします。
詳細は、「管理コンソールへのログイン」を参照してください。
「Monitoring」タブを選択します。
デフォルトでは、「Enforcement Points」ページが表示されます。表示されない場合は、ページの左側の「Enforcement Points」メニューで「List」ボタンをクリックします。
ストアド・プロシージャ監査を無効にする強制ポイントを検索します。
「Settings」ボタンをクリックします。
「Monitoring Settings」ページが表示されます。
「SPA」領域で、「Activate Stored Procedure Auditing」チェック・ボックスの選択を解除します。