다음을 통해 공유


Notification Services에 대한 보안 고려 사항

Notification Services는 데이터베이스 역할 및 제한된 데이터베이스 사용자 계정을 사용하여 보안을 구현합니다. 이 항목에서는 알림 보안 모델 및 Notification Services 응용 프로그램 보안을 향상시키기 위해 권장되는 보안 설정 방법에 대해 설명합니다.

Notification Services 보안 모델

Notification Services에는 호스팅된 이벤트 공급자, 생성자 및 배포자가 실행되는 엔진이 있습니다. 또한 이벤트를 전송하고 구독을 관리하는 클라이언트 응용 프로그램도 있을 수 있습니다.

엔진 및 클라이언트 응용 프로그램이 사용하는 로그인 계정은 Windows 인증이나 SQL Server 인증을 사용하여 SQL Server에 액세스합니다. 이러한 계정은 데이터베이스 사용자 계정을 통해 데이터베이스 액세스 권한을 얻은 후 Notification Services 데이터 역할의 멤버 자격을 통해 인스턴스 및 응용 프로그램 데이터베이스에 대해 필요한 사용 권한을 얻습니다.

다음 그림에서는 각 엔진 구성 요소, 호스팅되지 않은 이벤트 공급자 및 구독 관리 인터페이스에 필요한 사용 권한을 제공하는 데이터베이스 역할을 보여 줍니다.

Notification Services 보안 모델

데이터베이스 역할에는 데이터베이스 사용 권한이 할당됩니다. 개별 구성 요소에 대한 데이터베이스 사용자는 올바른 역할의 멤버 자격을 통해 필요한 사용 권한을 얻습니다.

  • 이벤트 공급자가 사용하는 계정은 NSEventProvider 데이터베이스 역할의 멤버 자격을 통해 사용 권한을 얻습니다. 이벤트 공급자 호스트는 호스팅된 이벤트 공급자를 실행합니다. 호스팅되지 않은 이벤트 공급자는 독립형 응용 프로그램에 해당합니다.
  • 생성자가 사용하는 계정은 NSGenerator 데이터베이스 역할의 멤버 자격을 통해 사용 권한을 얻습니다.
  • 배포자가 사용하는 계정은 NSDistributor 데이터베이스 역할의 멤버 자격을 통해 사용 권한을 얻습니다.
  • 구독 관리 인터페이스가 사용하는 계정은 NSSubscriberAdmin 데이터베이스 역할의 멤버 자격을 통해 사용 권한을 얻습니다.

엔진이 호스팅된 이벤트 공급자, 생성자 및 배포자를 실행하면 해당 계정은 NSRunService 데이터베이스 역할을 통해 필요한 모든 사용 권한을 얻을 수 있습니다.

Notification Services에 대한 보안을 구현하는 방법은 Notification Services 보안 설정을 참조하십시오.

조건 작업에 대한 추가 계정

Microsoft SQL Server 2005의 Notification Services는 새로운 구독 규칙 기능을 제공합니다. 이제 이벤트 기반 규칙 및 예약 규칙은 구독자들이 사용자 정의 쿼리 절을 사용하여 보다 풍부한 구독을 정의할 수 있도록 하는 조건 작업을 사용할 수 있습니다.

조건 작업을 기반으로 하는 구독은 사용자 정의 쿼리 절을 허용하므로 쿼리에서 사용할 수 있는 데이터가 제한됩니다. 이러한 이유로 조건 작업이 실행되는 데이터베이스 사용자를 정의해야 합니다. 데이터베이스 사용자는 입력 데이터가 들어 있는 테이블 및 뷰를 쿼리할 수만 있어야 합니다.

생성자는 조건 작업을 포함하는 규칙을 발생시킵니다. 그러나 조건 작업 쿼리는 지정된 데이터베이스 사용자에 의해 추가적으로 제약됩니다. Notification Services 응용 프로그램을 정의할 때 데이터베이스 사용자를 지정합니다.

조건 작업에 대한 자세한 내용은 조건 작업 정의를 참조하십시오.

Windows 사용 권한

