다음을 통해 공유


보안 확장 프로그램 예제 추가 정보

이 예제는 SQL Server 2005 및 SQL Server 2008에서만 작동합니다. SQL Server 2005보다 이전 버전의 SQL Server에서는 작동하지 않습니다.

CustomSecurity 보안 확장 프로그램 예제에서는 SQL Server와 함께 폼 인증을 사용하여 Reporting Services에서 작동하는 사용자 지정 보안 모델을 제공합니다. 이 예제는 Itanium 기반 운영 체제에서 지원되지 않습니다.

ms160724.security(ko-kr,SQL.100).gif보안 정보:
보안 확장 예제는 프로덕션 환경에서 배포 및 테스트할 수 없습니다. 일반적으로 다른 보안 확장으로 마이그레이션한 후에 Windows 인증으로 다시 전환하는 것은 좋지 않습니다. 이렇게 하면 보고서 서버 데이터베이스에서 사용자 지정 보안 설명자는 있지만 Windows 인증 보안 설명자는 없는 항목에 액세스하려고 할 때 오류가 발생할 수 있습니다. 다시 전환하려면 Reporting Services를 다시 설치하고 Windows 사용자에 대한 역할 기반 보안을 수동으로 다시 적용해야 합니다. 이 예제를 사용하기 전에 구성 파일을 백업해야 합니다.

중요

예제는 교육용으로만 제공되므로 프로덕션 환경에서 사용하기에 적합하지 않으며 프로덕션 환경에서 테스트되지 않았습니다. Microsoft에서는 이러한 예제에 대해 기술 지원을 제공하지 않습니다. 시스템 관리자의 허가 없이 프로덕션 SQL Server 데이터베이스 또는 보고서 서버에 예제 응용 프로그램 및 어셈블리를 연결하거나 사용해서는 안 됩니다. Microsoft는 이러한 예제에 대한 기술 지원을 제공하지 않습니다. 시스템 관리자의 허가 없이 프로덕션 SQL Server 데이터베이스 또는 보고서 서버에 예제 응용 프로그램 및 어셈블리를 연결하거나 사용해서는 안 됩니다.

요구 사항

CustomSecurity 예제를 실행하려면 Visual Studio와 Visual C# 또는 Visual Basic에 대해 잘 알고 있어야 하며 다음 응용 프로그램이 설치되어 있어야 합니다.

  • Microsoft Visual Studio 2005 또는 호환 개발 환경(프로젝트 파일 검토용)
  • Microsoft .NET Framework 2.0
  • SQL Server(Reporting Services 포함)
  • Reporting Services 예제
  • 네트워크에서 액세스할 수 있는 보고서 서버. 확장 프로그램 예제를 사용하여 추가 데이터 처리 기능을 서버에 추가하려는 경우에 필요합니다.

중요

SQL Server 예제 및 예제 데이터베이스를 보거나 사용하려면 먼저 다운로드하여 설치해야 합니다. 자세한 내용은 SQL Server 예제 및 예제 데이터베이스 설치 시 고려 사항를 참조하십시오.

위치

이 예제의 기본 위치는 다음과 같습니다.

C:\Program Files\Microsoft SQL Server\100\Samples\Reporting Services\ Extension Samples\FormsAuthentication Sample

예제 빌드

우선 확장 프로그램을 컴파일하고 설치해야 합니다. 이 절차에서는 Reporting Services를 기본 위치인 C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services에 설치했다고 가정합니다. 이 항목의 나머지 부분에서는 이 위치를 <install>로 표시합니다.

강력한 이름 키 파일을 생성하지 않았다면 다음 지침에 따라 해당 키 파일을 생성합니다.

강력한 이름의 키 파일을 생성하려면

  1. Microsoft Visual Studio 2005 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.

    -- 또는 --

    Microsoft .NET Framework 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.

  2. 디렉터리 변경 명령(CD)을 사용하여 명령 프롬프트 창의 현재 디렉터리를 예제가 설치된 폴더로 변경합니다.

    참고

    예제가 있는 폴더를 확인하려면 시작 단추를 클릭하고 모든 프로그램, Microsoft SQL Server, 설명서 및 자습서를 차례로 가리킨 다음 예제 디렉터리를 클릭합니다. 기본 설치 위치가 사용된 경우 예제는 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples에 있습니다.

  3. 명령 프롬프트에서 다음 명령을 실행하여 키 파일을 생성합니다.

    sn -k SampleKey.snk

    중요

    강력한 이름 키 쌍에 대한 자세한 내용은 MSDN의 .NET Development Center에서 "Security Briefs: Strong Names and Security in the .NET Framework"를 참조하십시오.

