Настройка веб-сайта, использующего службы приложений (VB)Configuring a Website that Uses Application Services (VB)

по Скотт Митчеллby Scott Mitchell

Скачать код или скачать PDFDownload Code or Download PDF

В ASP.NET версии 2,0 появился ряд служб приложений, которые являются частью .NET Framework и служат набором стандартных блочных служб, которые можно использовать для добавления широких функциональных возможностей в веб-приложение.ASP.NET version 2.0 introduced a series of application services, which are part of the .NET Framework and serve as a suite of building block services that you can use to add rich functionality to your web application. В этом учебнике рассматривается настройка веб-сайта в рабочей среде для использования служб приложений и устранение распространенных проблем с управлением учетными записями пользователей и ролями в рабочей среде.This tutorial explores how to configure a website in the production environment to use application services and addresses common issues with managing user accounts and roles on the production environment.

ВведениеIntroduction

В ASP.NET версии 2,0 появился ряд служб приложений, которые являются частью .NET Framework и служат набором стандартных блочных служб, которые можно использовать для добавления широких функциональных возможностей в веб-приложение.ASP.NET version 2.0 introduced a series of application services, which are part of the .NET Framework and serve as a suite of building block services that you can use to add rich functionality to your web application. В число служб приложений входят:The application services include:

  • Членство — API для создания учетных записей пользователей и управления ими.Membership - an API for creating and managing user accounts.
  • Роли — API для категоризации пользователей по группам.Roles - an API for categorizing users into groups.
  • Profile — API для хранения пользовательского содержимого, определяемого пользователем.Profile - an API for storing custom, user-specific content.
  • Схема сайта — API для определения логической структуры сайта в виде иерархии, которую затем можно отобразить с помощью элементов управления навигацией, таких как меню и панели навигации.Site Map - an API for defining a site s logical structure in the form of a hierarchy, which can then be displayed via navigation controls, such as menus and breadcrumbs.
  • Персонализация — API для обслуживания предпочтений настройки, чаще всего используемый с экземплярами WebPart.Personalization - an API for maintaining customization preferences, most often used with WebParts.
  • Мониторинг работоспособности — API для мониторинга производительности, безопасности, ошибок и других метрик работоспособности системы для работающего веб-приложения.Health Monitoring - an API for monitoring performance, security, errors, and other system health metrics for a running web application.

API-интерфейсы служб приложений не привязаны к определенной реализации.The application services APIs are not tied to a specific implementation. Вместо этого вы указываете службам приложений на использование определенного поставщика, и этот поставщик реализует службу с помощью определенной технологии.Instead, you instruct the application services to use a particular provider, and that provider implements the service using a particular technology. Наиболее часто используемые поставщики веб-приложений, размещенных в компании размещения в Интернете, — это поставщики, использующие реализацию базы данных SQL Server.The most commonly used providers for Internet-based web applications hosted at a web hosting company are those providers that use a SQL Server database implementation. Например, SqlMembershipProvider является поставщиком для API членства, который хранит сведения об учетной записи пользователя в базе данных Microsoft SQL Server.For example, the SqlMembershipProvider is a provider for the Membership API that stores user account information in a Microsoft SQL Server database.

Использование служб приложений и поставщиков SQL Server добавляет некоторые трудности при развертывании приложения.Using the application services and SQL Server providers adds some challenges when deploying the application. Для начинающих объекты базы данных служб приложений должны быть созданы должным образом как в базах данных разработки, так и в рабочей среде и соответствующим образом инициализированы.For starters, the application services database objects must be properly created on both the development and production databases and appropriately initialized. Существуют также важные параметры конфигурации, которые необходимо выполнить.There are also important configuration settings that need to be made.

Note

API-интерфейсы служб приложений разрабатывались с использованием модели поставщика— шаблона разработки, который позволяет предоставлять сведения о реализации API во время выполнения.The application services APIs were designed using the provider model, a design pattern that allows for an API s implementation details to be provided at runtime. .NET Framework поставляется с несколькими поставщиками служб приложений, которые можно использовать, например SqlMembershipProvider и SqlRoleProvider, которые являются поставщиками интерфейсов API членства и ролей, использующих реализацию SQL Server базы данных.The .NET Framework ships with a number of application service providers that can be used, such as the SqlMembershipProvider and SqlRoleProvider, which are providers for the Membership and Roles APIs that use a SQL Server database implementation. Вы также можете создать и подключить настраиваемый поставщик.You can also create and plug-in a custom provider. На самом деле, веб-приложение "проверки книги" уже содержит настраиваемого поставщика для API схемы узла (ReviewSiteMapProvider), который строит карту узла на основе данных в Genres и в таблицах Books в базе данных.In fact, the Book Reviews web application already contains a custom provider for the Site Map API (ReviewSiteMapProvider), which constructs the site map from the data in the Genres and Books tables in the database.

