DBAtlas · 데이터베이스 운영 아틀라스

SQL Server 보안 강화 (Linux 및 Windows: 점검, 네트워크, TLS, 인증, 권한, audit, TDE)

SQL Server난이도: 중급소요 시간: 5분 (점검) – 3시간 (전체 보안 강화)

설치 가이드가 아닙니다. 실행 중인 SQL Server 2019 / 2022 / 2025 인스턴스(Linux 또는 Windows)의 보안 취약점을 찾아 조치합니다. 먼저 읽기 전용 보안 점검이 취약점을 심각도 순으로 나열하고, 각 발견 사항이 어느 카드로 이어지는지 알려 줍니다. 그다음 영역을 하나씩 또는 모두 순서대로 조치합니다: 수신 주소와 firewall, Force Encryption + 인증서 및 클라이언트 측 검증, sa 비활성화와 비밀번호 정책(CHECK_POLICY), 역할과 DDL 권한 없는 애플리케이션 사용자, 노출 영역(xp_cmdshell, TRUSTWORTHY, guest), Server Audit, TDE(인증서 백업 필수), 암호화된 백업, 서비스 계정과 파일 권한, CU 추적. TDE와 백업 암호화는 Standard와 Enterprise에서 사용할 수 있습니다(Express에는 없음). 마지막에 점검을 다시 실행합니다.

구성: 단일 SQL Server 인스턴스 (Linux 또는 Windows) + 애플리케이션 서버; Always On AG는 참고 사항에

시나리오

  • 보안 점검: 취약점은 무엇인가? (읽기 전용) — 가장 먼저 실행할 점검: sa, 비밀번호 정책, 빈 비밀번호, sysadmin 멤버, public/guest 권한, xp_cmdshell, 암호화되지 않은 연결, audit, TDE와 인증서 백업, 포트와 firewall. 아무것도 변경하지 않습니다.
  • 전체 보안 강화 (모두 순서대로) — 새로 설치했거나 보안 강화를 한 번도 하지 않은 인스턴스: 모든 영역을 안전한 순서로 적용합니다. SQL Server를 한두 번 재시작합니다(유지보수 시간 필요).
  • 네트워크와 연결: 누가 어디에서 연결할 수 있는가? (수신 대기, firewall, Browser) — SQL Server가 모든 인터페이스에서 수신 대기하고, 1433이 모두에게 열려 있으며, SQL Browser가 불필요하게 실행 중입니다. 수신 주소를 변경하면 재시작이 필요합니다.
  • 연결 암호화 (Force Encryption, 인증서, 클라이언트 검증) — 연결이 암호화되지 않았거나 자체 서명된 임시 인증서를 사용하고, 클라이언트는 TrustServerCertificate=true를 사용합니다. 인증서를 변경하면 재시작이 필요합니다.
  • 인증과 비밀번호 (sa, CHECK_POLICY, Windows 인증) — sa 활성화, SQL 로그인에 비밀번호 정책 없음, 빈/약한 비밀번호. 개인 DBA 계정 생성과 sa 비활성화. 다운타임 없음(Windows 인증 전용으로 전환할 때만 재시작 필요).
  • 최소 권한과 노출 영역 (역할, public, guest, xp_cmdshell) — 애플리케이션 사용자가 db_owner 또는 sysadmin, public/guest에 추가 권한, xp_cmdshell/TRUSTWORTHY 활성화. 역할 설계와 권한 보고서. 다운타임 없음.
  • Audit: 누가 무엇을 했는가? (Server Audit, Database Audit Specification) — 감사인이 로그인, 권한 변경, 스키마 변경 기록을 요구합니다. 파일(또는 Windows 이벤트 로그)로 기록하는 Server Audit, 중앙 시스템 전송과 보존. 다운타임 없음. 모든 에디션에서 추가 라이선스 불필요(2016 SP1+).
  • 저장 데이터 암호화 (TDE) — 디스크, 데이터 파일 또는 백업이 다른 서버에서 열리는 것에 대비한 TDE: DMK, 인증서, DEK. 온라인으로 수행합니다. 인증서 백업은 필수입니다(분실하면 데이터베이스와 백업을 열 수 없습니다). 라이선스: SQL Server 2019+ Standard와 Enterprise에서 사용 가능하며 Express에는 없습니다.
  • 백업 보안 (암호화된 백업, 인증서, 권한) — 백업이 암호화되지 않았고, 백업 디렉터리가 모두에게 열려 있으며, 스크립트에 비밀번호가 평문으로 들어 있습니다. BACKUP … WITH ENCRYPTION, 인증서 백업, 디렉터리 권한. 다운타임 없음. 백업 암호화는 Standard와 Enterprise에서 사용 가능하며 Express에는 없습니다.
  • 운영 체제 측면 (서비스 계정, 파일 권한, SELinux) — 서비스가 LocalSystem 또는 관리자 계정으로 실행되고, 데이터/백업 디렉터리가 모두에게 열려 있으며, SELinux가 비활성화되어 있습니다. 서비스 계정을 변경하면 재시작이 필요합니다.
  • 패치와 버전: 지원되는 버전이며 최신 CU인가? — 버전, CU 수준, 지원 종료(2016은 2026년 7월에 종료). 적용은 CU 패치 가이드로 연결됩니다. 읽기 전용.

