독까의 이야기

윈도우 자동 업데이트 비활성화 레지스트리 등록
사용 목적 : 윈도우 서버 및 PC 에서 자동 업데이트 비활성화

적용 대상 :
- Windows Server 2012 이상
- Windows 10 이상

1. Windows + R -> Powershell 입력 엔터

2. 설정값 입력
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Value 1

3. Windows + R -> gpupdate /force 입력 엔터

# 오류 내역
VSS 백업 실패가 지속 발생하고 있어, 이벤트 로그 확인 및 점검 진행

'‎2025‎-‎06‎-‎30T00:51:17.971001600Z'에 시작된 백업 작업에 오류가 발생했습니다. 오류 코드는 '0x80780102'(백업에 시스템 기록기가 없습니다.)입니다. 이벤트 세부 정보에서 해결 방법을 확인하고 문제가 해결되면 백업 작업을 다시 실행하십시오."

CMD 실행 후 vssadmin list wirters 입력

작성자 이름: 'System Writer' 항목 확인 불가

# 조치 방법
1. 관리자 권한으로 CMD 실행 후 아래 명령어 순차 입력 

takeown /f %windir%\winsxs\temp\PendingRenames /a
icacls %windir%\winsxs\temp\PendingRenames /grant "NT AUTHORITY\SYSTEM:(RX)"
icacls %windir%\winsxs\temp\PendingRenames /grant "NT Service\trustedinstaller:(F)"
icacls %windir%\winsxs\temp\PendingRenames /grant "BUILTIN\Users:(RX)"

takeown /f %windir%\winsxs\filemaps\* /a
icacls %windir%\winsxs\filemaps\*.* /grant "NT AUTHORITY\SYSTEM:(RX)"
icacls %windir%\winsxs\filemaps\*.* /grant "NT Service\trustedinstaller:(F)"
icacls %windir%\winsxs\filemaps\*.* /grant "BUILTIN\Users:(RX)"

2. 암호화 서비스 재시작
net stop cryptsvc
net start cryptsvc

3. 시스템 기록기 확인
vssadmin list writers

작성자 이름: 'System Writer'
   작성자 Id: {e8132975-6f93-4464-a53e-1050253ae220}
   작성자 인스턴스 Id: {d200a43d-d14e-4bb2-8afb-f3db9abe76ef}
   상태: [5] 완료 대기 중
   마지막 오류: 오류 없음

4. VSS 백업 실행 : 정상 작동 확인 

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;