Visual Studio 2005를 사용하여 예제를 컴파일하려면

  1. Microsoft Visual Studio 2005에서 CustomSecurity.sln을 엽니다. 예제를 기본 위치에 설치한 경우 C:\Program Files\Microsoft SQL Server\100\Samples\Reporting Services\Extensions에서 예제에 액세스할 수 있습니다.

  2. 솔루션 탐색기에서 CustomSecurity 프로젝트를 선택합니다.

  3. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

    참조 추가 대화 상자가 열립니다.

  4. .NET 탭을 클릭합니다.

  5. 찾아보기를 클릭하고 로컬 드라이브에서 Microsoft.ReportingServices.Interfaces를 찾습니다. 기본적으로 어셈블리는 <install>\ReportServer\bin 디렉터리에 있습니다. 확인을 클릭합니다.

    선택한 참조가 이 프로젝트에 추가됩니다.

    참고

    참조가 프로젝트에 이미 추가되었을 수도 있습니다. 이 경우에는 참조를 다시 추가할 필요가 없습니다.

  6. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

예제 배포

예제를 컴파일한 후에는 보고서 서버를 설치하기 위해 DLL과 ASPX 페이지를 적절한 하위 디렉터리로 복사해야 합니다.

예제를 배포하려면

  1. Microsoft.Samples.ReportingServices.CustomSecurity.dll 및 Microsoft.Samples.ReportingServices.CustomSecurity.pdb를 <install>\ReportServer\bin 디렉터리로 복사합니다.

  2. Microsoft.Samples.ReportingServices.CustomSecurity.dll 및 Microsoft.Samples.ReportingServices.CustomSecurity.pdb를 <install>\ReportManager\bin 디렉터리로 복사합니다.

  3. Logon.aspx 페이지를 <install>\ReportServer 디렉터리로 복사합니다.

  4. UILogon.aspx 페이지를 <install>\ReportManager\Pages 디렉터리로 복사합니다.

어셈블리 및 로그온 페이지가 서버로 복사된 후에는 보고서 서버 구성 파일을 수정해야 합니다.

중요

변경에 앞서 모든 구성 파일의 백업 복사본을 만듭니다.

RSReportServer.config 파일을 수정하려면

  1. 메모장 같은 간단한 텍스트 편집기나 Visual Studio 2005를 사용하여 RSReportServer.config 파일을 엽니다. RSReportServer.config는 <install>\ReportServer 디렉터리에 있습니다.

  2. <AuthenticationTypes> 요소를 찾아 다음과 같이 설정을 변경합니다.

    <Authentication>
    <AuthenticationTypes>
    <Custom/>
    </AuthenticationTypes>
    <EnableAuthPersistence>true</EnableAuthPersistence>
    </Authentication>
    
  3. <Extensions> 요소 내에서 <Security> 및 <Authentication> 요소를 찾아 다음과 같이 설정을 변경합니다.

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    <Authentication>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,
     Microsoft.Samples.ReportingServices.CustomSecurity" />
    </Authentication>
    

    .NET Framework 보안 및 Reporting Services에 대한 자세한 내용은 안전한 개발(Reporting Services)을 참조하십시오.

  4. <UI> 요소를 찾아 다음과 같이 업데이트합니다.

    <UI>
       <CustomAuthenticationUI>
          <loginUrl>/Pages/UILogon.aspx</loginUrl>
             <UseSSL>True</UseSSL>
       </CustomAuthenticationUI>
       <ReportServerUrl>http://<server>/ReportServer</ReportServerUrl>
    </UI>
    

참고

SSL(Secure Sockets Layer) 인증서가 설치되지 않은 개발 환경에서 보안 확장 프로그램 예제를 실행 중인 경우 이전 구성 항목에서 <UseSSL> 요소의 값을 False로 변경해야 합니다. Reporting Services와 폼 인증을 결합할 때는 항상 SSL을 사용하는 것이 좋습니다.

