ロギング リクエストのオブジェクト レベルを指定するときには、アクセス権限を付与する際に使用されるオブジェクト レベルを考慮する必要があります。例えば、BEGIN LOGGINGリクエストを使ってデータベース レベルでロギングを指定すると、データベース内のすべてのテーブルがログ登録項の候補になります。
使用例1
以下を前提とします。
- database_aにはいくつかのテーブルが含まれています
- PUBLICはtable_1にのみINSERT権限を持っています
- ログは次のように指定されます
BEGIN LOGGING DENIALS ON FIRST INSERT ON DATABASE "database_a";
database_a内のテーブルに対してINSERTリクエストが出されると、ログ登録項は次のようになります。
- table_1への最初のINSERTに対する付与の登録項。
- データベース内の他のテーブルへの最初のINSERTの試みに対する拒否の登録項。
ロギングはデータベース レベルで指定されるため、複文リクエストの一部としてのデータベースの他のテーブルに対する追加のINSERT文では、各テーブルに最初のINSERTが記録されます。
使用例2
以下を前提とします。
- database_aにはtable_1とtable_2が含まれています
- ユーザーのアクセス権限はデータベース レベルです
- ログは次のように指定されます
BEGIN LOGGING ON FIRST INSERT ON DATABASE "database_a"
同じリクエストでtable_1とtable_2の両方に行が挿入される場合、各テーブルへの最初の挿入を識別する単一のログの登録項が生成されます。
アクセス権がデータベース レベルであり、ロギングがテーブル レベルで指定されている場合、テーブルに対する動作だけがロギングの登録項とみなされます(テーブル レベルのアクセス権がないことが、必ずしもログ登録される結果にはなりません)。
テーブル レベルおよびデータベース レベルの権限チェックの結果に従って、テーブルに対する単一のログの登録項が生成されます。
テーブル レベルおよびデータベース レベルの権限チェック | 結果 |
---|---|
どちらかのチェックが成功した場合。 | システムは、'付与済み'のログ登録項を生成します。 |
どちらのチェックも失敗した場合。 | キーワードDENIALSがロギング ルールで指定されていなかったため、システムは"拒否"のログ登録項を生成しません。 |
使用例3
アクセス リクエストがテーブルに直接アクセスした場合にのみ、FIRST SELECT ON database_a.table_1 を指定するロギング リクエストは、例えば次のようなログの登録項を生成します。
SELECT … FROM table_1
ユーザーはtable_1に直接アクセスしてこれらのリクエストを実行する必要はないため、次の処理は、database_a.table_1でログ アクセスをしません。
- SELECT ... FROM view1_of_table_1
- EXECUTE macro_1
macro_1には、SELECT … FROM table_1というリクエストが含まれています。