В этом учебнике объясняется, как расширить веб-приложение "Рецензирование книги" для использования API членства и ролей.This tutorial starts with a look at how I extended the Book Reviews web application to use the Membership and Roles APIs. Затем выполняется развертывание веб-приложения, которое использует службы приложений с реализацией базы данных SQL Server, и завершается с помощью решения распространенных проблем, связанных с управлением учетными записями пользователей и ролями в рабочей среде.It then walks through deploying a web application that uses application services with a SQL Server database implementation, and concludes by addressing common issues with managing user accounts and roles on the production environment.

Обновления для приложения "Рецензирование книг"Updates to the Book Reviews Application

В течение последних нескольких учебников веб-приложение "Рецензирование книг" было обновлено с статического веб-сайта на динамическое, управляемое данными веб-приложение, дополненное набором страниц администрирования для управления жанрами и проверками.Over the past couple tutorials the Book Reviews web application was updated from a static website to a dynamic, data-driven web application complete with a set of administration pages for managing genres and reviews. Однако этот раздел администрирования сейчас не защищен — любой пользователь, который знает (или догадать) URL-адрес страницы администрирования, может валтз и создавать, изменять и удалять рецензии на нашем сайте.However, this administration section is currently not protected - any user who knows (or guesses) the administration page URL can waltz in and create, edit, or delete reviews on our site. Распространенным способом защиты определенных частей веб-сайта является реализация учетных записей пользователей, а затем использование правил авторизации URL-адресов для ограничения доступа к определенным пользователям или ролям.A common way to protect certain portions of a website is to implement user accounts and then use URL authorization rules to restrict access to certain users or roles. В этом руководстве веб-приложение для рецензирования книг, доступное для загрузки, поддерживает учетные записи пользователей и роли.The Book Reviews web application available for download with this tutorial supports user accounts and roles. В ней определена одна роль Admin, и только пользователи этой роли могут получить доступ к страницам администрирования.It has a single role defined named Admin and only users in this role can access the administration pages.

Note

Я создал три учетные записи пользователей в веб-приложении рецензий книги: Скотт, Цзисунь и Алиса.I ve created three user accounts in the Book Reviews web application: Scott, Jisun, and Alice. Все три пользователя имеют одинаковый пароль: Password!All three users have the same password: password! Скотт и Цзисунь имеют роль администратора, а Алиса — нет.Scott and Jisun are in the Admin role, Alice is not. Страницы, не являющиеся администраторами сайта, по-прежнему доступны анонимным пользователям.The site s non-administration pages are still accessible to anonymous users. То есть вам не нужно выполнять вход для посещения сайта, если вы не хотите администрировать его. в этом случае необходимо войти в систему от имени пользователя в роли администратора.That is, you do not need to sign in to visit the site, unless you want to administer it, in which case you must sign in as a user in the Admin role.

Главная страница обзоров приложений в книге была обновлена и включает другой пользовательский интерфейс для прошедших проверку подлинности и анонимных пользователей.The Book Reviews application s master page has been updated to include a different user interface for authenticated and anonymous users. Если анонимный пользователь посещает сайт, он видит ссылку для входа в правом верхнем углу.If an anonymous user visits the site she sees a Login link in the upper right corner. Прошедший проверку подлинности пользователь видит сообщение "Добро пожаловать, username!"An authenticated user sees the message, "Welcome back, username!" и ссылку для выхода из нее. Кроме того, есть страница входа (~/Login.aspx), которая содержит веб-элемент управления Login, предоставляющий пользовательский интерфейс и логику для проверки подлинности посетителя.and a link to log out. There s also a login page (~/Login.aspx), which contains a Login Web control that provides the user interface and logic for authenticating a visitor. Создавать новые учетные записи могут только администраторы.Only administrators can create new accounts. (В папке ~/Admin есть страницы для создания учетных записей пользователей и управления ими.)(There are pages for creating and managing user accounts in the ~/Admin folder.)

Настройка интерфейсов API членства и ролейConfiguring the Membership and Roles APIs

Веб-приложение для рецензирования книг использует интерфейсы API членства и ролей для поддержки учетных записей пользователей и группирования этих пользователей в роли (а именно — роль администратора).The Book Reviews web application uses the Membership and Roles APIs to support user accounts and to group those users into roles (namely, the Admin role). Используются классы поставщика SqlMembershipProvider и SqlRoleProvider, так как необходимо хранить сведения об учетной записи и ролях в базе данных SQL Server.The SqlMembershipProvider and SqlRoleProvider provider classes are used because we want to store account and role information in a SQL Server database.

Note

