보안 확장 프로그램 예제

업데이트: 2005년 12월 5일

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

SQL Server 예제는 설치하는 동안 자동으로 설치되지 않습니다. 예제 설치 방법에 대한 지침은 예제 설치를 참조하십시오.

ms160724.security(ko-kr,SQL.90).gif보안 정보:
보안 확장 예제는 프로덕션 환경에서 배포 및 테스트할 수 없습니다. 일반적으로 다른 보안 확장으로 마이그레이션한 후에 Windows 인증으로 다시 전환하는 것은 좋지 않습니다. 이렇게 하면 보고서 서버 데이터베이스에서 사용자 지정 보안 설명자는 있지만 Windows 인증 보안 설명자는 없는 항목에 액세스하려고 할 때 오류가 발생할 수 있습니다. 다시 전환하려면 Reporting Services를 다시 설치하고 Windows 사용자에 대한 역할 기반 보안을 수동으로 다시 적용해야 합니다. 이 예제를 사용하기 전에 구성 파일을 백업해야 합니다.
ms160724.note(ko-kr,SQL.90).gif중요:
예제는 교육용으로만 제공되므로 프로덕션 환경에 사용하기에 적합하지 않으며 프로덕션 환경에서 테스트를 수행하지 않았습니다. Microsoft는 이러한 예제에 대한 기술 지원을 제공하지 않습니다. 시스템 관리자의 허가 없이 예제 응용 프로그램 및 어셈블리를 프로덕션 SQL Server 데이터베이스 또는 보고서 서버에 연결하거나 이러한 데이터베이스 또는 보고서 서버에서 사용해서는 안 됩니다.

요구 사항

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

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

위치

이 예제는 기본적으로 Reporting Services 예제 디렉터리의 Extension Samples\FormsAuthentication Sample 하위 디렉터리에 있습니다.

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

예제 빌드

우선 확장 프로그램을 컴파일하고 설치해야 합니다. 이 절차에서는 Reporting Services를 기본 위치인 C:\Program Files\Microsoft SQL Server\MSSQL.3\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

    ms160724.note(ko-kr,SQL.90).gif중요:
    강력한 이름 키 쌍에 대한 자세한 내용은 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\MSSQL\Reporting Services\Samples\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 디렉터리로 복사하고 UILogon.aspx 페이지를 <install>\ReportManager\Pages 디렉터리로 복사합니다.

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

ms160724.note(ko-kr,SQL.90).gif중요:
변경에 앞서 모든 구성 파일의 백업 복사본을 만듭니다.

RSReportServer.config 파일을 수정하려면

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

  2. <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에 대한 자세한 내용은 Understanding Code Access Security in Reporting Services를 참조하십시오.

RSWebApplication.config 파일을 수정하려면

  1. 다음으로 보고서 관리자 구성 파일인 RSWebApplication.config를 엽니다. 이 파일은 <install>\ReportManager 디렉터리에 있습니다.

  2. <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인 기존 코드 그룹을 찾아 항목을 다음과 같이 rssrvpolicy.config에 추가합니다.

    [!참고] Analysis Services를 설치한 경우 Url="C:\Program Files\Microsoft SQL Server</CODE>MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dllMSSQL.3으로 변경해야 합니다.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    <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\MSSQL.2\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" />.

익명 인증 구성

기본적으로 Windows 사용자 그룹 Guests에는 IUSR_computername 계정이 포함됩니다. 이 계정은 로컬에서 처음 로그인하여 Logon.aspx 페이지를 보는 데 사용합니다. 폼 인증을 지원하려면 ReportServer 가상 디렉터리에 대한 익명 액세스를 허용해야 합니다. 기본적으로 익명 액세스는 허용되지 않습니다.

익명 인증을 허용하려면

  1. 인터넷 정보 서비스에서 일반적으로 기본 웹 사이트의 멤버인 ReportServer 가상 디렉터리를 선택하고 속성 탭을 엽니다.

  2. 디렉터리 보안 탭을 클릭합니다.

  3. 익명 액세스 및 인증 제어 섹션에서 편집을 클릭합니다.

    인증 방법 대화 상자가 나타납니다.

  4. 익명 액세스 확인란을 선택합니다.

  5. 확인을 클릭합니다.

    Reports 가상 디렉터리에 대하여 위의 단계를 반복합니다.

UserAccounts 데이터베이스 만들기

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

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

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

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

  3. 스크립트의 끝 부분에서 "LocalMachine"을 찾아서 자신의 컴퓨터 이름으로 바꿉니다. Windows 2003 사용자의 경우 LocalMachine\ASPNETNT AUTHORITY\NETWORK SERVICE로 바꿉니다(IIS 5 호환성 모드일 경우는 해당하지 않음).

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

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

예제 테스트

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

보고서 프로젝트를 만들려면

  1. 명령 프롬프트에서 Iisreset.exe를 실행하여 IIS를 다시 시작합니다.

  2. 보고서 관리자를 엽니다. Reporting Services 프로그램 메뉴에서 또는 브라우저에서 Reports 가상 디렉터리에 액세스하여 이 작업을 수행할 수 있습니다.

  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나 다른 웹 브라우저에서 제공하는 자동 쿠키 관리의 장점을 활용할 수 없습니다. 쿠키 관리를 포함하려면 Microsoft.ReportingServices 프록시 클래스를 확장해야 합니다. 웹 서비스 클래스의 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 및 RSWebApplication.config 파일을 복원합니다. 이렇게 하면 보고서 서버에 대한 인증 및 인증 방법이 기본 Windows 보안으로 설정됩니다. 또한 보고서 서버나 보고서 관리자 구성 파일에 입력한 확장에 대한 모든 항목이 제거됩니다.

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

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

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

참고 항목

작업

SQL Server Reporting Services 예제

관련 자료

확장 프로그램 예제(Reporting Services)
Implementing a Security Extension

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2005년 12월 5일

변경된 내용
  • 키 파일의 이름 및 위치를 포함하여 키 파일 생성 방법에 대한 정보를 변경했습니다.