MSSQL DML 로그 저장 설정
1. 감사 사양 설정 및 실행
-- 서버 수준에서 감사 사양 생성
USE master
CREATE SERVER AUDIT ServerAudit
TO FILE (FILEPATH = 'D:\MSSQL\AuditLogs\');
-- 서버 감사 사양을 시작
USE master
ALTER SERVER AUDIT ServerAudit
WITH (STATE = ON);
-- 데이터베이스 수준에서 감사 사양 생성
use MYDATABASENAME
CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT ServerAudit
ADD (INSERT, UPDATE, DELETE ON DATABASE::MYDATABASENAME BY PUBLIC);
-- 데이터베이스 감사 사양을 시작
use MYDATABASENAME
ALTER DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
WITH (STATE = ON);
--------------------------------------------------------------------------------------------
2. 감사 사양 종료 및 삭제
-- 감사 사양 종료 및 삭제
USE master
ALTER SERVER AUDIT ServerAudit
WITH (STATE = OFF);
-- 서버 감사 사양 삭제
USE master
DROP SERVER AUDIT ServerAudit;
-- 데이터베이스 감사 사양을 종료
use MYDATABASENAME
ALTER DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
WITH (STATE = OFF);
-- 데이터베이스 감사 사양 삭제
use MYDATABASENAME
DROP DATABASE AUDIT SPECIFICATION DatabaseAuditSpec;
--------------------------------------------------------------------------------------------
3. 감사 사양 로그 조회
-- 감사 로그 파일 조회 (로컬 시간으로 변환)
SELECT
DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), event_time) AS local_event_time,
server_instance_name,
database_name,
schema_name,
object_name,
statement
FROM sys.fn_get_audit_file('D:\MSSQL\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT);
--------------------------------------------------------------------------------------------
4. 에이전트 작업 스케쥴 등록 : 매일 오전 00:00 신규 파일 생성
작업명 : DailyAuditLogRotation
-- T-SQL 작성
DECLARE @currentDateTime NVARCHAR(50);
DECLARE @auditFilePath NVARCHAR(500);
DECLARE @sqlCmd NVARCHAR(MAX);
DECLARE @innerSqlCmd NVARCHAR(MAX);
-- 현재 시간 문자열 생성
SET @currentDateTime = REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), ':', '');
-- 감사 로그 파일 경로 설정 (예: D:\MSSQL\AuditLogs\AuditLog_YYYYMMDD_HHMMSS.audit)
SET @auditFilePath = 'D:\MSSQL\AuditLogs\AuditLog_' + @currentDateTime + '.audit';
-- 새로운 감사 로그 파일 생성을 위한 동적 SQL 명령 준비
SET @innerSqlCmd = '
ALTER SERVER AUDIT ServerAudit
WITH (STATE = OFF);
ALTER SERVER AUDIT ServerAudit
WITH (STATE = ON);
';
-- 동적 SQL 명령 실행
EXEC sp_executesql @innerSqlCmd;
'Database > MS-SQL' 카테고리의 다른 글
MSSQL 업그레이드 (1) | 2022.11.04 |
---|---|
AlwaysOn 가용성 그룹 구축 # 2 : Windows Server 2016 + MS SQL 2016 / None AD (1) | 2020.07.07 |
AlwaysOn 가용성 그룹 구축 # 1 : Windows Server 2016 + MS SQL 2016 / None AD (6) | 2020.07.03 |
SQL DB 암호화 / TDE(Transparent Data Encryption) (0) | 2018.12.07 |
MS-SQL CPU 사용량이 높은 쿼리문 확인 (0) | 2018.06.22 |
Windows Server 2025 Preview 설치 테스트
# Windows Server 2025 Preview 설치 테스트
윈도우 서버 신규 버전 iso 등록되어 설치 테스트 진행.
1. Windows Server 2025 Preview 기본 설치 진행
2. OS 테스트
1) 화면 및 기능
2) 네트워크 설정
3) 서버 역할 및 기능 설치
4) 원격 데스크톱 활성화
윈도우키 - 설정 - 시스템 - 원격 데스크톱
3. 설치 후기
1) GUI 가 윈도우 11과 똑같이 변경 됨
2) 이전 버전에서 사용되던 프로그램 및 기능의 변화 없음
3) 보안 패치 종료 이슈가 없는 이상, 기존에 사용하던 OS 버전을 굳이 변경할 필요는 없음
'윈도우 이야기' 카테고리의 다른 글
폴더 항목 표시 정보 변경 (0) | 2018.04.11 |
---|---|
끝이나지 않는 랜섬웨어 / Ransom:Win32/WannaCrypt.A!rsm (0) | 2018.04.07 |
IIS + goaccess 설치
웹사이트 분석툴인 goaccess 를 IIS 에 적용하고자 한다.
1. 패키지 다운로드
https://goaccess.io/download
Download 버튼을 누르면 goaccess-1.9.1.tar.gz 파일이 다운 됨.
우선 해당 파일을 C 드라이브에 압축 해제하고 다음 단계 진행.
2. cygwin 설치 및 패키지 다운로드
goaccess 가 리눅스 기반으로 생성되었기 때문에, 윈도우에서 동작 시키려면 추가 프로그램이 필요 함.
cygwin 설치
https://www.cygwin.com/install.html
설치 파일 실행하고 아래 단계를 진행
이 후, 패키지 검색 화면이 나오는데 기본으로 필요한 패키지와 goaccess 를 위한 패키지를 찾아서 설치.
- gcc
gcc-core 를 선택하고, "Skip" 을 두 번 클릭해서 버전이 나오게 해야 함.
"다음" 은 누르면 안 됨.
필요한 패키지 전체 활성화 완료 후에 "다음" 버튼을 눌러서 설치 진행해야 함.
- gcc-g++
- make
- gdb
- wget
그리고 goaccess 개발사에서 안내한 패키지를 다운로드 한다. 위에 설치 된 것과 중복이 있으니 확인 필요.
https://goaccess.io/faq#installation
- libGeoIP
- libncurses / libncursesw10
- automake
- gettext
참고로, goaccess 설치 메뉴얼에는 없는 패키지가 있는데 "libmaxminddb" 이것도 설치해야 함.
./configure 명령어 실행 할 때 해당 패키지 없어서 에러 남. 메뉴얼 없데이트가 안 된 듯.
- libmaxminddb
이제 "다음" 버튼 눌러서 선택한 패키지 확인하고 설치 진행 하면 됨.
# 패키지가 유닉스 계열 압축 파일이므로, 서버에 해당 압축을 해제 할 수 있는 프로그램이 설치되어 있어야 함.
없으면 다운로드 완료했음에도 압축 해제 할 수 없다고 에러 엄청 나옴.
3. goaccess 설치
바탕화면에 등록 된 아이콘 실행해서 cygwin CLI 실행
아까 압축 풀어놨던 경로로 이동 : cd c:/goaccess-1.9.1
- 구성 : configure
명령어 실행 : 둘 중에 아무거나 해도 상관없는 것 같음.
./configure --enable-utf8 --enable-geoip=legacy or ./configure --enable-utf8 --enable-geoip=mmdb |
오류 없이 완료 되면 정상.
- 빌드 : make
make |
- 설치 : make install
make install |
4. goaccess 실행
IIS 웹로그가 저장 된 경로를 지정하여 로그 파일 분석
goaccess -f "C:\inetpub\logs\LogFiles\W3SVC1\u_ex240405.log" |
윈도우 IIS 의 로그 형식이니까 W3C 를 "스페이스바"로 선택하고, "엔터"
CLI 로 로그 확인시에는 이런 화면이 호출 됨.
5. html 로 로그 파일을 변환하여 웹브라우저에서 실행하는 방법
IIS 웹로그를 파싱하여 html 로 변환하는 작업을 해야 함.
goaccess 가 기본적으로는 apache time 및 date 형식을 따르기 때문에 아래와 같이 포맷을 수정해야 정상적으로 변환 됨.
goaccess --no-global-config "C:\inetpub\logs\LogFiles\W3SVC1\u_ex240405.log" --log-format '%d %t %^ %m %U %^ %^ %^ %h %u %R %s %^ %^ %^ %L' --date-format=%Y-%m-%d --time-format=%T -o "D:\WWW_ROOT\test\log.html" |
파싱 작업이 완료되서 웹브라우저에서 "사이트주소/log.html" 실행하면 이런 화면을 볼 수 있음.
참고로, 당일 로그 외에도 기간 설정하여 로그 분석도 가능함.
예를 들어, 2024.04.01 ~ 2024.04.05 에 생성 된 IIS 웹로그를 분석하고자 하면
해당 로그들을 통합하여 변환하면 됨
powershell 스크립트로 저장 후 실행 : merge-logs.ps1 $firstFile = 240401 $lastFile = 240415 $targetFolder = "C:\inetpub\logs\LogFiles\W3SVC1" $outputFile = "C:\inetpub\logs\LogFiles\W3SVC1\merged.log" # 기존의 합친 파일이 있다면 삭제 If (Test-Path $outputFile) { Remove-Item $outputFile } # 지정된 범위 내의 파일 병합 $firstFile..$lastFile | ForEach-Object { $fileName = "u_ex" + $_ + ".log" $filePath = Join-Path -Path $targetFolder -ChildPath $fileName If (Test-Path $filePath) { Get-Content $filePath | Add-Content $outputFile } } |
아니면, 폴더를 새로 만들어서 필요한 로그들 복사 후 통째로 통합해도 됨. 이 경우 CMD 로 간단하게 작성 가능
copy C:\inetpub\logs\LogFiles\Merged\u_ex*.log merged.log |
생성 된 통합 로그 파일을 html 로 변환해서 호출하면 더 많은 정보를 확인 할 수 있음.
goaccess.exe --no-global-config "C:\inetpub\logs\LogFiles\W3SVC1\merged.log" --log-format '%d %t %^ %m %U %^ %^ %^ %h %u %R %s %^ %^ %^ %L' --date-format=%Y-%m-%d --time-format=%T -o "D:\WWW_ROOT\test\log.html" |
통합 로그의 기간을 늘리면 이렇게도 됨.
6. 테스트 종료
리눅스 계열과 다르게, 윈도우 기반으로 실행하려면 반드시 cygwin 을 통해야 함.
CMD 를 통한 실행은 불가.
일정 주기로 log.html 을 생성하려고 하면
powershell 을 이용해서 cygwin 실행하고 로그 변환하는 방식을 사용할 수 있을 것 같음.