안전한 SQL Server 클라이언트 애플리케이션을 만드는 방법이 정확하게 한 가지만 존재하지는 않습니다. 모든 애플리케이션은 요구 사항, 배포 환경 및 사용자 집단에 따라 고유합니다. 처음 배포될 때 적절하게 보호되는 애플리케이션은 시간이 지남에 따라 보안성이 떨어질 수 있습니다. 앞으로 생길 수 있는 위협을 정확히 예측하는 것은 불가능합니다.
SQL Server는 제품으로서 개발자가 안전한 데이터베이스 애플리케이션을 만들 수 있는 최신 보안 기능을 통합하기 위해 여러 버전으로 발전했습니다. 그러나 보안을 한 번에 해결할 수는 없으며 계속적으로 모니터링하고 업데이트해야 합니다.
일반적인 위협
개발자는 보안 위협, 이에 직면하기 위해 제공하는 도구 및 자초한 보안 허점을 피하는 방법을 이해해야 합니다. 보안은 체인으로 볼 수 있습니다. 한 연결 고리가 끊어지면 전체 강도가 훼손되는 것입니다. 다음 표에는 일반적인 보안 위협이 들어 있으며 이 단원의 항목에서 보다 상세히 설명됩니다.
SQL 삽입
SQL 삽입은 악의적인 사용자가 유효한 입력 대신 Transact-SQL 문을 입력하는 프로세스입니다. 입력이 유효성 검사를 거치지 않고 서버로 직접 전달되고 애플리케이션이 삽입된 코드를 실수로 실행하는 경우 공격으로 인해 데이터가 손상되거나 제거될 수 있습니다. 저장 프로시저와 매개 변수화된 명령을 사용하면 동적 SQL을 방지하고 모든 사용자에 대한 권한을 제한하므로 SQL Server 삽입 공격을 막을 수 있습니다.
권한 상승
권한 높이기 공격은 사용자가 소유자 또는 관리자와 같이 신뢰할 수 있는 계정 권한이 있는 것처럼 가정할 때 발생합니다. 항상 최소 권한 사용자 계정에서 실행해야 하고 반드시 필요한 권한만 할당하세요. 코드를 실행하는 데 관리자 또는 소유자 계정을 사용하지 마세요. 그러면 공격이 성공하더라도 발생할 수 있는 손상 정도가 제한됩니다. 추가 권한이 필요한 작업을 수행하는 경우 작업 기간 동안에만 프로시저 서명 또는 가장을 사용하세요. 인증서를 사용하여 저장 프로시저에 서명하거나 가장을 사용하여 임시로 권한을 할당할 수 있습니다.
검색 및 지능적 관찰
검색 공격은 애플리케이션에서 생성된 오류 메시지를 사용하여 보안 취약성을 검색할 수 있습니다. SQL Server 오류 정보가 최종 사용자에게 반환되지 않도록 하기 위해 모든 절차의 코드에서 오류 처리를 구현합니다.
인증
사용자 입력을 기반으로 하는 연결 문자열이 런타임에 생성되는 경우 SQL Server 로그인을 사용할 때 연결 문자열 삽입 공격이 발생할 수 있습니다. 유효한 키워드 쌍에 대해 연결 문자열을 확인하지 않는 경우 공격자는 추가 문자를 삽입하여 서버의 중요 데이터 또는 기타 리소스에 액세스할 수도 있습니다. 가능한 경우 Windows 인증을 사용합니다. SQL Server 로그인을 사용해야 하는 경우 SqlConnectionStringBuilder를 사용하여 런타임에 연결 문자열을 만들고 유효성을 확인합니다.
암호
침입자가 권한 있는 사용자에 대한 암호를 얻거나 추측할 수 있어 많은 공격이 성공합니다. 암호는 침입을 막는 최전방 방어선이므로 시스템 보안을 위해서는 반드시 강력한 암호를 설정해야 합니다. 혼합 모드 인증에 대한 암호 정책을 만들고 적용하세요.
Windows 인증을 사용하는 경우에도 항상 sa 계정에 대해 강력한 암호를 할당하세요.
이 섹션의 내용
SQL Server에서 동적 보안 SQL 작성
저장 프로시저를 사용하여 안전한 동적 SQL을 작성하는 기술에 대해 설명합니다.