2012-12-06 2 views
4

한 서버에서 출력 한 감사 파일을 해당 서버에서 CONTROL SERVER 액세스없이 읽을 수 있는지 확인하려고합니다. MSDN docs이 가능 제안 : 그들이 권한이있는 경우 데이터베이스 엔진이 파일에 쓰기SQL Server 2012 감사 보고서 생성

경우에도, 다른 Windows 사용자가 감사 파일을 읽을 수 있습니다. 데이터베이스 엔진은 읽기 작업을 금지하는 배타적 잠금을 사용하지 않습니다.

도 : 에만 감사 관리자 또는 감사 독자가에

당신은 SQL Server Express의 인스턴스로 별도의 인스턴스 SQL 서버의 에서 감사 보고서를 생성하는 것이 좋습니다, 접속하다. 보고를 위해 데이터베이스 엔진 인스턴스를 별도로 사용하면 이 권한없는 사용자가 감사 레코드에 액세스하지 못하도록 할 수 있습니다.

간단히 말해서이 작업을 수행 할 수 있습니까?

  • 주고 감사 독자를 파일 공유하기 위해 출력 생산성 DB에

    • 구성 감사는 감사 보고서를 생성하기 위해 별도의 DB에서 파일 공유에
    • 사용 sys.fn_get_audit_file ('파일 공유의 *')를 읽기 액세스.

    [해설] 질문의 중요한 부분은 당신이 감사 정보가 생성 된에서 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); 
    
  • +0

    위에 나열된 짧은 단계를 시도해 봤습니까? 다른 것을 시도 했습니까? – milivojeviCH

    +0

    @mceda - 적어도 1 월 중순까지 SQL 2012에 액세스 할 수 없으므로 필자는 문서가 비슷해 보이는 동안 SQL 2008에서이 작업을 시도 할 계획입니다. –

    +0

    내가 시도하지 않은 유일한 부분은 총알 지점 3입니다. 별도의 DB는 중요하지 않습니다. 파일에 액세스하는 사용자는 SQL Server 서비스 사용자입니다. – milivojeviCH

    답변

    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 Audit Results

    , 이것은 정확하게 여기에 가정으로 감사 설정에 의해 체포되어 활동과 함께 "작업 부하"입니다 서버 측 추적 파일과 동일한 패턴. 우리는 추적을 항상 실행하며 파일은 아무 문제없이 "쿼리 가능"합니다.

    해피 감사!

    +0

    이 위대한 정보에 대한 편집 및 감사를 참조하십시오. –

    +0

    활성 감사 파일에 대한 읽기 전용 액세스를 테스트 할 수있는 환경이 없습니다. 그러나 프로덕션 환경에서 다른 환경으로 복사 한 동일한 감사 파일에서 레코드를 선택하면 사용자에게 'CONTROL SERVER'권한이 있으면 다른 서버에서 작업하고있었습니다. – milivojeviCH