Этот учебник не предназначен для подробного изучения при настройке веб-приложения для поддержки интерфейсов API членства и ролей.This tutorial is not intended to be a detailed examination at configuring a web application to support the Membership and Roles APIs. Подробные сведения об этих API и действиях, которые необходимо предпринять для настройки веб-сайта для их использования, см. в руководствах по безопасности веб-сайтов.For a thorough look at these APIs and the steps you need to take to configure a website to use them, please read my Website Security Tutorials.

Чтобы использовать службы приложений с SQL Server базой данных, необходимо сначала добавить объекты базы данных, используемые этими поставщиками, в базу данных, в которой будут храниться данные учетной записи пользователя и роли.To use the application services with a SQL Server database you must first add the database objects used by these providers to the database where you want the user account and role information stored. Эти необходимые объекты базы данных включают в себя множество таблиц, представлений и хранимых процедур.These requisite database objects include a variety of tables, views, and stored procedures. Если не указано иное, классы поставщиков SqlMembershipProvider и SqlRoleProvider используют базу данных SQL Server Express Edition с именем ASPNETDB, расположенную в папке Application s App_Data. Если такая база данных не существует, она автоматически создается с необходимыми объектами базы данных этими поставщиками во время выполнения.Unless specified otherwise, the SqlMembershipProvider and SqlRoleProvider provider classes use a SQL Server Express Edition database named ASPNETDB located in the application s App_Data folder; if such a database does not exist, it is automatically created with the necessary database objects by these providers at runtime.

Возможно, и, как правило, идеально подходят для создания объектов базы данных служб приложений в той же базе данных, где хранятся данные конкретного приложения.It is possible, and usually ideal, to create the application services database objects in the same database where the website s application-specific data is stored. .NET Framework поставляется с инструментом с именем aspnet_regsql.exe, который устанавливает объекты базы данных в указанной базе данных.The .NET Framework ships with a tool named aspnet_regsql.exe that installs the database objects on a specified database. Я восиспользовал это средство для добавления этих объектов в базу данных Reviews.mdf в папке App_Data (база данных разработки).I have gone ahead and used this tool to add these objects to the Reviews.mdf database in the App_Data folder (the development database). Мы посмотрим, как использовать это средство далее в этом учебнике, когда мы добавим эти объекты в рабочую базу данных.We'll see how to use this tool later in this tutorial when we add these objects to the production database.

Если объекты базы данных служб приложений добавляются в базу данных, отличную от ASPNETDB, необходимо настроить конфигурации классов поставщиков SqlMembershipProvider и SqlRoleProvider, чтобы они использовали соответствующую базу данных.If you add the application services database objects to a database other than ASPNETDB you will need to customize the SqlMembershipProvider and SqlRoleProvider provider classes configurations so that they use the appropriate database. Чтобы настроить поставщик членства, добавьте элемент<членства> в раздел <system.web> в Web.config. Используйте элемент<roleManager> для настройки поставщика ролей.To customize the Membership provider add a <membership> element within the <system.web> section in Web.config; use the <roleManager> element to configure the Roles provider. Следующий фрагмент кода берется из приложения "рецензии" Web.config и показывает параметры настройки для интерфейсов API членства и ролей.The following snippet is taken from the Book Reviews application s Web.config and shows the configure settings for the Membership and Roles APIs. Обратите внимание, что регистрируется новый поставщик — ReviewMembership и ReviewRole, которые используют поставщики SqlMembershipProvider и SqlRoleProvider соответственно.Note that both register a new provider - ReviewMembership and ReviewRole - that use the SqlMembershipProvider and SqlRoleProvider providers, respectively.

<configuration>
    <system.web>
        ...

        <membership defaultProvider="ReviewMembership">
            <providers>
                <clear />

                <add type="System.Web.Security.SqlMembershipProvider" 
                     name="ReviewMembership" 
                     connectionStringName="ReviewsConnectionString" 
                     applicationName="BookReviews" />
            </providers>
        </membership>

        <roleManager enabled="true" defaultProvider="ReviewRole">
            <providers>
                <clear />

                <add type="System.Web.Security.SqlRoleProvider" 
                     name="ReviewRole" 
                     connectionStringName="ReviewsConnectionString" 
                     applicationName="BookReviews" />
            </providers>
        </roleManager>

        ...
    </system.web>
</configuration>

Элемент <authentication> Web.config File s также настроен для поддержки проверки подлинности на основе форм.The Web.config file s <authentication> element has also been configured to support forms-based authentication.

<configuration>
    <system.web>
        ...

        <authentication mode="Forms" />

        ...
    </system.web>
</configuration>

Ограничение доступа к страницам администрированияLimiting Access to the Administration Pages