일부 구성 요소에는 데이터베이스 사용 권한 외에 다음과 같은 Windows 사용 권한이 추가적으로 필요합니다.

  • Notification Services 엔진을 실행하는 데 사용되는 계정은 SQLServer2005NotificationServicesUser$ComputerName Windows 그룹의 멤버여야 합니다. 이 계정을 통해 서비스를 실행하는 데 사용되는 Notification Services 바이너리에 액세스할 수 있습니다. NS$instanceName Windows 서비스를 사용하여 엔진을 실행하면 인스턴스를 등록할 때 Notification Services에서 SQLServer2005NotificationServicesUser$ComputerName 그룹에 서비스 계정을 추가합니다.
    Notification Services 바이너리에 액세스해야 하는 다른 모든 구성 요소에는 SQLServer2005NotificationServicesUser$ComputerName 그룹의 멤버 자격도 필요할 수 있습니다. Notification Services 어셈블리 및 리소스는 GAC(전역 어셈블리 캐시)에 등록되어 있으므로 이 그룹의 멤버 자격 없이도 사용할 수 있습니다.
  • 이벤트 공급자에 폴더 및 기타 데이터베이스의 사용 권한이 필요한 경우가 있습니다. 예를 들어 파일 시스템 감시자 이벤트 공급자에는 이벤트 스키마를 설명하는 XSD(XML 스키마 정의) 파일에 대한 읽기 권한과 이벤트 파일을 두는 폴더에 대한 읽기 및 수정 권한이 필요합니다. SQL Server 이벤트 공급자에는 이벤트 원본으로 사용되는 데이터베이스 테이블 또는 뷰에 대한 읽기 권한이 필요합니다.
  • 배포자에는 SMTP(Simple Mail Transfer Protocol) 서버, SMS(Short Message Service), 웹 서버 또는 파일 시스템과 같은 배달 서비스로 알림을 배달하기 위한 권한이 필요합니다. 또한 XSLT(XSL 변환) 콘텐츠 포맷터를 사용하는 배포자의 경우 XSLT 파일에 대한 액세스 권한도 필요합니다.

보안 권장 사항

다음 섹션에서는 Notification Services 엔진, 구독 관리 인터페이스, 사용자 지정 이벤트 공급자, 사용자 지정 배달 프로토콜 및 기타 사용자 지정 응용 프로그램의 보안을 설정하기 위한 권장 사항을 제공합니다.

Notification Services 엔진

Notification Services 인스턴스를 배포할 때는 Notification Services 엔진에 대한 다음 보안 권장 사항을 고려하십시오.

  • 데이터베이스 액세스를 위해 Windows 인증을 사용하도록 엔진을 구성합니다.

  • 권한이 낮은 도메인 또는 로컬 계정에서 엔진을 실행합니다. 로컬 시스템, 로컬 서비스 또는 네트워크 서비스 계정이나 Administrators 그룹의 계정은 사용하지 마십시오.
    그러나 배달 프로토콜이 서비스가 실행되는 계정에 대해 추가 권한을 요구할 수 있습니다. 예를 들어 로컬 인터넷 정보 서비스(IIS) SMTP 서비스를 사용하여 알림을 보낼 경우 엔진이 실행되는 계정은 로컬 Administrators 그룹의 멤버여야 합니다. 그러나 원격 시스템에서 SMTP 서비스를 통해 알림을 보낼 때는 관리자 권한이 필요하지 않습니다.

  • Notification Services 인스턴스를 배포할 때는 각 엔진에 필요한 사용 권한만 있는지 확인합니다.
    단일 서버 배포의 경우 엔진은 인스턴스의 호스팅된 이벤트 공급자, 생성자 및 배포자를 모두 실행합니다. 엔진이 사용하는 계정은 NSRunService 데이터베이스 역할의 멤버 자격을 통해 필요한 데이터베이스 사용 권한을 얻어야 합니다.
    확장 배포의 경우 개별 엔진의 사용 권한을 제한하십시오. 예를 들어 엔진이 이벤트 공급자만 실행할 경우 해당 계정을 NSEventProvider 데이터베이스 역할의 멤버로 만들고 다른 데이터베이스 또는 서버 사용 권한은 부여하지 않도록 하여 해당 엔진 계정에 부여되는 데이터베이스 사용 권한을 제한합니다. 엔진이 엔진 구성 요소의 일부만 실행할 경우에는 NSRunService 역할을 사용하지 마십시오.

    [!참고] 응용 프로그램을 구성할 때 호스팅된 이벤트 공급자, 생성자 및 배포자 각각에 대해 시스템 이름을 지정하여 각 엔진이 실행하는 항목을 구성합니다.

  • Notification Services 엔진 구성 요소와 SQL Server 데이터베이스 엔진이 별도의 서버에 있는 경우 데이터베이스 엔진에 대해 TCP/IP 또는 명명된 파이프가 설정되었는지 확인합니다. 데이터베이스 엔진의 보안을 향상시키기 위해 대부분의 네트워크 프로토콜은 기본적으로 해제되어 있습니다.

  • 로그인 계정에 강력한 암호를 지정합니다. 강력한 암호에 대한 자세한 내용은 Microsoft Windows 설명서의 "강력한 암호 만들기"를 참조하십시오.

  • 사용자 지정 이벤트 공급자, 콘텐츠 포맷터 및 프로토콜과 같은 엔진에 의해 실행되는 모든 코드를 신뢰할 수 있는 원본에서 가져왔는지 확인합니다. Notification Services는 Notification Services 인스턴스를 만들고 업데이트하는 데 사용하는 인스턴스 구성 및 응용 프로그램 정의에 나열된 코드를 신뢰할 수 있는 원본에서 가져왔다고 가정합니다. 응용 프로그램을 정의할 때는 정규화된 어셈블리 이름을 사용하여 올바른 어셈블리가 로드되도록 합니다.

  • Notification Services는 프로토콜 헤더 필드의 유효성 검사를 수행할 수 없습니다. 따라서 응용 프로그램이 프로토콜 필드에 구독자, 구독자 장치 또는 구독 정보를 사용할 경우 사용자 입력에 대해 유효성 검사를 수행하거나 사용자가 정의하지 않은 응용 프로그램 정의 값을 사용하십시오. 악의적인 사용자 데이터의 예를 보려면 SQL 인젝션을 참조하십시오.

  • 파일이나 응용 프로그램 데이터가 들어 있는 모든 폴더를 보호하십시오. 폴더에 보안을 설정하는 방법은 파일 및 폴더 보안 설정을 참조하십시오.