시작하기 전에

  • SQL Server가 실행 중이고, mssql-tools18이 설치되어 있으며 …이 sysadmin입니다. sqlcmd는 /opt/mssql-tools18/bin/ 아래에 있습니다(PATH에 없으므로 가이드는 전체 경로를 사용합니다). 스크립트를 실행하기 전에 비밀번호를 화면에 표시하지 않고 변수에 넣습니다: read -rsp 'Password: ' SQLCMDPASSWORD; export SQLCMDPASSWORD 후 sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh. 설치: SQL Server Linux 설치.
  • 관리자 PowerShell 세션이며, 로그온한 Windows 계정이 SQL Server에서 sysadmin입니다(sqlcmd -E). 설치: SQL Server Windows 설치.
  • 세션 두 개를 엽니다. 하나에서는 단계를 적용하고, 다른 하나에서는 sysadmin 연결(sqlcmd)을 열어 둡니다. sa 비활성화, firewall, Force Encryption, 서비스 변경 후에는 별도 세션에서 새 연결을 테스트하고 기존 세션은 닫지 않습니다. 최후 수단: 로컬 DAC 연결(sqlcmd -A)은 서버 자체에서 항상 동작합니다. 완전히 잠긴 경우 단일 사용자 모드(…systemctl stop mssql-server; sudo -u mssql /opt/mssql/bin/sqlservr -m…net start … /m…)에서 로컬 관리자가 sysadmin으로 접속할 수 있습니다.
  • 유지보수 시간: 선택한 영역에서 SQL Server가 재시작됩니다(수신 주소, 인증서/Force Encryption, 서비스 계정, 인증 모드).… AG에서는 먼저 secondary replica에 적용한 뒤, failover로 primary를 전환하고 이전 primary에 적용합니다.…
  • 연결하는 애플리케이션 목록(서버, 로그인, 드라이버). 점검 단계에서 현재 연결된 애플리케이션을 보여 줍니다.
  • 최신 전체 백업과 master/msdb 백업이 있습니다(백업 가이드). TDE와 백업 암호화에서는 인증서 백업 없이 데이터를 복구할 수 없습니다.