ASP.NET упрощает предоставление или запрет доступа к определенному файлу или папке пользователю или роли с помощью функции авторизации по URL-адресу .ASP.NET makes it easy to grant or deny access to a particular file or folder by user or by role via its URL authorization feature. (Мы вкратце рассмотрели авторизацию по URL-адресу в основных различиях между IIS и ASP.NET Development Serverным руководством и увидели, как службы iis и ASP.NET Development Server применяют правила авторизации URL-адресов иначе для статического и динамического содержимого.) Так как мы хотим запретить доступ к папке ~/Admin, за исключением пользователей в роли администратора, необходимо добавить правила авторизации URL-адресов в эту папку.(We briefly discussed URL authorization in the Core Differences Between IIS and the ASP.NET Development Server tutorial and showed how IIS and the ASP.NET Development Server apply URL authorization rules differently for static versus dynamic content.) Because we want to prohibit access to the ~/Admin folder except for those users in the Admin role, we need to add URL authorization rules to this folder. В частности, правила авторизации URL-адресов должны разрешать пользователям в роли администратора и запрещать всех других пользователей.Specifically, the URL authorization rules need to allow users in the Admin role and deny all other users. Это достигается путем добавления файла Web.config в папку ~/Admin со следующим содержимым:This is accomplished by adding a Web.config file to the ~/Admin folder with the following contents:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Admin" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

Дополнительные сведения о функции авторизации URL-адресов ASP.NET s и об их использовании для написания правил авторизации для пользователей и ролей см. в руководствах по безопасности веб-сайтов, а также в руководствах по авторизации и авторизации на основе ролей .For more information on ASP.NET s URL authorization feature and how to use it to spell out authorization rules for users and for roles, be sure to read the User-Based Authorization and Role-Based Authorization tutorials from my Website Security Tutorials.

Развертывание веб-приложения, использующего Службы приложенийDeploying a Web Application That Uses Application Services

При развертывании веб-сайта, использующего службы приложений, и поставщика, хранящего сведения о службах приложений в базе данных, необходимо, чтобы объекты базы данных, необходимые для служб приложений, создавались в рабочей базе данных.When deploying a website that uses application services and a provider that stores the application services information in a database, it is imperative that the database objects needed by the application services be created on the production database. Изначально Рабочая база данных не содержит этих объектов, поэтому при первом развертывании приложения (или при первом развертывании в первый раз после добавления служб приложений) необходимо выполнить дополнительные действия для получения этих объектов базы данных в Рабочая база данных.Initially the production database does not contain these objects, so when the application is first deployed (or when it is deployed for the first time after application services have been added), you must take extra steps to get these requisite database objects on the production database.

Другая проблема может возникнуть при развертывании веб-сайта, использующего службы приложений, если планируется репликация учетных записей пользователей, созданных в среде разработки, в рабочую среду.Another challenge can arise when deploying a website that uses application services if you intend to replicate the user accounts created in the development environment to the production environment. В зависимости от конфигурации членства и ролей возможно, что даже если вы успешно скопировали учетные записи пользователей, созданные в среде разработки, в рабочую базу данных, эти пользователи не смогут войти в веб-приложение в рабочем режиме.Depending on the Membership and Roles configuration, it is possible that even if you successfully copy the user accounts that were created in the development environment to the production database, these users cannot sign into the web application in production. Мы рассмотрим причину этой проблемы и обсудим, как предотвратить ее возникновение.We'll look at the cause of this issue and discuss how to prevent it from happening.

ASP.NET поставляется с удобным средством администрирования веб-сайтов (WSAT) , которое можно запустить из Visual Studio и позволяет управлять учетной записью пользователя, ролями и правилами авторизации через веб-интерфейс.ASP.NET ships with a nice Web Site Administration Tool (WSAT) that can be launched from Visual Studio and allows the user account, roles, and authorization rules to be managed through a web-based interface. К сожалению, WSAT работает только для локальных веб-сайтов, т. е. он не может использоваться для удаленного управления учетными записями пользователей, ролями и правилами авторизации для веб-приложения в рабочей среде.Unfortunately, the WSAT only works for local websites, meaning that it cannot be used to remotely manage user accounts, roles, and authorization rules for the web application in the production environment. Мы рассмотрим различные способы реализации поведения, похожего на WSAT, на рабочем веб-сайте.We'll look at different ways to implement WSAT-like behavior from your production website.

Добавление объектов базы данных с помощью ASPNET_регскл. exeAdding the Database Objects Using aspnet_regsql.exe

В учебнике развертывание базы данных было показано, как скопировать таблицы и данные из базы данных разработки в рабочую базу данных, и эти методы можно использовать для копирования объектов базы данных служб приложений в рабочую базу данных.The Deploying a Database tutorial showed how to copy the tables and data from the development database to the production database, and these techniques can certainly be used to copy the application services database objects to the production database. Другим вариантом является средство aspnet_regsql.exe, которое добавляет или удаляет объекты базы данных служб приложений из базы данных.Another option is the aspnet_regsql.exe tool, which adds or removes the application services database objects from a database.