Notification Services 엔진 호스팅

일반적으로 Notification Services 엔진은 Notification Services 인스턴스를 등록할 때 만드는 NS$instanceName Windows 서비스입니다. 그러나 이러한 Windows 서비스를 사용하는 대신 엔진을 자체의 응용 프로그램에 호스팅할 수 있습니다.

이 엔진은 데이터베이스 엔진에 로그인한 후 Notification Services 인스턴스를 실행합니다. Notification Services 엔진을 호스팅할 경우 원본 파일 및 이진 파일에 보안을 설정했는지 확인하십시오.

엔진을 호스팅하는 방법은 Notification Services 엔진 호스팅을 참조하십시오.

구독 관리 인터페이스

구독 관리 인터페이스를 사용하여 알림 응용 프로그램을 구독하고 구독을 만들 수 있습니다. 구독 관리 인터페이스는 NSSubscriberAdmin 데이터베이스 역할의 멤버 자격을 통해 인스턴스 및 응용 프로그램 데이터베이스에서 데이터베이스 사용 권한을 얻습니다.

구독 관리 인터페이스를 개발할 때는 다음의 보안 권장 사항을 고려하십시오.

  • 구독자 및 구독 데이터를 추가, 삭제 또는 수정하기 전에 구독자의 ID를 확인한 후 해당 ID와 일치하는 구독자 ID가 있는지 확인합니다.
  • NSSubscriberAdmin 데이터베이스 역할의 멤버 자격이 있는 계정이나 보다 높은 수준의 사용 권한이 있는 계정을 갖는 사용자나 응용 프로그램은 구독자 및 구독 데이터를 수정할 수 있습니다. 불필요한 사용 권한은 부여하지 말고 구독 관리 인터페이스가 사용하는 사용자 이름 및 암호를 보호하십시오.
  • 응용 프로그램의 데이터베이스 연결에 사용되는 사용자 이름 및 암호와 같은 중요한 정보는 일반 텍스트로 저장하지 말고 DPAPI(Data Protection Application Programming Interface)를 사용하여 중요한 정보를 암호화한 후 레지스트리에 저장합니다.
  • 응용 프로그램이 사용자 식별을 위해 주민등록번호와 같은 중요한 정보를 사용해야 할 경우 중요하지 않은 사용자 ID를 해당 사용자에게 제공한 후 데이터베이스의 조회 테이블을 사용하여 중요한 정보를 검색할 수 있습니다.

