4

1つのサーバーによって出力された監査ファイルが、そのサーバーのCONTROLSERVERアクセスなしで読み取れるかどうかを調べようとしています。MSDNのドキュメントは、これが可能であることを示唆しています。

データベースエンジンがファイルに書き込んでいるときでも、他のWindowsユーザーは、権限があれば監査ファイルを読み取ることができます。データベースエンジンは、読み取り操作を妨げる排他ロックを取得しません。

そしてまた:

監査管理者または監査リーダーのみがアクセスできるSQLServerExpressのインスタンスなど、SQLServerの別のインスタンスから監査レポートを生成することをお勧めします。レポートにデータベースエンジンの別のインスタンスを使用することで、権限のないユーザーが監査レコードにアクセスするのを防ぐことができます。

要するに、私はこれを行うことができますか?

  • ファイル共有に出力するようにProdDBで監査を構成する
  • 監査リーダーにファイル共有への読み取りアクセス権を与える
  • 別のDBからsys.fn_get_audit_file('fileshare *')を使用して、監査レポートを作成します。

[説明]qの重要な部分は、監査情報の作成元のDBに対する管理者アクセス権がなくても、別のDBからsys.fn_get_audit_fileを使用してファイルにアクセスできるかどうかです。そうすれば、DB管理者アクセス権を持つDBAとは別に、ファイルシステムアクセス権を持つ監査リーダーを持つことができます。最初にこれを明確にしなかったことをお詫びします。

あなたの答えに関して言えば、このクエリは、元のDBのDBAではない誰かによって、無関係のSQL Mgmt Studio / DBから実行できますか?

SELECT 
    event_time, action_id, session_id, object_id, class_type, 
    database_principal_name, database_name, object_name, statement
FROM 
    sys.fn_get_audit_file('\\Temp\Audit\*',NULL,NULL);
4

1 に答える 1

2

確かに、これは機能します。

USE [master]
GO

CREATE SERVER AUDIT [SQL2012-Audit-20121214-Demo]
TO FILE 
(   FILEPATH = N'\\Temp\Audit'
    ,MAXSIZE = 2 MB
    ,MAX_FILES = 32
    ,RESERVE_DISK_SPACE = OFF
) WITH (QUEUE_DELAY = 2000,ON_FAILURE = CONTINUE)
GO

ALTER SERVER AUDIT [SQL2012-Audit-20121214-Demo] WITH (STATE = ON);

USE [Performance]
GO

CREATE DATABASE AUDIT SPECIFICATION [SQL2012-DBAudit-20121214-Demo]
FOR SERVER AUDIT [SQL2012-Audit-20121214-Demo]
ADD (SELECT,INSERT,DELETE,UPDATE,EXECUTE ON DATABASE::[Performance] BY [dbo])
WITH (STATE = ON);
GO

サーバー監査とデータベース監査が実施されてアクティブ化された後、最初の監査ファイルがすぐに作成されましたが、ファイルが使用中であると Windows が示したため、それを削除することはできませんでした。

ただし、ファイルからの選択は常に機能します。以下は、監査設定によって捕捉されると思われるアクティビティを含む「ワークロード」です。

SELECT * INTO partition_stats_4 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_3 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_2 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_1 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats   FROM Performance.sys.dm_db_partition_stats

DELETE FROM partition_stats
DELETE FROM partition_stats_1
DELETE FROM partition_stats_2
DELETE FROM partition_stats_3
DELETE FROM partition_stats_4

DROP TABLE partition_stats_4
DROP TABLE partition_stats_3
DROP TABLE partition_stats_2
DROP TABLE partition_stats_1
DROP TABLE partition_stats

結果は次のとおりです。

SELECT 
    event_time, action_id, session_id, object_id, class_type, 
    database_principal_name, database_name, object_name, statement
FROM 
    sys.fn_get_audit_file('\\Temp\Audit\*',NULL,NULL);

SQL Server 2012 - DB 監査結果

ちなみに、これはサーバー側のトレースファイルに関してもまったく同じパターンです。トレースは常に実行されており、ファイルは問題なく「クエリ可能」です。

ハッピー監査!

于 2012-12-14T16:48:50.953 に答える