해당 확장에 FullTrust 권한을 부여하는 사용자 지정 보안 확장에 대한 코드 그룹을 추가해야 합니다. 이 코드 그룹을 RSSrvPolicy.config 파일에 추가하면 됩니다.

RSSrvPolicy.config 파일을 수정하려면

  1. <install>\ReportServer 디렉터리에 있는 RSSrvPolicy.config 파일을 엽니다.

  2. 아래에 표시된 것처럼 보안 정책 파일에서 URL 멤버 자격이 $CodeGen인 기존 코드 그룹 뒤에 다음 <CodeGroup> 요소를 추가한 다음 항목을 다음과 같이 RSSrvPolicy.config에 추가합니다.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       Name="SecurityExtensionCodeGroup"
       Description="Code group for the sample security extension"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll"
       />
    </CodeGroup>
    

참고

간단한 예제를 위해 폼 인증 예제에서는 이름을 짧게 지정하며 보안 정책 파일에 단순한 URL 멤버 자격 항목을 필요로 합니다. 실제 프러덕션 보안 확장 구현에서는 강력한 이름의 어셈블리를 만들고 어셈블리에 대한 보안 정책을 추가할 때 강력한 이름의 멤버 자격을 사용해야 합니다. 강력한 이름의 어셈블리에 대한 자세한 내용은 MSDN의 강력한 이름의 어셈블리 생성 및 사용(Creating and Using Strong-Named Assemblies) 항목을 참조하십시오.

다음으로 보고서 관리자 정책 파일의 "My Computer" 코드 그룹에 대한 권한 수준을 높입니다.

RSMgrPolicy.config 파일을 수정하려면

  1. <install>\ReportManager 디렉터리에 있는 보고서 관리자 정책 파일 RSMgrPolicy.config를 엽니다.

  2. RSMgrPolicy.config에서 다음 코드 그룹을 찾고 다음과 같이 PermissionSetName 특성을 Execution에서 FullTrust로 변경합니다.

    <CodeGroup 
            class="FirstMatchCodeGroup" 
            version="1" 
            PermissionSetName="FullTrust"
            Description="This code group grants MyComputer code Execution 
    permission. ">
        <IMembershipCondition 
                class="ZoneMembershipCondition"
                version="1"
                Zone="MyComputer" />
    

폼 인증을 사용하려면 보고서 관리자 및 보고서 서버에 대한 Web.config 파일을 수정해야 합니다.

보고서 서버에 대한 Web.config 파일을 수정하려면

  1. 텍스트 편집기에서 Web.config 파일을 엽니다. 기본적으로 이 파일은 <install>\ReportServer 디렉터리에 있습니다.

  2. <identity> 요소를 찾아 Impersonate 특성을 false로 설정합니다.

    <identity impersonate="false" />
    
  3. <authentication> 요소를 찾아 Mode 특성을 Forms로 변경합니다.

  4. 다음의 <forms> 요소를 <authentication> 요소의 자식으로 추가하고 loginUrl, name, timeoutpath 특성을 다음과 같이 설정합니다.

    <authentication mode="Forms">
       <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" 
                   path="/"></forms>
       </authentication>
    
  5. 다음 <authorization> 요소를 <authentication> 요소의 바로 다음에 추가합니다.

    <authorization> 
       <deny users="?" />
    </authorization>
    

    그러면 인증되지 않은 사용자가 보고서 서버에 액세스하는 권한이 거부됩니다. 이전에 설정한 <authentication> 요소의 loginUrl 특성은 인증되지 않은 요청을 Logon.aspx 페이지로 리디렉션합니다.

보고서 관리자에 대한 Web.config 파일을 수정하려면

  1. 보고서 관리자에 대한 Web.config를 엽니다. 이 파일은 <install>\ReportManager 디렉터리에 있습니다.

  2. <identity impersonate= "true" /> 섹션을 찾아 다음과 같이 변경하여 가장을 비활성화합니다. <identity impersonate="false" />.

  3. <appSettings> 요소에 다음 키를 추가합니다.

    <add key="ReportServer" value="<Server Name>"/>
    <add key="ReportServerInstance" value="<Instance Name>"/>
    
  4. <Server Name> 값을 보고서 서버의 이름으로, <Instance Name> 값을 보고서 서버와 관련된 인스턴스의 이름으로 변경합니다.