구독 관리 인터페이스는 대개 웹 응용 프로그램입니다. ASP.NET 응용 프로그램 보안 옵션에 대한 자세한 내용은 구독 관리 인터페이스 배포를 참조하십시오.

사용자 지정 이벤트 공급자

이벤트 공급자는 Notification Services 응용 프로그램에 이벤트 데이터를 전송합니다. 응용 프로그램에 대해 호스팅되었거나 호스팅되지 않은 사용자 지정 이벤트 공급자를 개발할 수 있습니다. 사용자 지정 이벤트 공급자를 개발할 때는 다음의 보안 권장 사항을 고려하십시오.

  • 이벤트 공급자가 NSEventProvider 데이터베이스 역할을 사용하여 이벤트를 전송하는지 확인합니다.
  • 모든 사용자 또는 응용 프로그램은 유효한 이벤트 공급자 이름을 가지며 응용 프로그램 데이터베이스에서 NSEventProvider 데이터베이스 역할의 멤버 자격이 있는 계정이나 보다 높은 수준의 사용 권한이 있는 계정을 가질 경우 이벤트를 전송할 수 있습니다. 불필요한 사용 권한은 부여하지 말고 호스팅되지 않은 이벤트 공급자가 사용하는 사용자 이름 및 암호를 보호하십시오.
  • 사용자 이름 및 암호와 같은 중요한 정보를 일반 텍스트로 저장하지 말고 DPAPI를 사용하여 중요한 정보를 암호화한 후 레지스트리에 저장합니다.
  • 모든 사용자 지정 구성 요소 원본 파일 및 이진 파일에 보안을 설정합니다.

호스팅된 사용자 지정 이벤트 공급자는 이벤트 공급자 호스트의 컨텍스트에서 이벤트를 전송하므로 이벤트를 전송하기 위해 호스팅된 이벤트 공급자 코드에 보안 자격 증명을 제공할 필요가 없습니다. 호스팅된 이벤트 공급자에는 다음 권장 사항이 적용됩니다.

  • 응용 프로그램을 만들 때 응용 프로그램 정의에 호스팅된 사용자 지정 이벤트 공급자에 대한 정보를 제공하십시오. Notification Services는 응용 프로그램 정의의 모든 정보를 신뢰합니다. 정규화된 어셈블리 이름을 사용하여 올바른 어셈블리가 로드되도록 합니다.

호스팅되지 않은 이벤트 공급자는 Notification Services 응용 프로그램 컨텍스트 외부에서 실행됩니다. 호스팅되지 않은 이벤트 공급자에는 다음 권장 사항이 적용됩니다.

  • 호스팅되지 않은 이벤트 공급자는 Notification Services에 의해 명시적으로 신뢰되지 않습니다. 따라서 호스팅되지 않은 이벤트 공급자 코드에는 보안 자격 증명을 제공해야 합니다. 지정된 계정은 데이터베이스 엔진 인스턴스에 로그인할 수 있어야 하며 관련된 데이터베이스 사용자 계정은 각 인스턴스 및 응용 프로그램 데이터베이스에서 NSEventProvider 데이터베이스 역할의 멤버여야 합니다.

사용자 지정 배달 프로토콜

사용자 지정 배달 프로토콜은 Notification Services 엔진 컨텍스트에서 실행됩니다. 다른 모든 사용자 지정 구성 요소와 마찬가지로 원본 파일 및 이진 파일에 보안을 설정하여 중요한 정보를 보호하십시오.

Notification Services 관리 개체

NMO(Notification Services Management Objects)를 사용하여 Notification Services 인스턴스를 구성하거나 응용 프로그램을 정의하거나 관리 응용 프로그램을 개발할 경우 원본 및 이진 파일의 보안을 설정해야 합니다. 인스턴스 및 응용 프로그램 데이터베이스가 들어 있는 파일에는 서버 이름, 사용자 이름 및 암호와 같은 중요한 정보가 포함될 수 있습니다.

인스턴스 및 응용 프로그램 메타데이터와 기타 파일에 대한 자세한 내용은 파일 및 폴더 보안 설정을 참조하십시오.

참고 항목

개념

Notification Services 보안 설정

관련 자료

SQL Server의 보안 고려 사항
Notification Services 배포

도움말 및 정보

SQL Server 2005 지원 받기