Приложения могут нуждаться в доступе к серверу SQL Server через интернет по многим причинам. Например, клиентское приложение, выполняющееся на удаленном компьютере за пределами локальной сети, может обращаться к серверу SQL Server через интернет. Приложение, написанное для другой платформы и не имеющее поддержки поставщиков ODBC или OLE DB, может использовать HTTP как канал для связи с SQL Server.
В зависимости от сетевого протокола, используемого вызывающим приложением, можно при желании открыть доступ к серверу SQL Server либо через протокол TCP/IP, либо через протокол HTTP. Оба подхода настраиваются в SQL Server особым образом, причем возможности, предоставляемые вызывающему приложению каждым из этих подходов, не одинаковы.
Если вы открываете доступ к SQL Server из внешних сетей, следует проявить особенную осторожность в решении вопроса о том, какие ресурсы и функциональные возможности сделать доступными для внешних вызывающих модулей; кроме того, необходимо реализовать инфраструктуру обеспечения безопасности, чтобы не подвергать систему баз данных риску нарушения безопасности.
Еще один подход заключается в предоставлении доступа через компонент среднего уровня, который прослушивает нужный сетевой порт и перенаправляет вызовы серверу SQL Server; при этом сервер остается закрытым для доступа из внешних сетей, тем самым риск компрометации базы данных уменьшается.
Чтобы предоставить прямой доступ к серверу SQL Server из внешней сети, сначала нужно решить, какой протокол передачи данных клиентское приложение будет использовать для связи с сервером. В этом разделе мы сконцентрируемся на следующих моментах:
Реализуя любой из этих двух подходов, следует не забывать о требованиях безопасности.
При использовании протокола TCP/IP SQL Server реализует собственный протокол передачи данных, который называется
На рис. 5.1 показана минимальная рекомендуемая физическая инфраструктура, необходимая для того, чтобы обеспечить доступность SQL Server по протоколу TCP/IP через интернет.
(рис 5.1) Физическая инфраструктура, необходимая для обеспечения доступа к серверу SQL Server по протоколу TCP/IP через интернетМежсетевой экран ограничивает доступ к внутренней сети, перенаправляя только те запросы, которые предназначены конкретным TCP/IP-адресам локальной сети. Это означает, что:
Эти действия детализируются в следующих разделах данной лекции.
SQL Server обеспечивает поддержку нескольких протоколов передачи данных. Чтобы проверить, включен ли протокол TCP/IP, выполните следующие действия:



Инструмент SQL Server



Экземпляр SQL Server по умолчанию прослушивает порт TCP номер 1433. Именованные экземпляры SQL Server получают динамически назначаемый адрес порта TCP при загрузке экземпляра. Если нужно обеспечить доступ к экземпляру SQL Server через интернет, необходимо настроить прослушивание экземпляром конкретного порта, который не назначается динамически. Чтобы настроить прослушивание определенного порта TCP именованным экземпляром сервера, выполните следующие действия:


Нажмите кнопку ОК. Диспетчер конфигурации SQL Server проинформирует вас о том, что изменения вступят в силу после перезапуска службы SQL Server.
Заключительный этап в обеспечении соединения клиентских приложений с SQL Server через интернет по протоколу TCP/IP – это направление всех вызовов клиентских приложений на соответствующий сервер при помощи IP-адреса и номера порта, прослушиваемых сервером.
Строка соединения для указания имени сервера должна соответствовать такому формату:
Data Source=tcp:<ip_address>/instance,<port_number>; Initial Catalog=<database_name>; User ID=<user_id>; Password=<password>;
Пример корректной строки соединения в этом формате:
Data Source=tcp:190.190.200.100/Sales,1344; Initial Catalog=AdventureWorks; User ID=sa; Password=Pa$$w0rd;
Следующий пример программного кода (который можно найти среди файлов примеров в папке ConnectThroughTCP-port) показывает, как открыть соединение с сервером SQL Server через интернет с использованием протокола TCP/IP и извлечь все записи о сотрудниках из базы данных Adventure Works. Чтобы использовать этот пример, нужно изменить фрагменты строки соединения, выделенные полужирным шрифтом так, чтобы они соответствовали вашей среде. Для обмена данными с сервером через интернет необходим публичный IP-адрес. Если передача данных осуществляется в интрасети, IP-адреса, выделенного серверу в этой сети, вполне достаточно. Используйте <номер_порта>, который был задан в разделе "Настраиваем прослушивание определенных IP-адресов сервером SQL Server".
Integrated Security = true, поскольку TCP/IP не является протоколом аутентификации. Это означает, что соединения не аутентифицируются при использовании учетных данных Windows. Чтобы пройти проверку подлинности, следует использовать идентификатор SQL и указать в строке соединения имя пользователя и пароль.cmd и нажмите кнопку ОК. Откроется окно командной строки. В строке приглашения введите команду ipconfig и нажмите клавишу Enter. Вы увидите IP-адрес компьютера. Введите команду exit и нажмите клавишу Enter, чтобы закрыть окно командной строки.Public Sub GetEmployeeList()
Dim connectionString As String
connectionString = "Data Source=tcp:192.168.1.102,49152;" + _
"Initial Catalog=AdventureWorks; User ID=Mary; password=34TY$$543"
Dim query As String
query = "SELECT Person.Contact.FirstName + " " + " + _
"Person.Contact.LastName AS "Employees" " + _
"FROM Person.Contact " + _
"INNER JOIN HumanResources.Employee " + _
"ON Person.Contact.ContactID = HumanResources.Employee.ContactID"
Using cn As New SqlClient.SqlConnection(connectionString)
Using cmd As New SqlClient.SqlCommand(query, cn)
cn.Open()
Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()
While (dr.Read())
Console.WriteLine(dr(0))
End While
End Using
End Using
End Sub
Помимо этого необходимо сконфигурировать межсетевой экран или прокси-сервер вашей организации на разрешение доступа к SQL Server из внешних приложений.
В SQL Server 2005 появилась возможность использовать протокол HTTP в качестве протокола передачи данных через конечные точки HTTP. Вот основные преимущества использования конечных точек HTTP:
Эти действия детализируются в следующих разделах данной лекции.
Конечные точки HTTP в SQL Server 2005 обеспечивают способ описания сервис-ориентированного интерфейса для операций баз данных. Выражение "сервис-ориентированный" означает, что клиентское приложение не устанавливает соединение и не выполняет напрямую определенные хранимые процедуры или пользовательские функции; вместо этого конечная точка HTTP представляет эти хранимые процедуры и пользовательские функции как службы (Веб-службы с поддержкой XML) через предварительно заданный формат, который называется форматом WSDL (Web Services Description Language, язык описания веб-служб).
Для обмена XML-сообщениями и клиент, и сервер должны соблюдать этот формат.
В примере, рассматриваемом в этой лекции, мы создадим новую хранимую процедуру, которая возвращает список названий заказов.
httpEndpoints.sql.USE AdventureWorks GO CREATE PROCEDURE GET_HEADER_LIST AS SELECT * FROM Sales.SalesOrderHeader GO
EXEC GET_HEADER_LIST
После создания всех хранимых процедур и пользовательских функций, которые будут предоставляться через конечную точку HTTP, следует создать и сконфигурировать саму конечную точку.
Чтобы настроить конфигурацию конечной точки HTTP,. администратор базы данных использует новую инструкцию языка описания данных (DDL), CREATE ENDPOINT.
httpEndpoints.sql. URL tempuri.org представляет пространство имен XML. Можно использовать любую строку, если она является уникальной для организации или компьютера).USE MASTER
GO
EXEC sp_reserve_http_namespace N'http://localhost:80/sql/myservices'
GO
CREATE ENDPOINT [MyServices]
STATE=STARTED
AS HTTP (
PATH=N'/sql/myservices',
PORTS = (CLEAR),
AUTHENTICATION = (INTEGRATED)
)
FOR SOAP (
WEBMETHOD "http://tempuri.org/".'SalesHeadersList' (
NAME=N'[AdventureWorks].[dbo].[GET_HEADER_LIST]', FORMAT=ROWSETS_ONLY)
Данный код создает конечную точку HTTP для представления хранимой процедуры GET_HEADER_LIST в качестве службы, доступной для клиентов через протоколы HTTP и SOAP (Simple Object Access Protocol, простой протокол доступа к объектам).
sp_reserve_http_namespace. См. дополнительную информацию в Электронной документации SQL Server 2005, тема "Резервирование пространства имен HTTP".Конечной точке HTTP, которая была определена выше, был присвоен идентификатор MyServices ; она готова начать получение запросов сразу после выполнения приведенного выше кода, так как этот код устанавливает свойство STATE в состояние STARTED. Другие возможные значения свойства STATE – это STOPPED и DISABLED.
Код также задает для свойства AUTHENTICATION значение INTEGRATED. Это означает, что SQL Server будет пытаться проверить подлинность вызывающего приложения по учетным данным Windows с использованием протокола
Другие протоколы проверки подлинности, например, Обычная проверка подлинности, в процессе проверки подлинности пересылают пароль в незашифрованном виде. При использовании Обычной проверки подлинности SQL Server 2005 требует шифрования канала передачи данных и защиты через протокол SSL (Secure Sockets Layer, протокол защищенных сокетов). Для параметра PORTS могут быть заданы значения CLEAR или SSL. CLEAR показывает, что канал передачи данных не использует SSL.
Параметр PATH показывает
sysadmin и владельцы конечной точки могут устанавливать с ней соединение. Другим пользователям необходимо предоставить разрешение на доступ к конечной точке. Это осуществляется посредством выполнения следующей инструкции: GRANT CONNECT ON HTTP ENDPOINT::[Имя_КонечнойТочки] TO [Домен\Учетная запись пользователя].После настройки конфигурации самой конечной точки, второй фрагмент инструкции CREATE ENDPOINT DDL настраивает хранимые процедуры и пользовательские функции, которые будут представлены в качестве службы.
Администраторы базы данных могут объявить столько методов WEBMETHOD, сколько нужно. Каждый веб-метод (WEB-METHOD) настраивает конфигурацию одной службы, которая сопоставлена одной хранимой процедуре или одной пользовательской функции.
Представленная служба в этом случае идентифицируется по псевдониму "http://tempuri.org/".'SalesHeader-sList'. Этот веб-метод сопоставлен хранимой процедуре, указанной в параметре NAME.
Параметр FORMAT настраивает тип информации, возвращаемой SQL Server. ROWSETS_ONLY показывает, что следует возвращать только результаты. Потом клиентское приложение может воспользоваться объектом ADO.NET DataSet, чтобы получить эти данные.
Параметр WSDL определяет, что формат WSDL может быть сгенерирован автоматически сервером SQL Server.
Клиентские приложения, осуществляющие обмен данными через конечную точку HTTP, могут пересылать только такие запросы, которые соответствуют формату WSDL. Формат WSDL динамически создается сервером SQL Server путем объединения метаданных всех предоставляемых веб-методов (WEBMETHOD) и форматирования их по действующему формату WSDL.
Клиентские приложения, разработанные при помощи среды разработки Microsoft Visual Studio 2005, могут легко создавать веб-ссылки на конечные точки HTTP.
Чтобы создать веб-ссылку на конечную точку HTTP SQL Server, выполните следующие действия (этот проект можно найти в файлах примеров в папке ConsumeHTTPEndpoint ).
DataGridView (Сетка данных) из Панели элементов в область конструктора формы Form1.DataGridView, чтобы отобразить задачи смарт-тэг DataGridView. В этом смарт-тэге снимите флажки Enable Adding (Разрешить добавление), Enable Editing (Разрешить изменение) и Enable Deleting (Разрешить удаление).Выполните двойной щелчок на форме в конструкторе и добавьте в обработчик событий Form1_Load следующий код:
Private Sub Form1 Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Handles MyBase.Load
Dim ws As New localhost.MyServices
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim headers As New DataSet
headers = ws.SalesHeadersList ()
DataGridView1.DataSource = headers.Tables(0)
DataGridView1.AutoGenerateColumns = True
End Sub
Form1.vb [Проект] и нажмите клавишу F4, чтобы открыть окно Properties (Свойства). Выделите в окне свойств элемент управления DataGridView и задайте для свойства Dock значение Fill, щелкнув в средней панели раскрывающегося экрана.DataGridView показывает список всех заголовков заказов на продажи, полученных от SQL Server.Конечные точки HTTP позволяют интегрировать SQL Server 2005 в сервис-ориентированную архитектуру. У использования конечных точек HTTP есть некоторые недостатки.
Эти недостатки можно нейтрализовать, если предоставлять доступ к SQL Server через дополнительный уровень ПО, который защитит установку SQL Server.
Каждая реляционная система управления базами данных (РСУБД) предоставляет интерфейс прикладного программирования (API), который разработчики могут использовать для взаимодействия с базой данных.
Перечислим поставщики доступа к данным - это OLE DB, ODBC, DB-LIB, JDBC и SQLNCLI. Поставщик доступа к данным инкапсулирует сложную логику, реализованную посредством API для СУБД. Поставщик доступа к данным также предоставляет интерфейс, который позволяет разработчикам приложений один раз написать логическую
SQL Server 2005 предоставляет альтернативу использования поставщиков доступа к данным в виде конечных точек HTTP.
Поскольку конечные точки HTTP управляются администратором базы данных, он может тщательно продумать, какие хранимые процедуры и пользовательские функции сделать доступными через конечные точки, зато после этого любая платформа разработки может подключиться и вызвать такие конечные точки.
Единственное требование к приложению, которое подключается к конечной точке HTTP, заключается в том, чтобы это приложение могло вести обмен данными через протокол передачи данных HTTP и отправлять запросы в соответствии с определенным форматом XML/SOAP, которого требует SQL Server 2005.
Платформы и языки программирования с отсутствием поддержки поставщиков доступа к данным OLE DB или ODBC могут осуществлять обмен данных с SQL Server 2005 через конечные точки HTTP.
Вот некоторые примеры таких платформ, языков программирования и новых ситуаций, которые допускают использование конечных точек HTTP:
До сих пор в этой лекции рассказывалось о том, как открыть прямой доступ к SQL Server клиентским приложениям из внешних сетей.
Ввиду того, что SQL Server обслуживает ценные данные, вряд ли можно назвать хорошей идеей демонстрацию установки сервера пользователям общей сети, например, интернет, так как это может привести к возникновению проблем с безопасностью. Кроме того, если сервер SQL Server непосредственно доступен для внешних сетей, это ограничивает масштабируемость и производительность, а также усложняет администрирование сервера.
Ниже описаны преимущества реализации среднего уровня между клиентским приложением и SQL Server:
На рис. 5.2 показан пример возможной архитектуры для доступа к SQL Server через дополнительный уровень.
(рис 5.2) Архитектура для доступа к SQL Server через компонент среднего уровняИнтерфейс службы представляет собой фасад, который демонстрируется клиентским приложениям. В интерфейсе службы внешним пользователям предоставляется только общедоступный интерфейс, который скрывает всю сложность внутренней реализации доступа к SQL Server. Интерфейс службы должен также реализовать все необходимые проверки корректности ввода.
Интерфейс службы поддерживается компонентом доступа к данным. Компонент доступа к данным реализует вызовы SQL Server через поставщики доступа к данным, например, OLE DB или ODBC.
Инфраструктура Microsoft .NET Framework предоставляет несколько методов создания интерфейсов службы. В этой лекции рассматриваются только технологии ASP.NET Web-Services (Веб-службы ASP.NET) и Microsoft .
Как и конечные точки HTTP, веб-служба ASP.NET также использует формат WSDL, но в качестве службы представляет не хранимую процедуру, а логику приложения, написанную в виде компонентов.
Веб-службы ASP.NET размещаются и выполняются на сервере Microsoft Internet Information Services (IIS). Чтобы просмотреть код этого раздела полностью, откройте файл Solution1.sln в папке 3tiers в файлах примеров. Отдельные компоненты находятся во вложенных папках.
Чтобы реализовать доступ к SQL Server через интернет, но с подключением через веб-службу ASP.NET в среднем уровне, выполните следующие действия:
Class1.vb следующим кодом (не забудьте изменить строку соединения, чтобы данные соответствовали вашей среде). Этот пример находится в папке 3tiers\DepartmentDataAccess.Imports System.Data.SqlClient
Public Class DepartmentDataAccess
Public Function GetAllDepartments() As DataSet
Dim result As New DataSet
Dim connectionString As String
Dim selectCommand As String
connectionString = "server=(local);database=AdventureWorks;uid=sa"
selectCommand = "SELECT * FROM HumanResources.Department"
Dim connection As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter(selectCommand, connection)
adapter.Fill(result)
Return result
End Function
End Class
Класс DepartmentDataAccess, в качестве примера, реализует единственный метод, который называется GetAllDepartments. Этот метод возвращает объект DataSet, который содержит все отделы компании Adventure Works.
DepartmentDataAccess. Visual Studio 2005 скомпилирует проект в сборку. Эта сборка представляет уровень доступа к данным.3tiers\webservice.
HelloWorld, созданной шаблоном Visual Studio, введите следующий код:<WebMethod()> _
Public Function GetDepartments() As System.Data.DataSet
Dim departmentsDL As New DepartmentDataAccess.DepartmentDataAccess()
Return departmentsDL.GetAllDepartments()
End Function




Конечно, клиентское приложение не будет выполнять веб-службу с помощью той же пробной веб-страницы, которую мы с вами только что использовали. Чтобы написать клиентское приложение, которое будет потребителем веб-службы, можно выполнить те же действия, которые были описаны ранее в разделе "Создаем ссылку на конечную точку HTTP из клиентского приложения".
Инфраструктура Microsoft .NET предоставляет различные технологии для обеспечения удаленным клиентам возможности установить соединение с компонентами на стороне сервера.
Если использовать веб-службы ASP.NET, как в предыдущем разделе данной лекции, клиентское приложение будет осуществлять обмен данными с помощью формата SOAP через интерфейс сервиса.
Microsoft .
Главное отличие между веб-службами ASP.NET. и технологией .
Построим пример, используя в качестве основы кода пример из предыдущего раздела. Повторите действия с 1 по 4 из предыдущего раздела, а затем выполните следующую последовательность действий:
DepartmentDataAccess необходимо предоставить компонент интерфейса сервиса. В этом примере мы создадим интерфейс сервиса .3tiers\Remoting.DepartmentDataAccess, а затем нажмите кнопку ОК,Class1.vb следующим кодом:Public Class DepartmentServiceInterface
Inherits MarshalByRefObject
Public Function GetDepartments() As System.Data.DataSet
Dim departmentsDL As New DepartmentDataAccess.DepartmentDataAccess()
Return departmentsDL.GetAllDepartments()
End Function
End Class
Последний компонент, который нужно создать – это несущее приложение. Когда мы создавали веб-службу ASP.NET, мы сконфигурировали ее так, чтобы она могла размещаться и выполняться на веб-сервере, например, Microsoft Internet Information Server (IIS). В следующем примере мы сконфигурируем объект .
web.config для настройки инфраструктуры Remoting.С IIS в качестве среды размещения наше удаленное приложение может использовать механизм обеспечения безопасности IIS, протоколы передачи данных и встроенные механизмы обработки запросов. Установите сборки из компонента DepartmentServiceInterface в виртуальный каталог IIS:
DepartmentRemote на диске C.C:\DepartmentRemote создайте новую папку с именем bin.
DepartmentRemote и выберите из контекстного меню команду Properties (Свойства).
web.config в каталоге C:\DepartmentRemote.web.config, добавив в него следующий код XML (который можно найти в файлах примеров в папке 3tiers под именем web.config ).<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall"
type="DepartmentServiceInterface.DepartmentServiceInterface,
DepartmentServiceInterface"
objectUri="department.soap" />
</service>
</application>
</system.runtime.remoting>
</configuration>
web.config.Этот XML-файл задает конфигурацию инфраструктуры удаленного взаимодействия. Он объявляет новую службу с именем department.soap, которая соответствует классу DepartmentServiceInterface. DepartmentServiceInterface в сборке DepartmentServiceInterface. Параметр Mode="SingleCall" показывает, что для каждого запроса будет создан новый экземпляр этого класса.
Чтобы обратиться к компоненту Service Interface (Интерфейс службы), клиентское приложение должно создать класс-заместитель. Класс-заместитель напоминает копию удаленного объекта; он объявляет те же методы и публичные интерфейсы, но при вызове со стороны клиента он выполняет маршрутизацию вызова к удаленному объекту. Набор инструментальных средств разработки Microsoft .NET Framework SDK предоставляет инструмент SOAPSuds, который можно использовать для того, чтобы сгенерировать класс-заместитель.
cd \, чтобы перейти в корневой каталог дискаmd ClientApp, чтобы создать новый каталог для клиентского приложенияcd ClientApp, чтобы перейти в папку ClientAppsoapsuds -url:http://localhost/departmentservice/department.soap?wsdl -oa:DepartmentProxy.dllУтилита SOAPSuds загружает автоматически сгенерированный инфраструктурой удаленного взаимодействия файл описания службы, который описывает каждый из методов, предлагаемых классом DepartmentServiceInterface. На основе этого файла SOAPSuds генерирует новую сборку с именем DepartmentProxy.dll, которая содержит класс, способный использовать удаленную службу.
Для вызова удаленной службы мы можем использовать класс-заместитель DepartmentProxy.dll. Чтобы создать клиентское приложение и использовать класс-заместитель, выполните следующие действия:
3tiers\ClientApp.ClientApp и нажмите кнопку ОК.ClientApp и выберите из контекстного меню команду Add Reference (Добавить ссылку).DepartmentProxy.dll, а затем нажмите кнопку ОК.Form1 добавьте элемент управления DataGridView из панели Toolbox (Панели элементов).DataGridView Tasks снимите флажки Enable Adding (Разрешить добавление), Enable Editing (Разрешить изменение) и Enable Deleting (Разрешить удаление).DataGridView и задайте для свойства Dock значение Fill.Form1_Load следующий код.Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Handles MyBase.Load
Dim de As New DepartmentServiceInterface.DepartmentServiceInterface
Dim departments As New DataSet
departments = de.GetDepartments()
DataGridView1.DataSource = departments.Tables(0)
DataGridView1.AutoGenerateColumns = True
End Sub
DataGridView покажет полученный от SQL Server список всех отделов.Хотя это может показаться слишком сложным (конечно, так много шагов!), в целом архитектура нашего примера .
(рис 5.3) Архитектура примера .NET RemotingИ ASP.NET,. и .
В этой лекции рассказывалось о том, как осуществляется доступ к данным SQL Server с удаленного клиентского приложения либо через открытие прямого доступа к SQL Server через интернет, либо посредством написания интерфейса службы среднего уровня. Прямое соединение через интернет обеспечивает больше гибкости, но одновременно подвергает безопасность вашей установки дополнительному риску. Использование архитектуры среднего уровня предоставляет серверу SQL Server защищенный интерфейс, повышает масштабируемость и производительность, а также упрощает задачи настройки конфигурации и обслуживания.
| Чтобы | Выполните следующие действия |
|---|---|
| Открыть соединение с SQL Server через TCP/IP | |
| Убедиться, что протокол TCP/IP на сервере SQL Server включен | В SQL Server Management Studio разверните узел SQL Server |
| Направить клиентское приложение по правильному IP-адресу и номеру порта SQL Server | Укажите IP-адрес и номер порта в строке соединения с помощью следующей синтаксической конструкции:Data Source = tcp:<ip_address>/instance, <номер_порта>; |
| Обратиться к SQL Server с помощью XML/протоколов SOAP через HTTP | Сконфигурируйте конечную точку HTTP с помощью
инструкции T-SQL CREATE ENDPOINT DDL. |
| Использовать веб-службы ASP.NET в среднем уровне | С помощью Visual Studio 2005 создайте новый проект веб-службы. Инкапсулируйте код доступа к данным веб-службе, чтобы не демонстрировать сервер SQL Server пользователям интернета. |
| Использовать технологию Microsoft . |
Используйте Visual Studio 2005 для создания класса службы, который инкапсулирует код доступа, чтобы не открывать пользователям интернета доступ непосредственно к серверу SQL Server. Откройте класс службы для внешнего доступа с помощью хост- приложения, например, IIS. |
Приложения могут нуждаться в доступе к серверу SQL Server через интернет по многим причинам. Например, клиентское приложение, выполняющееся на удаленном компьютере за пределами локальной сети, может обращаться к серверу SQL Server через интернет. Приложение, написанное для другой платформы и не имеющее поддержки поставщиков ODBC или OLE DB, может использовать HTTP как канал для связи с SQL Server.
В зависимости от сетевого протокола, используемого вызывающим приложением, можно при желании открыть доступ к серверу SQL Server либо через протокол TCP/IP, либо через протокол HTTP. Оба подхода настраиваются в SQL Server особым образом, причем возможности, предоставляемые вызывающему приложению каждым из этих подходов, не одинаковы.
Если вы открываете доступ к SQL Server из внешних сетей, следует проявить особенную осторожность в решении вопроса о том, какие ресурсы и функциональные возможности сделать доступными для внешних вызывающих модулей; кроме того, необходимо реализовать инфраструктуру обеспечения безопасности, чтобы не подвергать систему баз данных риску нарушения безопасности.
Еще один подход заключается в предоставлении доступа через компонент среднего уровня, который прослушивает нужный сетевой порт и перенаправляет вызовы серверу SQL Server; при этом сервер остается закрытым для доступа из внешних сетей, тем самым риск компрометации базы данных уменьшается.
Чтобы предоставить прямой доступ к серверу SQL Server из внешней сети, сначала нужно решить, какой протокол передачи данных клиентское приложение будет использовать для связи с сервером. В этом разделе мы сконцентрируемся на следующих моментах:
Реализуя любой из этих двух подходов, следует не забывать о требованиях безопасности.
При использовании протокола TCP/IP SQL Server реализует собственный протокол передачи данных, который называется
На рис. 5.1 показана минимальная рекомендуемая физическая инфраструктура, необходимая для того, чтобы обеспечить доступность SQL Server по протоколу TCP/IP через интернет.
(рис 5.1) Физическая инфраструктура, необходимая для обеспечения доступа к серверу SQL Server по протоколу TCP/IP через интернетМежсетевой экран ограничивает доступ к внутренней сети, перенаправляя только те запросы, которые предназначены конкретным TCP/IP-адресам локальной сети. Это означает, что:
Эти действия детализируются в следующих разделах данной лекции.
SQL Server обеспечивает поддержку нескольких протоколов передачи данных. Чтобы проверить, включен ли протокол TCP/IP, выполните следующие действия:



Инструмент SQL Server



Экземпляр SQL Server по умолчанию прослушивает порт TCP номер 1433. Именованные экземпляры SQL Server получают динамически назначаемый адрес порта TCP при загрузке экземпляра. Если нужно обеспечить доступ к экземпляру SQL Server через интернет, необходимо настроить прослушивание экземпляром конкретного порта, который не назначается динамически. Чтобы настроить прослушивание определенного порта TCP именованным экземпляром сервера, выполните следующие действия:


Нажмите кнопку ОК. Диспетчер конфигурации SQL Server проинформирует вас о том, что изменения вступят в силу после перезапуска службы SQL Server.
Заключительный этап в обеспечении соединения клиентских приложений с SQL Server через интернет по протоколу TCP/IP – это направление всех вызовов клиентских приложений на соответствующий сервер при помощи IP-адреса и номера порта, прослушиваемых сервером.
Строка соединения для указания имени сервера должна соответствовать такому формату:
Data Source=tcp:<ip_address>/instance,<port_number>; Initial Catalog=<database_name>; User ID=<user_id>; Password=<password>;
Пример корректной строки соединения в этом формате:
Data Source=tcp:190.190.200.100/Sales,1344; Initial Catalog=AdventureWorks; User ID=sa; Password=Pa$$w0rd;
Следующий пример программного кода (который можно найти среди файлов примеров в папке ConnectThroughTCP-port) показывает, как открыть соединение с сервером SQL Server через интернет с использованием протокола TCP/IP и извлечь все записи о сотрудниках из базы данных Adventure Works. Чтобы использовать этот пример, нужно изменить фрагменты строки соединения, выделенные полужирным шрифтом так, чтобы они соответствовали вашей среде. Для обмена данными с сервером через интернет необходим публичный IP-адрес. Если передача данных осуществляется в интрасети, IP-адреса, выделенного серверу в этой сети, вполне достаточно. Используйте <номер_порта>, который был задан в разделе "Настраиваем прослушивание определенных IP-адресов сервером SQL Server".
Integrated Security = true, поскольку TCP/IP не является протоколом аутентификации. Это означает, что соединения не аутентифицируются при использовании учетных данных Windows. Чтобы пройти проверку подлинности, следует использовать идентификатор SQL и указать в строке соединения имя пользователя и пароль.cmd и нажмите кнопку ОК. Откроется окно командной строки. В строке приглашения введите команду ipconfig и нажмите клавишу Enter. Вы увидите IP-адрес компьютера. Введите команду exit и нажмите клавишу Enter, чтобы закрыть окно командной строки.Public Sub GetEmployeeList()
Dim connectionString As String
connectionString = "Data Source=tcp:192.168.1.102,49152;" + _
"Initial Catalog=AdventureWorks; User ID=Mary; password=34TY$$543"
Dim query As String
query = "SELECT Person.Contact.FirstName + " " + " + _
"Person.Contact.LastName AS "Employees" " + _
"FROM Person.Contact " + _
"INNER JOIN HumanResources.Employee " + _
"ON Person.Contact.ContactID = HumanResources.Employee.ContactID"
Using cn As New SqlClient.SqlConnection(connectionString)
Using cmd As New SqlClient.SqlCommand(query, cn)
cn.Open()
Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()
While (dr.Read())
Console.WriteLine(dr(0))
End While
End Using
End Using
End Sub
Помимо этого необходимо сконфигурировать межсетевой экран или прокси-сервер вашей организации на разрешение доступа к SQL Server из внешних приложений.
В SQL Server 2005 появилась возможность использовать протокол HTTP в качестве протокола передачи данных через конечные точки HTTP. Вот основные преимущества использования конечных точек HTTP:
Эти действия детализируются в следующих разделах данной лекции.
Конечные точки HTTP в SQL Server 2005 обеспечивают способ описания сервис-ориентированного интерфейса для операций баз данных. Выражение "сервис-ориентированный" означает, что клиентское приложение не устанавливает соединение и не выполняет напрямую определенные хранимые процедуры или пользовательские функции; вместо этого конечная точка HTTP представляет эти хранимые процедуры и пользовательские функции как службы (Веб-службы с поддержкой XML) через предварительно заданный формат, который называется форматом WSDL (Web Services Description Language, язык описания веб-служб).
Для обмена XML-сообщениями и клиент, и сервер должны соблюдать этот формат.
В примере, рассматриваемом в этой лекции, мы создадим новую хранимую процедуру, которая возвращает список названий заказов.
httpEndpoints.sql.USE AdventureWorks GO CREATE PROCEDURE GET_HEADER_LIST AS SELECT * FROM Sales.SalesOrderHeader GO
EXEC GET_HEADER_LIST
После создания всех хранимых процедур и пользовательских функций, которые будут предоставляться через конечную точку HTTP, следует создать и сконфигурировать саму конечную точку.
Чтобы настроить конфигурацию конечной точки HTTP,. администратор базы данных использует новую инструкцию языка описания данных (DDL), CREATE ENDPOINT.
httpEndpoints.sql. URL tempuri.org представляет пространство имен XML. Можно использовать любую строку, если она является уникальной для организации или компьютера).USE MASTER
GO
EXEC sp_reserve_http_namespace N'http://localhost:80/sql/myservices'
GO
CREATE ENDPOINT [MyServices]
STATE=STARTED
AS HTTP (
PATH=N'/sql/myservices',
PORTS = (CLEAR),
AUTHENTICATION = (INTEGRATED)
)
FOR SOAP (
WEBMETHOD "http://tempuri.org/".'SalesHeadersList' (
NAME=N'[AdventureWorks].[dbo].[GET_HEADER_LIST]', FORMAT=ROWSETS_ONLY)
Данный код создает конечную точку HTTP для представления хранимой процедуры GET_HEADER_LIST в качестве службы, доступной для клиентов через протоколы HTTP и SOAP (Simple Object Access Protocol, простой протокол доступа к объектам).
sp_reserve_http_namespace. См. дополнительную информацию в Электронной документации SQL Server 2005, тема "Резервирование пространства имен HTTP".Конечной точке HTTP, которая была определена выше, был присвоен идентификатор MyServices ; она готова начать получение запросов сразу после выполнения приведенного выше кода, так как этот код устанавливает свойство STATE в состояние STARTED. Другие возможные значения свойства STATE – это STOPPED и DISABLED.
Код также задает для свойства AUTHENTICATION значение INTEGRATED. Это означает, что SQL Server будет пытаться проверить подлинность вызывающего приложения по учетным данным Windows с использованием протокола
Другие протоколы проверки подлинности, например, Обычная проверка подлинности, в процессе проверки подлинности пересылают пароль в незашифрованном виде. При использовании Обычной проверки подлинности SQL Server 2005 требует шифрования канала передачи данных и защиты через протокол SSL (Secure Sockets Layer, протокол защищенных сокетов). Для параметра PORTS могут быть заданы значения CLEAR или SSL. CLEAR показывает, что канал передачи данных не использует SSL.
Параметр PATH показывает
sysadmin и владельцы конечной точки могут устанавливать с ней соединение. Другим пользователям необходимо предоставить разрешение на доступ к конечной точке. Это осуществляется посредством выполнения следующей инструкции: GRANT CONNECT ON HTTP ENDPOINT::[Имя_КонечнойТочки] TO [Домен\Учетная запись пользователя].После настройки конфигурации самой конечной точки, второй фрагмент инструкции CREATE ENDPOINT DDL настраивает хранимые процедуры и пользовательские функции, которые будут представлены в качестве службы.
Администраторы базы данных могут объявить столько методов WEBMETHOD, сколько нужно. Каждый веб-метод (WEB-METHOD) настраивает конфигурацию одной службы, которая сопоставлена одной хранимой процедуре или одной пользовательской функции.
Представленная служба в этом случае идентифицируется по псевдониму "http://tempuri.org/".'SalesHeader-sList'. Этот веб-метод сопоставлен хранимой процедуре, указанной в параметре NAME.
Параметр FORMAT настраивает тип информации, возвращаемой SQL Server. ROWSETS_ONLY показывает, что следует возвращать только результаты. Потом клиентское приложение может воспользоваться объектом ADO.NET DataSet, чтобы получить эти данные.
Параметр WSDL определяет, что формат WSDL может быть сгенерирован автоматически сервером SQL Server.
Клиентские приложения, осуществляющие обмен данными через конечную точку HTTP, могут пересылать только такие запросы, которые соответствуют формату WSDL. Формат WSDL динамически создается сервером SQL Server путем объединения метаданных всех предоставляемых веб-методов (WEBMETHOD) и форматирования их по действующему формату WSDL.
Клиентские приложения, разработанные при помощи среды разработки Microsoft Visual Studio 2005, могут легко создавать веб-ссылки на конечные точки HTTP.
Чтобы создать веб-ссылку на конечную точку HTTP SQL Server, выполните следующие действия (этот проект можно найти в файлах примеров в папке ConsumeHTTPEndpoint ).
DataGridView (Сетка данных) из Панели элементов в область конструктора формы Form1.DataGridView, чтобы отобразить задачи смарт-тэг DataGridView. В этом смарт-тэге снимите флажки Enable Adding (Разрешить добавление), Enable Editing (Разрешить изменение) и Enable Deleting (Разрешить удаление).Выполните двойной щелчок на форме в конструкторе и добавьте в обработчик событий Form1_Load следующий код:
Private Sub Form1 Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Handles MyBase.Load
Dim ws As New localhost.MyServices
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim headers As New DataSet
headers = ws.SalesHeadersList ()
DataGridView1.DataSource = headers.Tables(0)
DataGridView1.AutoGenerateColumns = True
End Sub
Form1.vb [Проект] и нажмите клавишу F4, чтобы открыть окно Properties (Свойства). Выделите в окне свойств элемент управления DataGridView и задайте для свойства Dock значение Fill, щелкнув в средней панели раскрывающегося экрана.DataGridView показывает список всех заголовков заказов на продажи, полученных от SQL Server.Конечные точки HTTP позволяют интегрировать SQL Server 2005 в сервис-ориентированную архитектуру. У использования конечных точек HTTP есть некоторые недостатки.
Эти недостатки можно нейтрализовать, если предоставлять доступ к SQL Server через дополнительный уровень ПО, который защитит установку SQL Server.
Каждая реляционная система управления базами данных (РСУБД) предоставляет интерфейс прикладного программирования (API), который разработчики могут использовать для взаимодействия с базой данных.
Перечислим поставщики доступа к данным - это OLE DB, ODBC, DB-LIB, JDBC и SQLNCLI. Поставщик доступа к данным инкапсулирует сложную логику, реализованную посредством API для СУБД. Поставщик доступа к данным также предоставляет интерфейс, который позволяет разработчикам приложений один раз написать логическую
SQL Server 2005 предоставляет альтернативу использования поставщиков доступа к данным в виде конечных точек HTTP.
Поскольку конечные точки HTTP управляются администратором базы данных, он может тщательно продумать, какие хранимые процедуры и пользовательские функции сделать доступными через конечные точки, зато после этого любая платформа разработки может подключиться и вызвать такие конечные точки.
Единственное требование к приложению, которое подключается к конечной точке HTTP, заключается в том, чтобы это приложение могло вести обмен данными через протокол передачи данных HTTP и отправлять запросы в соответствии с определенным форматом XML/SOAP, которого требует SQL Server 2005.
Платформы и языки программирования с отсутствием поддержки поставщиков доступа к данным OLE DB или ODBC могут осуществлять обмен данных с SQL Server 2005 через конечные точки HTTP.
Вот некоторые примеры таких платформ, языков программирования и новых ситуаций, которые допускают использование конечных точек HTTP:
До сих пор в этой лекции рассказывалось о том, как открыть прямой доступ к SQL Server клиентским приложениям из внешних сетей.
Ввиду того, что SQL Server обслуживает ценные данные, вряд ли можно назвать хорошей идеей демонстрацию установки сервера пользователям общей сети, например, интернет, так как это может привести к возникновению проблем с безопасностью. Кроме того, если сервер SQL Server непосредственно доступен для внешних сетей, это ограничивает масштабируемость и производительность, а также усложняет администрирование сервера.
Ниже описаны преимущества реализации среднего уровня между клиентским приложением и SQL Server:
На рис. 5.2 показан пример возможной архитектуры для доступа к SQL Server через дополнительный уровень.
(рис 5.2) Архитектура для доступа к SQL Server через компонент среднего уровняИнтерфейс службы представляет собой фасад, который демонстрируется клиентским приложениям. В интерфейсе службы внешним пользователям предоставляется только общедоступный интерфейс, который скрывает всю сложность внутренней реализации доступа к SQL Server. Интерфейс службы должен также реализовать все необходимые проверки корректности ввода.
Интерфейс службы поддерживается компонентом доступа к данным. Компонент доступа к данным реализует вызовы SQL Server через поставщики доступа к данным, например, OLE DB или ODBC.
Инфраструктура Microsoft .NET Framework предоставляет несколько методов создания интерфейсов службы. В этой лекции рассматриваются только технологии ASP.NET Web-Services (Веб-службы ASP.NET) и Microsoft .
Как и конечные точки HTTP, веб-служба ASP.NET также использует формат WSDL, но в качестве службы представляет не хранимую процедуру, а логику приложения, написанную в виде компонентов.
Веб-службы ASP.NET размещаются и выполняются на сервере Microsoft Internet Information Services (IIS). Чтобы просмотреть код этого раздела полностью, откройте файл Solution1.sln в папке 3tiers в файлах примеров. Отдельные компоненты находятся во вложенных папках.
Чтобы реализовать доступ к SQL Server через интернет, но с подключением через веб-службу ASP.NET в среднем уровне, выполните следующие действия:
Class1.vb следующим кодом (не забудьте изменить строку соединения, чтобы данные соответствовали вашей среде). Этот пример находится в папке 3tiers\DepartmentDataAccess.Imports System.Data.SqlClient
Public Class DepartmentDataAccess
Public Function GetAllDepartments() As DataSet
Dim result As New DataSet
Dim connectionString As String
Dim selectCommand As String
connectionString = "server=(local);database=AdventureWorks;uid=sa"
selectCommand = "SELECT * FROM HumanResources.Department"
Dim connection As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter(selectCommand, connection)
adapter.Fill(result)
Return result
End Function
End Class
Класс DepartmentDataAccess, в качестве примера, реализует единственный метод, который называется GetAllDepartments. Этот метод возвращает объект DataSet, который содержит все отделы компании Adventure Works.
DepartmentDataAccess. Visual Studio 2005 скомпилирует проект в сборку. Эта сборка представляет уровень доступа к данным.3tiers\webservice.
HelloWorld, созданной шаблоном Visual Studio, введите следующий код:<WebMethod()> _
Public Function GetDepartments() As System.Data.DataSet
Dim departmentsDL As New DepartmentDataAccess.DepartmentDataAccess()
Return departmentsDL.GetAllDepartments()
End Function




Конечно, клиентское приложение не будет выполнять веб-службу с помощью той же пробной веб-страницы, которую мы с вами только что использовали. Чтобы написать клиентское приложение, которое будет потребителем веб-службы, можно выполнить те же действия, которые были описаны ранее в разделе "Создаем ссылку на конечную точку HTTP из клиентского приложения".
Инфраструктура Microsoft .NET предоставляет различные технологии для обеспечения удаленным клиентам возможности установить соединение с компонентами на стороне сервера.
Если использовать веб-службы ASP.NET, как в предыдущем разделе данной лекции, клиентское приложение будет осуществлять обмен данными с помощью формата SOAP через интерфейс сервиса.
Microsoft .
Главное отличие между веб-службами ASP.NET. и технологией .
Построим пример, используя в качестве основы кода пример из предыдущего раздела. Повторите действия с 1 по 4 из предыдущего раздела, а затем выполните следующую последовательность действий:
DepartmentDataAccess необходимо предоставить компонент интерфейса сервиса. В этом примере мы создадим интерфейс сервиса .3tiers\Remoting.DepartmentDataAccess, а затем нажмите кнопку ОК,Class1.vb следующим кодом:Public Class DepartmentServiceInterface
Inherits MarshalByRefObject
Public Function GetDepartments() As System.Data.DataSet
Dim departmentsDL As New DepartmentDataAccess.DepartmentDataAccess()
Return departmentsDL.GetAllDepartments()
End Function
End Class
Последний компонент, который нужно создать – это несущее приложение. Когда мы создавали веб-службу ASP.NET, мы сконфигурировали ее так, чтобы она могла размещаться и выполняться на веб-сервере, например, Microsoft Internet Information Server (IIS). В следующем примере мы сконфигурируем объект .
web.config для настройки инфраструктуры Remoting.С IIS в качестве среды размещения наше удаленное приложение может использовать механизм обеспечения безопасности IIS, протоколы передачи данных и встроенные механизмы обработки запросов. Установите сборки из компонента DepartmentServiceInterface в виртуальный каталог IIS:
DepartmentRemote на диске C.C:\DepartmentRemote создайте новую папку с именем bin.
DepartmentRemote и выберите из контекстного меню команду Properties (Свойства).
web.config в каталоге C:\DepartmentRemote.web.config, добавив в него следующий код XML (который можно найти в файлах примеров в папке 3tiers под именем web.config ).<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall"
type="DepartmentServiceInterface.DepartmentServiceInterface,
DepartmentServiceInterface"
objectUri="department.soap" />
</service>
</application>
</system.runtime.remoting>
</configuration>
web.config.Этот XML-файл задает конфигурацию инфраструктуры удаленного взаимодействия. Он объявляет новую службу с именем department.soap, которая соответствует классу DepartmentServiceInterface. DepartmentServiceInterface в сборке DepartmentServiceInterface. Параметр Mode="SingleCall" показывает, что для каждого запроса будет создан новый экземпляр этого класса.
Чтобы обратиться к компоненту Service Interface (Интерфейс службы), клиентское приложение должно создать класс-заместитель. Класс-заместитель напоминает копию удаленного объекта; он объявляет те же методы и публичные интерфейсы, но при вызове со стороны клиента он выполняет маршрутизацию вызова к удаленному объекту. Набор инструментальных средств разработки Microsoft .NET Framework SDK предоставляет инструмент SOAPSuds, который можно использовать для того, чтобы сгенерировать класс-заместитель.
cd \, чтобы перейти в корневой каталог дискаmd ClientApp, чтобы создать новый каталог для клиентского приложенияcd ClientApp, чтобы перейти в папку ClientAppsoapsuds -url:http://localhost/departmentservice/department.soap?wsdl -oa:DepartmentProxy.dllУтилита SOAPSuds загружает автоматически сгенерированный инфраструктурой удаленного взаимодействия файл описания службы, который описывает каждый из методов, предлагаемых классом DepartmentServiceInterface. На основе этого файла SOAPSuds генерирует новую сборку с именем DepartmentProxy.dll, которая содержит класс, способный использовать удаленную службу.
Для вызова удаленной службы мы можем использовать класс-заместитель DepartmentProxy.dll. Чтобы создать клиентское приложение и использовать класс-заместитель, выполните следующие действия:
3tiers\ClientApp.ClientApp и нажмите кнопку ОК.ClientApp и выберите из контекстного меню команду Add Reference (Добавить ссылку).DepartmentProxy.dll, а затем нажмите кнопку ОК.Form1 добавьте элемент управления DataGridView из панели Toolbox (Панели элементов).DataGridView Tasks снимите флажки Enable Adding (Разрешить добавление), Enable Editing (Разрешить изменение) и Enable Deleting (Разрешить удаление).DataGridView и задайте для свойства Dock значение Fill.Form1_Load следующий код.Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Handles MyBase.Load
Dim de As New DepartmentServiceInterface.DepartmentServiceInterface
Dim departments As New DataSet
departments = de.GetDepartments()
DataGridView1.DataSource = departments.Tables(0)
DataGridView1.AutoGenerateColumns = True
End Sub
DataGridView покажет полученный от SQL Server список всех отделов.Хотя это может показаться слишком сложным (конечно, так много шагов!), в целом архитектура нашего примера .
(рис 5.3) Архитектура примера .NET RemotingИ ASP.NET,. и .
В этой лекции рассказывалось о том, как осуществляется доступ к данным SQL Server с удаленного клиентского приложения либо через открытие прямого доступа к SQL Server через интернет, либо посредством написания интерфейса службы среднего уровня. Прямое соединение через интернет обеспечивает больше гибкости, но одновременно подвергает безопасность вашей установки дополнительному риску. Использование архитектуры среднего уровня предоставляет серверу SQL Server защищенный интерфейс, повышает масштабируемость и производительность, а также упрощает задачи настройки конфигурации и обслуживания.
| Чтобы | Выполните следующие действия |
|---|---|
| Открыть соединение с SQL Server через TCP/IP | |
| Убедиться, что протокол TCP/IP на сервере SQL Server включен | В SQL Server Management Studio разверните узел SQL Server |
| Направить клиентское приложение по правильному IP-адресу и номеру порта SQL Server | Укажите IP-адрес и номер порта в строке соединения с помощью следующей синтаксической конструкции:Data Source = tcp:<ip_address>/instance, <номер_порта>; |
| Обратиться к SQL Server с помощью XML/протоколов SOAP через HTTP | Сконфигурируйте конечную точку HTTP с помощью
инструкции T-SQL CREATE ENDPOINT DDL. |
| Использовать веб-службы ASP.NET в среднем уровне | С помощью Visual Studio 2005 создайте новый проект веб-службы. Инкапсулируйте код доступа к данным веб-службе, чтобы не демонстрировать сервер SQL Server пользователям интернета. |
| Использовать технологию Microsoft . |
Используйте Visual Studio 2005 для создания класса службы, который инкапсулирует код доступа, чтобы не открывать пользователям интернета доступ непосредственно к серверу SQL Server. Откройте класс службы для внешнего доступа с помощью хост- приложения, например, IIS. |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.