Константин Косинский
Иногда возникает потребность обеспечить для своих отчетов доступ с вводом логина и пароля в через Web-форму, например, для встраивания в не Microsoft-решения. А так как SSRS является обычным ASP.NET приложением, то возникает идея применить обычную Forms Authentication. Из коробки система делать это не умеет, и нужно разработать небольшое расширение. К счастью, на Codeplex уже есть готовая наработка, которую нужно просто скомпилировать и правильно настроить.
По умолчанию примеры будут лежать в папке <system_drive>:\Program Files\Microsoft SQL Server\100\Samples
- Запускаем командную строку Visual Studio и в папке с примерами выполняем команду
sn -k SampleKey.snk
- Открываем в Visual Studio 2005 или выше проект CustomSecurity из папки Reporting Services\Extensions (не забудьте про UAC, т.к. компиляция в папке по умолчанию требует админских прав) 
- Добавляем Reference на библиотеку Microsoft.ReportingServices.Interfaces, которая лежит в подпапке ReportServer\bin инсталяции Reporting Services (у меня это C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services) 
- После этого про собираем приложение 
- Дальше копируюем только что скомпилированную библиотеку Microsoft.Samples.ReportingServices.CustomSecurity.dll в папки <install>\ReportServer\bin и <install>\ReportManager\bin 
- Файл Logon.aspx в <install>\ReportServer, а UILogon.aspx в <install>\ReportManager\Pages 
- Редактируем файл RSReportServer.config из папки <install>\ReportServer: 
- Содержимое секции AuthenticationTypes заменяем на <Custom/> 
- В подсекцию <Security> секции <Extensions> добавляем:
 
      <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization,
 Microsoft.Samples.ReportingServices.CustomSecurity" >
        <Configuration>
          <AdminConfiguration>
            <UserName>username</UserName>
          </AdminConfiguration>
        </Configuration>
      </Extension>
- В подсекцию <Authentication> секции <Extensions> добавляем:
<Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,
Microsoft.Samples.ReportingServices.CustomSecurity" />
<CustomAuthenticationUI>
      <loginUrl>/Pages/UILogon.aspx</loginUrl>
      <UseSSL>False</UseSSL>
 </CustomAuthenticationUI>
- Редактируем файл RSSrvPolicy.config из папки <install>\ReportServer, добавляем в него:
<CodeGroup
              class="UnionCodeGroup"
              version="1"
              Name="SecurityExtensionCodeGroup"
              Description="Code group for the sample security extension"
              PermissionSetName="FullTrust">
                <IMembershipCondition
                class="UrlMembershipCondition"
                version="1"
                Url="путь к библиотеке Microsoft.Samples.ReportingServices.CustomSecurity.dll"
/>
              </CodeGroup>
- Редактируем файл RSMgrPolicy.config из папки <install>\ReportManager, у CodeGroup для MyComputer свойство PermissionSetName делаем равным FullTrust 
- Редактируем файл Web.config из папки <install>\ReportServer. Заменяем конструкцию:    <authentication mode="Windows" />
    <identity impersonate="true" />
на    <authentication mode="Forms" >
      <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" path="/"></forms>
    </authentication>
    <authorization>
      <deny users="?" />
    </authorization>
    <identity impersonate="false" />
- Редактируем файл Web.config из папки <install>\ReportManager.  
<identity impersonate="true" />
на
<identity impersonate="false" />
Настройка аутентификации должна остаться Windows
    <add key="ReportServer" value="имя сервера"/>
    <add key="ReportServerInstance" value="RS_MSSQLSERVER"/>
Имя экземпляра SSRS может быть другм проще всего его выяснить выполнив следующую PowerShell команду:
get-wmiobject -namespace "root\Microsoft\SqlServer\ReportServer" -class "__Namespace" / Select Name
- Выполняем скрипт Createuserstore.SQL из папки C:\Program Files\Microsoft SQL Server\100\Samples\Reporting Services\Extension Samples\FormsAuthentication Sample\cs\FormsAuthentication 
- Все практически готово. Заходим браузером на Web Service URL вашего SSRS и видим следующую картину:
- Создаем нового юзера при помощи кнопки Register User. Он будет добавлен в таблицу Users созданной два шага назад базы данных. После этого нажимаем Logon И получаем сообщению, что у нашего юзера не хватает прав:
- Снова редактируем файл RSReportServer.config из папки <install>\ReportServer в ранее добавленном блоке меняем имя пользователя:
 <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization,
 Microsoft.Samples.ReportingServices.CustomSecurity" >
        <Configuration>
          <AdminConfiguration>
            <UserName>Имя пользователя</UserName>
          </AdminConfiguration>
        </Configuration>
      </Extension>
- После этого перезапускаем сервис Reporting Services и обновляем страницу. Пользователь получает админский доступ к Reporting Services.
Для того чтобы настроить права для других пользователей можно воспользоваться стандартным интерфейсом Report Manager"а (пользователей сначала нужно завести в базу аккаунтов). Связывание производится просто по имени.
Запись в базе UserAccounts:
Настройка прав:
После этого можно отредактировать внешний вид страниц входа в систему (по крайней мере, убрать кнопку регистрации).