Note

Средство aspnet_regsql.exe создает объекты базы данных в указанной базе данных.The aspnet_regsql.exe tool creates the database objects on a specified database. Он не переносит данные из базы данных разработки в рабочую базу данных.It does not migrate data in those database objects from the development database to the production database. Если вы хотите скопировать учетную запись пользователя и сведения о ролях в базу данных разработки в рабочую базу данных, используйте методы, описанные в учебнике развертывание базы данных .If you mean to copy the user account and role information in the development database to the production database use the techniques covered in the Deploying a Database tutorial.

Давайте посмотрим, как добавить объекты базы данных в рабочую базу данных с помощью средства aspnet_regsql.exe.Let s look at how to add the database objects to the production database using the aspnet_regsql.exe tool. Начните с открытия проводника Windows и перехода к каталогу .NET Framework версии 2,0 на компьютере% WINDIR% \ Microsoft. NET\Framework\v2.0.50727.Start by opening Windows Explorer and navigating to the .NET Framework version 2.0 directory on your computer, %WINDIR%\ Microsoft.NET\Framework\v2.0.50727. Вы должны найти средство aspnet_regsql.exe.There you should find the aspnet_regsql.exe tool. Это средство можно использовать из командной строки, но оно также включает графический пользовательский интерфейс. Дважды щелкните файл aspnet_regsql.exe, чтобы запустить его графический компонент.This tool can be used from the command-line, but it also includes a graphical user interface; double-click the aspnet_regsql.exe file to launch its graphical component.

Средство запускается, отображая экран-заставку, объясняющий его назначение.The tool starts by displaying a splash screen explaining its purpose. Нажмите кнопку Далее, чтобы перейти к экрану "Выбор параметра установки", который показан на рис. 1.Click Next to advance to the "Select a Setup Option" screen, which is shown in Figure 1. Здесь можно добавить объекты базы данных служб приложений или удалить их из базы данных.From here you can choose to add the application services database objects or remove them from a database. Так как нам нужно добавить эти объекты в рабочую базу данных, выберите параметр "настроить SQL Server для служб приложений" и нажмите кнопку "Далее".Because we want to add these objects to the production database, select the "Configure SQL Server for application services" option and click Next.

выбрать настройку SQL Server для Службы приложенийChoose to Configure SQL Server for Application Services

Рис. 1. Настройка SQL Server для службы приложений (щелкните, чтобы просмотреть изображение с полным размером)Figure 1: Choose to Configure SQL Server for Application Services (Click to view full-size image)

На экране "Выбор сервера и базы данных" запрашиваются сведения для подключения к базе данных.In "Select the Server and Database" screen prompts for information to connect to the database. Введите сервер базы данных, учетные данные безопасности и имя базы данных, предоставленное вашей компанией для размещения веб-сайтов, и нажмите кнопку Далее.Enter the database server, the security credentials, and the database name supplied to you by your web hosting company and click Next.

Note

После ввода сервера базы данных и учетных данных может возникнуть ошибка при развертывании раскрывающегося списка База данных.After entering your database server and credentials you may get an error when expanding the database drop-down list. Средство aspnet_regsql.exe отправляет запрос к системной таблице sysdatabases, чтобы получить список баз данных на сервере, но некоторые компании размещения веб-узлов заблокировали свои серверы баз данных, чтобы эти сведения не были общедоступными.The aspnet_regsql.exe tool queries the sysdatabases system table to retrieve a list of databases on the server, but some web hosting companies lock down their database servers so that this information is not publicly available. При возникновении этой ошибки можно ввести имя базы данных непосредственно в раскрывающемся списке.If you get this error you can type the database name directly into the drop-down list.

предоставить средство с информацией о подключении к базе данныхSupply the Tool With Your Database s Connection Information

Рис. 2. предоставление средства с информацией о соединении с базой данных (щелкните, чтобы просмотреть изображение с полным размером)Figure 2: Supply the Tool With Your Database s Connection Information (Click to view full-size image)

На следующем экране приведены сводные сведения о действиях, которые необходимо выполнить, а именно о том, что объекты базы данных служб приложений будут добавлены в указанную базу данных.The subsequent screen summarizes the actions that are about to take place, namely that the application services database objects are going to be added to the specified database. Нажмите кнопку Далее, чтобы завершить это действие.Click Next to complete this action. Через несколько секунд появится окончательный экран, пометив, что объекты базы данных были добавлены (см. рис. 3).After a few moments, the final screen is displayed, noting that the database objects have been added (see Figure 3).