UserAccounts 데이터베이스 만들기

예제에는 SQL Server 데이터베이스의 폼 예제에 대한 사용자 저장소를 설정할 수 있는 데이터베이스 스크립트인 Createuserstore.sql이 들어 있습니다.

UserAccounts 데이터베이스를 만들려면

  1. SQL Server Management Studio를 연 다음 SQL Server의 로컬 인스턴스에 연결합니다.

  2. SQL 스크립트 파일인 Createuserstore.sql을 찾습니다. 스크립트 파일은 예제 프로젝트 파일 안에 있습니다.

  3. 쿼리를 실행하여 UserAccounts 데이터베이스를 만듭니다.

  4. SQL Server Management Studio를 종료합니다.

예제 테스트

다음 프로시저는 확장 예제를 테스트합니다. 관리자를 등록하면 사용자 이름, 암호 해시, 솔트 값이 UserAccounts 데이터베이스의 users 테이블에 추가됩니다. 보고서 서버 구성 파일에 사용자 이름도 입력해야 합니다. 그런 다음 같은 사용자로 로그온하여 보고서 서버가 확장 어셈블리를 적절하게 로드하고 암호 확인 루틴 작업이 정확한지 확인합니다.

예제를 테스트하려면

  1. 명령 프롬프트에서 다음 명령을 실행하여 Reporting Services 서비스를 다시 시작합니다.

    net stop "SQL Server Reporting Services (<Instance Name>)"
    net start "SQL Server Reporting Services (<Instance Name>)"
    
  2. 보고서 관리자를 엽니다. 브라우저에서 Reports 가상 디렉터리에 액세스하여 보고서 관리자를 열거나 Reporting Services 프로그램 메뉴에서 보고서 관리자를 열 수 있습니다.

  3. 사용자 이름과 암호를 입력하고 사용자 등록을 클릭하여 사용자를 accounts 데이터베이스에 추가합니다.

  4. RSReportServer.config 파일을 엽니다. <Security> 요소를 찾아 이전에 등록한 사용자 이름을 다음과 같이 추가합니다.

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    
  5. UILogon.aspx 페이지로 돌아가 사용자 이름과 암호를 다시 입력하고 로그온을 클릭합니다.

보고서 관리자 및 보고서 서버에 제약 없이 액세스할 수 있어야 합니다. 만든 관리자 사용자는 해당 보고서 서버에서 로컬 컴퓨터에 있는 기본 제공 관리자 계정과 동등한 권한을 갖습니다. 간단한 예를 위해 이 예제에서는 한 사용자만 관리자로 지정할 수 있습니다. 기본 제공 관리자 계정이 있으면 보고서 서버에서 추가 사용자를 등록하고 역할을 할당할 수 있습니다.

참고

관리자 사용자를 보고서 서버의 공식 시스템 관리자와 내용 관리자(루트 폴더) 역할에 추가해야 합니다. 그러면 보고서 서버 데이터베이스에 비어 있는 보안 설명자가 존재하는 것을 방지할 수 있습니다. 시스템 관리자 및 내용 관리자 역할에 대한 자세한 내용은 미리 정의된 역할 사용을 참조하십시오.

웹 서비스에서 사용자 지정 보안 사용

Windows 인증과 마찬가지로 폼 인증을 웹 서비스 API에서 사용할 수 있습니다. 하지만 웹 서비스 코드에서 LogonUser를 호출하고 현재 사용자의 자격 증명을 전달해야 합니다. 또한 사용자의 웹 서비스 클라이언트는 Internet Explorer나 다른 웹 브라우저에서 제공하는 자동 쿠키 관리의 장점을 활용할 수 없습니다. 쿠키 관리를 포함하려면 ReportingService2005 프록시 클래스를 확장해야 합니다. 웹 서비스 클래스의 GetWebRequestGetWebResponse 메서드를 오버라이드하여 이를 확장할 수 있습니다.

확장 예제 디버깅