가이드 단계

  • 보안 점검 (읽기 전용) — 인스턴스 내부 발견 사항 조회 · 운영 체제 측면 점검 · 운영 체제 측면 점검
  • 시작 전: 복구 지점 — 로그인, 설정, 구성의 사본 생성 · 로그인, 설정, 레지스트리의 사본 생성
  • 인증 — 1. 진단 — 로그인, 정책, 인증 모드 표시
  • 인증 — 3. 적용 — 정책을 적용하여 애플리케이션 및 보고서 로그인 생성 · 정책을 적용하여 애플리케이션 및 보고서 로그인 생성 · 빈 비밀번호와 로그인 이름과 같은 비밀번호 변경 · 빈 비밀번호와 로그인 이름과 같은 비밀번호 변경 · 개인 DBA 접근 준비 · DBA AD 그룹이 sysadmin인지 확인 …
  • 인증 — 4. 검증 — 인증 상태 확인 · 애플리케이션 서버에서 sa로 로그인 시도 · 애플리케이션 서버에서 sa로 로그인 시도
  • 권한 — 1. 진단 — 서버 및 데이터베이스 권한 표시
  • 권한 — 3. 적용 — 노출 영역 축소 (sp_configure) · TRUSTWORTHY와 guest 접근 비활성화 · 역할, 스키마, 사용자 구성 · 애플리케이션 사용자를 db_owner에서 제외 · 권한 보고서
  • 권한 — 4. 검증 — 애플리케이션 사용자가 DDL을 실행할 수 없는지 확인
  • TLS — 1. 진단 — 연결 암호화 상태 표시
  • TLS — 3. 적용 — 테스트 CA와 서버 인증서 생성 · 키와 인증서 서명 요청(CSR) 생성 · 인증서와 키 검증 · 인증서와 Force Encryption 구성 (mssql-conf) · SQL Server 재시작 · 인증서 생성 또는 가져오기 …
  • TLS — 4. 검증 — 모든 TCP 연결이 암호화되었는지 확인
  • TLS — 5. 후속 작업: 인증서 갱신 — 인증서 갱신 절차
  • 네트워크 — 1. 진단: 누가 어디에서 연결하는가? — 수신 주소와 클라이언트 원본 표시
  • 네트워크 — 3. 적용 — 수신 주소 제한 (mssql-conf) · 수신 주소 제한 (TCP/IP IPn) · Firewall에서 허용된 네트워크에만 포트 열기 · Firewall에서 허용된 네트워크에만 포트 열기 · SQL Browser 비활성화 (기본 인스턴스) · 수신 주소 적용을 위한 SQL Server 재시작 …
  • 네트워크 — 4. 검증 — 애플리케이션 서버에서 연결 테스트 (새 세션) · 애플리케이션 서버에서 연결 테스트 (새 세션)
  • Audit — 1. 진단 — 기존 audit과 로그인 감사 표시
  • Audit — 2. 안전장치 — Audit 디렉터리 준비 · Audit 디렉터리 준비
  • Audit — 3. 적용 — Server Audit과 서버 수준 이벤트 정의 · 애플리케이션 스키마의 데이터 접근 기록 · Audit 기록을 내보내는 스크립트 · 내보내기용 비밀번호 파일, cron, rsyslog
  • Audit — 4. 검증 — 변경을 수행하고 audit 기록에서 확인
  • 백업 — 1. 진단 — 백업 암호화 상태와 인증서 표시 · 백업 디렉터리 권한 · 백업 디렉터리 권한
  • 백업 — 3. 적용 — 백업 인증서 생성 및 즉시 백업 · 백업 인증서 생성 및 즉시 백업 · 암호화된 백업 생성 및 검증 · 백업 디렉터리 권한 수정 · 백업 디렉터리 권한 수정
  • 운영 체제 — 1. 진단 — 서비스 계정, 권한, SELinux · 서비스 계정과 디렉터리 권한
  • 운영 체제 — 3. 적용 — mssql 계정 잠금 및 디렉터리 권한 수정 · SELinux Enforcing 유지 및 SQL Server 제한 · 서비스 계정을 가상 계정 또는 gMSA로 변경 · 데이터 디렉터리 권한 수정
  • TDE — 1. 진단 — 암호화 상태와 인증서 표시
  • TDE — 2. 안전장치 — TDE 전 전체 백업
  • TDE — 3. 적용 — DMK와 TDE 인증서 생성, 즉시 백업 · DMK와 TDE 인증서 생성, 즉시 백업 · AG: 다른 replica에 TDE 인증서 로드 · 데이터베이스 암호화 키 생성 및 TDE 활성화 · 암호화가 끝날 때까지 모니터링
  • TDE — 4. 검증 — 암호화된 데이터베이스와 인증서 백업 검증
  • 패치와 버전 — 1. 진단 — 버전과 CU 수준 표시 · 운영 체제 측 대기 중인 업데이트
  • 패치와 버전 — 5. 후속 작업 — 패치 일정 기록
  • 최종 점검: 취약점이 조치되었는가? — 보안 점검 다시 실행 · 운영 체제 측면 다시 점검 · 운영 체제 측면 다시 점검
내 환경에 맞춘 단계별 계획 열기 →