успешно. Службы приложений объекты базы данных были добавлены в рабочую базу данныхSuccess! The Application Services Database Objects Were Added to the Production Database

Рис. 3. успешное завершение!Figure 3: Success! Службы приложений объекты базы данных были добавлены в рабочую базу данных (щелкните, чтобы просмотреть изображение с полным размером).The Application Services Database Objects Were Added to the Production Database (Click to view full-size image)

Чтобы убедиться, что объекты базы данных служб приложений были успешно добавлены в рабочую базу данных, откройте SQL Server Management Studio и подключитесь к рабочей базе данных.To verify that the application services database objects were successfully added to the production database, open SQL Server Management Studio and connect to your production database. Как показано на рис. 4, теперь в базе данных должны отображаться таблицы базы данных служб приложений, aspnet_Applications, aspnet_Membership, aspnet_Usersи т. д.As Figure 4 shows, you should now see the application services database tables in your database, aspnet_Applications, aspnet_Membership, aspnet_Users, and so forth.

подтвердить, что объекты базы данных были добавлены в рабочую базу данныхConfirm That the Database Objects Were Added to the Production Database

Рис. 4. Убедитесь, что объекты базы данных были добавлены в рабочую базу данных (щелкните, чтобы просмотреть изображение с полным размером)Figure 4: Confirm That the Database Objects Were Added to the Production Database (Click to view full-size image)

Средство aspnet_regsql.exe необходимо использовать только при первом развертывании веб-приложения или в первый раз после начала работы со службами приложений.You will only need to use the aspnet_regsql.exe tool when deploying your web application for the first time or for the first time after you have started using the application services. После того как эти объекты базы данных находятся в рабочей базе данных, их не нужно повторно добавлять или изменять.Once these database objects are on the production database they won't need to be re-added or modified.

Копирование учетных записей пользователей из разработки в рабочую средуCopying User Accounts from Development to Production

При использовании классов поставщиков SqlMembershipProvider и SqlRoleProvider для хранения сведений о службах приложений в базе данных SQL Server данные учетной записи пользователя и роли хранятся в различных таблицах базы данных, включая aspnet_Users, aspnet_Membership, aspnet_Rolesи aspnet_UsersInRoles.When using the SqlMembershipProvider and SqlRoleProvider provider classes to store the application services information in a SQL Server database, the user account and role information is stored in a variety of database tables, including aspnet_Users, aspnet_Membership, aspnet_Roles, and aspnet_UsersInRoles, among others. Если во время разработки вы создаете учетные записи пользователей в среде разработки, эти учетные записи пользователей можно реплицировать в рабочую среду, скопировав соответствующие записи из соответствующих таблиц базы данных.If during development you create user accounts in the development environment you can replicate those user accounts in production by copying the corresponding records from the applicable database tables. Если вы использовали мастер публикации баз данных для развертывания объектов базы данных служб приложений, возможно, вы также выбрали копирование записей, что приведет к тому, что учетные записи пользователей, созданные в разработке, также будут находиться в рабочей среде.If you used the Database Publishing Wizard to deploy the application services database objects you may have also elected to copy the records, which would result in the user accounts created in development to also be on production. Но в зависимости от параметров конфигурации может оказаться, что пользователи, учетные записи которых были созданы в процессе разработки и скопированы в рабочую среду, не могут войти с рабочего веб-сайта.But, depending on your configuration settings, you may find that those users whose accounts were created in development and copied to production are unable to login from the production website. Что это дает?What gives?

Классы поставщиков SqlMembershipProvider и SqlRoleProvider были спроектированы таким образом, что одна база данных может служить хранилищем пользователей для нескольких приложений, где каждое приложение теоретически может иметь пользователей с перекрывающимися именами пользователей и ролями с тем же именем.The SqlMembershipProvider and SqlRoleProvider provider classes were designed such that a single database could serve as a user store for multiple applications, where each application could, in theory, have users with overlapping usernames and roles with the same name. Чтобы обеспечить такую гибкость, база данных хранит список приложений в aspnet_Applications таблице, и каждый пользователь связан с одним из этих приложений.To allow for this flexibility, the database maintains a list of applications in the aspnet_Applications table, and each user is associated with one of these applications. В частности, таблица aspnet_Users содержит столбец ApplicationId, связывающий каждого пользователя с записью в aspnet_Applications таблице.Specifically, the aspnet_Users table has an ApplicationId column that ties each user to a record in the aspnet_Applications table.