디버거에서 확장 예제를 실행하면 발생할 수 있는 여러 문제점을 해결할 수 있을 뿐 아니라 코드를 단계적으로 수행하는 데 효과적이며 보고서 서버 인증 및 인증 프로세스를 진행 시점에서 확인할 수 있습니다.

Microsoft .NET Framework는 예제 코드를 분석하는 데 사용할 수 있는 여러 디버깅 도구를 제공합니다. 다음 절차에서는 Visual Studio 2005를 사용하여 이전 예제를 디버깅합니다.

폼 인증 예제 코드를 디버깅하려면

  1. 테스트 보고서 서버에서 Visual Studio를 시작하고 CustomSecurity.sln을 엽니다.

  2. Visual Studio에서 예제 코드가 열려 있는 상태에서 Internet Explorer를 열어 보고서 관리자로 이동합니다.

  3. Visual Studio로 전환하여 사용자 지정 보안 확장 프로그램 프로젝트 코드에 몇 개의 중단점을 설정합니다.

  4. 확장 프로젝트를 활성 창 상태로 두고 디버그 메뉴에서 프로세스를 클릭합니다.

    프로세스 대화 상자가 열립니다.

  5. 프로세스 목록에서 Aspnet_wp.exe 프로세스(응용 프로그램을 IIS?6.0에서 배포할 경우 W3wp.exe)를 선택하고 연결을 클릭합니다.

  6. 프로세스에 연결 대화 상자에서 Common Language Runtime 프로그램 종류를 선택하고 확인을 클릭합니다. 디버깅 성능을 개선하려면 디버깅할 프로그램 종류로 Native를 선택하지 않도록 합니다.

  7. 예제를 실행하면 로그온 폼이 나타납니다. 로그온 폼에 사용자 자격 증명을 입력하고 Logon 단추를 클릭합니다.

    처리 중에 중단점을 만날 때마다 디버거는 해당 지점에서 실행을 중지합니다.

  8. F11 키를 사용하여 코드를 단계별로 실행합니다. Visual Studio를 사용하여 디버깅하는 방법은 Visual Studio 2005 설명서를 참조하십시오.

참고

이런 방식의 디버깅에는 많은 리소스와 프로세서 시간이 소요됩니다. 실행에 어려움이 있을 경우 Visual Studio를 닫고 IIS를 다시 설정한 후 CustomSecurity 솔루션을 ASP.NET 작업자 프로세스에 연결하고 보고서 관리자에 로그온하여 다시 시작합니다.

확장 예제 제거

일반적으로 좋은 방법은 아니지만 예제를 확인한 후 Windows 인증으로 다시 전환할 수도 있습니다.

Windows 보안으로 전환하려면

  1. 백업 복사본에서 Web.config 및 RSReportServer.config 파일을 복원합니다. 이렇게 하면 보고서 서버에 대한 인증 및 권한 부여 방법이 기본 Windows 보안으로 설정됩니다. 또한 보고서 서버 구성 파일에 입력한 확장 프로그램에 대한 모든 항목이 제거됩니다.

  2. 보고서 서버 가상 디렉터리에 대한 인터넷 정보 서비스(IIS)에 익명 액세스를 허용하지 않습니다.

구성 정보를 제거한 후에는 보고서 서버에서 보안 확장을 사용할 수 없습니다. 보안 확장 예제에서 보고서 서버를 실행하는 동안 만든 보안 설명자를 제거할 필요는 없습니다. 보고서 서버는 Windows 인증이 가능할 때 보고서 서버를 호스팅하는 컴퓨터의 BUILTIN\Administrators 그룹에 시스템 관리자 역할을 자동으로 할당합니다. 하지만 Windows 사용자에 대한 역할 기반 보안을 수동으로 다시 적용해야 합니다.

일반적으로 다른 보안 확장으로 마이그레이션한 후에 Windows 인증으로 다시 전환하는 것은 좋지 않습니다. 이렇게 하면 보고서 서버 데이터베이스에서 사용자 지정 보안 설명자는 있지만 Windows 인증 보안 설명자는 없는 항목에 액세스하려고 할 때 오류가 발생할 수 있습니다.

참고 항목

태스크

Reporting Services 예제

관련 자료

확장 프로그램 예제(Reporting Services)
보안 확장 프로그램 구현

도움말 및 정보

SQL Server 2008 지원 받기