В дополнение к столбцу ApplicationId aspnet_Applications таблица также содержит столбец ApplicationName, который предоставляет более удобное для человека имя приложения.In addition to the ApplicationId column, the aspnet_Applications table also includes an ApplicationName column, which provides a more human-friendly name for the application. Когда веб-сайт пытается работать с учетной записью пользователя, например проверку учетных данных пользователя на странице входа, он должен сообщить классу SqlMembershipProvider, с каким приложением работать.When a website attempts to work with a user account, such as validating a user s credentials from the login page, it must tell the SqlMembershipProvider class what application to work with. Обычно это достигается путем предоставления имени приложения, а это значение берется из конфигурации поставщика s в Web.config, особенно через атрибут applicationName.It usually does this by supplying the application name, and the this value comes from the provider s configuration in Web.config - specifically via the applicationName attribute.

Но что произойдет, если атрибут applicationName не указан в Web.config?But what happens if the applicationName attribute is not specified in Web.config? В этом случае система членства использует корневой путь приложения в качестве значения applicationName.In such a case the Membership system uses the application root path as the applicationName value. Если атрибут applicationName не задан явно в Web.config, то существует вероятность того, что среда разработки и Рабочая среда используют другой корень приложения и, следовательно, будут связаны с разными именами приложений в службах приложений.If the applicationName attribute is not explicitly set in Web.config, then, there is the possibility that the development environment and production environment use a different application root and therefore will be associated with different application names in the application services. В случае такого несоответствия эти пользователи, созданные в среде разработки, будут иметь значение ApplicationId, не совпадающее со значением ApplicationId в рабочей среде.If such a mismatch occurs then those users created in the development environment will have an ApplicationId value that does not match with the ApplicationId value for the production environment. В итоге эти пользователи не смогут войти в систему.The net result is that those users won't be able to login.

Note

Если в этой ситуации вы обнаружите, что с учетными записями пользователей, скопированными в рабочую среду с несоответствующим значением ApplicationId, можно написать запрос, чтобы обновить неправильные значения ApplicationId в ApplicationId, используемые в рабочей среде.If you find yourself in this situation - with user accounts copied to production with a mismatched ApplicationId value - you could write a query to update these incorrect ApplicationId values to the ApplicationId used on production. После обновления пользователи, учетные записи которых были созданы в среде разработки, теперь смогут входить в веб-приложение в рабочей области.Once updated, the users whose accounts were created on the development environment would now be able to sign into the web application on production.

Хорошая новость состоит в том, что существует простой шаг, который можно предпринять, чтобы убедиться, что в обеих средах используется один ApplicationId — явно задать атрибут applicationName в Web.config для всех поставщиков служб приложений.The good news is that there is a simple step you can take to ensure that the two environments use the same ApplicationId - explicitly set the applicationName attribute in Web.config for all of your application services providers. Я явно установил для атрибута applicationName значение «Букревиевс» в элементах <membership> и <roleManager>, как показано в этом фрагменте Web.config.I explicitly set the applicationName attribute to "BookReviews" in the <membership> and <roleManager> elements as this snippet from Web.config shows.

<membership defaultProvider="ReviewMembership">
    <providers>
        <clear />

        <add type="System.Web.Security.SqlMembershipProvider" 
             name="ReviewMembership" 
             connectionStringName="ReviewsConnectionString" 
             applicationName="BookReviews" />
    </providers>
</membership>

Дополнительные сведения о настройке атрибута applicationName и его обосновании см. в записи блога Скотта Гатри ( s. при настройке членства ASP.NET и других поставщиков всегда задавайте свойство ApplicationName.For more discussion on setting the applicationName attribute and the rationale behind it, refer to Scott Guthrie s blog post, Always set the applicationName property when configuring ASP.NET Membership and other Providers.

Управление учетными записями пользователей в рабочей средеManaging User Accounts in the Production Environment

Средство администрирования веб-сайта ASP.NET (WSAT) упрощает создание учетных записей пользователей и управление ими, определение и применение ролей, а также написание правил авторизации на основе пользователей и ролей.The ASP.NET Web Site Administration Tool (WSAT) makes it easy to create and manage user accounts, define and apply roles, and spell out user- and role-based authorization rules. Вы можете запустить WSAT из Visual Studio, перейдя к обозреватель решений и щелкнув значок конфигурации ASP.NET или перейдя к меню веб-сайт или проект и выбрав пункт меню ASP.NET Configuration.You can launch the WSAT from Visual Studio by going to the Solution Explorer and clicking the ASP.NET Configuration icon or by going to the Website or Project menus and selecting the ASP.NET Configuration menu item. К сожалению, WSAT может работать только с локальными веб-сайтами.Unfortunately, the WSAT can only work with local websites. Таким образом, нельзя использовать WSAT на рабочей станции для управления веб-сайтом в рабочей среде.Therefore, you cannot use the WSAT from your workstation to manage the website in the production environment.

Хорошая новость состоит в том, что все функции, предоставляемые WSAT, доступны программно через интерфейсы API членства и ролей. Кроме того, многие экраны WSAT используют стандартные элементы управления, связанные с входом ASP.NET.The good news is that all of the functionality exposed provided by the WSAT is available programmatically through the Membership and Roles APIs; furthermore, many of the WSAT screens use the standard ASP.NET Login-related controls. Вкратце, вы можете добавить на веб-сайт страницы ASP.NET, которые предлагают необходимые возможности управления.In short, you can add ASP.NET pages to your website that offer the necessary management capabilities.

Вспомним, что в предыдущем учебнике веб-приложение "Рецензирование книг" было добавлено в папку ~/Admin, а в этой папке настроено разрешение только пользователям с ролью администратора.Recall that an earlier tutorial updated the Book Reviews web application to include an ~/Admin folder, and this folder has been configured to only allow users in the Admin role. Я добавил в эту папку страницу с именем CreateAccount.aspx, с которой администратор может создать новую учетную запись пользователя.I added a page to that folder named CreateAccount.aspx from which an administrator can create a new user account. На этой странице используется элемент управления CreateUserWizard для вывода пользовательского интерфейса и серверной логики для создания новой учетной записи пользователя.This page uses the CreateUserWizard control to display the user interface and backend logic for creating a new user account. Что еще больше, я настроил элемент управления, включив в него флажок, запрашивающий, следует ли добавить нового пользователя к роли администратора (см. рис. 5).What s more, I customized the control to include a CheckBox that prompts whether the new user should also be added to the Admin role (see Figure 5). С небольшой скоростью работы можно создать пользовательский набор страниц, реализующих задачи, связанные с управлением пользователями и ролями, которые в противном случае были бы предоставлены WSAT.With a little bit of work you can build a custom set of pages that implements the user and role management-related tasks that would otherwise be provided by the WSAT.

Note

Дополнительные сведения об использовании API членства и ролей вместе с веб-элементами управления ASP.NET для входа в систему см. в руководствах по безопасности веб-сайтов.For more information on using the Membership and Roles APIs along with the Login-related ASP.NET Web controls, be sure to read my Website Security Tutorials. Дополнительные сведения о настройке элемента управления CreateUserWizard см. в статьях Создание учетных записей пользователей и сохранение дополнительных руководств по работе с данными о пользователях , а также в статье Ерич Петерсон s Настройка элемента управления CreateUserWizard.For more on customizing the CreateUserWizard control refer to the Creating User Accounts and Storing Additional User Information tutorials, or check out Erich Peterson s article, Customizing the CreateUserWizard Control.

Администраторы могут создавать новые учетные записи пользователейAdministrators Can Create New User Accounts

Рис. 5. Администраторы могут создавать новые учетные записи пользователей (щелкните, чтобы просмотреть изображение с полным размером)Figure 5: Administrators Can Create New User Accounts (Click to view full-size image)

Если вам нужна полная функциональность WSAT, в которой вы создаете собственное средство администрирования веб-сайтов, в котором автор "Клем" познакомится с процессом создания пользовательского инструмента, похожего на WSAT.If you need the full functionality of the WSAT check out Rolling Your Own Web Site Administration Tool, in which author Dan Clem walks through the process of building a custom WSAT-like tool. "+ +" Использует исходный код приложения ( C#в) и предоставляет пошаговые инструкции по его добавлению на размещенный веб-сайт.Dan shares his application s source code (in C#) and provides step-by-step instructions for adding it to your hosted website.

СводкаSummary

При развертывании веб-приложения, использующего реализацию базы данных служб приложений, необходимо сначала убедиться, что в рабочей базе данных есть необходимые объекты базы данных.When deploying a web application that uses the application services database implementation you must first ensure that the production database has the requisite database objects. Эти объекты можно добавить с помощью методик, описанных в учебнике развертывание базы данных . Кроме того, можно использовать средство aspnet_regsql.exe, как было показано в этом руководстве.These objects can be added using the techniques discussed in the Deploying a Database tutorial; alternatively, you can use the aspnet_regsql.exe tool, as we saw in this tutorial. Другие проблемы, с которыми мы работаем в центре синхронизации имени приложения, используемого в средах разработки и рабочей среды (это важно, если вы хотите, чтобы пользователи и роли, созданные в среде разработки, были действительны в рабочем окружении) и методы для Управление пользователями и ролями в рабочей среде.Other challenges we touched on center around synchronizing the application name used in the development and production environments (which is important if you want users and roles created in the development environment to be valid on production) and techniques for managing the users and roles in the production environment.

Поздравляем с программированием!Happy Programming!

Дополнительные материалыFurther Reading

Дополнительные сведения о разделах, обсуждаемых в этом руководстве, см. в следующих ресурсах:For more information on the topics discussed in this tutorial, refer to the following resources: