|
Автор: Владимир Белов То что я хочу рассказать в данной статье, думаю известно
многим DBA, но, анализируя вопросы приходящие в форум на
www.sql.ru, становится ясно, что эти моменты вызывают
некоторые затруднения при работе. Учетная запись для старта сервисов MS SQL Server 2000 SQL Server в своем "стандартном" наборе имеет следующие службы:
Для запуска указанных сервисов вы можете использовать,
скажем так, два пути.
Так как преимущество использования доменной учетной записи очевидно, то практически всегда, когда это возможно, используйте доменную учетную запись для старта SQL Server. Однако, здесь тоже есть свои "подводные" камни. Некоторые DBA, не долго мучаясь, стартуют сервис от имени пользователя, которые входит в группу Domen Admin. Но это фактически противоречит всем канонам безопасности, т.к., в случае взлома, ни что не мешает злоумышленнику выполнить какие-нибудь особо веселые команды через xp_cmdshell. Поэтому рекомендуется предоставить следующие разрешения для учетной записи для старта сервиса MSSQLSERVER и SQLSERVERAGENT: · Full control на директорию с исполняемыми файлами SQL
Server; - HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLSever Во всяком случае, касаемо прав на ветки реестра - это
рекомендации Microsoft. Обычно я предоставляю права на всю
ветвь MSSQLServer.
![]() Предоставление прав на уровне системы для пользователя Dealine, E-commerce на директорию с файлами данных.
![]() Предоставление прав на ветку реестра "MSSQLServer". Выполнение распределенных запросов Предположим, у нас есть два сервера, которые имеют разную
функциональную нагрузку, например, сервер TRELON с финансовой
программой и сервер NEPTUN с основной корпоративной программой
(во всяком случае, так у нас в организации) и появляется
необходимость, например, при работе отчетов получить данные
как с одного сервера, так и с другого. Как всегда есть три
пути решения данной "проблемы". USE master GO sp_configure 'remote proc trans', 1 -- аналог Enforce … GO reconfigure with override GO sp_configure 'remote access', 1 -- аналог Allow other … GO reconfigure with override GO
![]() Далее - к распределенным запросам. Насколько я понял, SQL Server все обнаруженные MS SQL сервера добавляет как Remote Server. Обычно я удаляю ненужные, а необходимые делаю как Linked Server. Разница между ними только в том, что: - Во-первых, Remote Server - это только SQL Server, а
Linked Server - это может быть и не SQL Server; Предположим, что на сервере TRELON есть SQL - логин DEALINE.CENTER\BelovV. Данному логину необходимо получить данные с сервера NEPTUN. Возьмем за основу то, что у нас запрос выполняется с сервера TRELON, сервер NEPTUN уже подключен как Linked Server. Если нет подключаем: - из QA выполнив: exec master..sp_addlinkedserver 'NEPTUN', N'SQL Server' exec master..sp_serveroption 'NEPTUN', 'DATA ACCESS', true - из EM: Security - Linked Server - New Linked Server. Указываем, что это будет у нас SQL Server, указываем имя сервера. Далее на вкладке "Server Options" отмечаем следующие пункты: Data Access RPC RPC Out Описание этих параметров выходит за рамки данной статьи, поэтому читайте о данных параметрах в BOL или спросите на форуме :) Добавление нового Linked Server
![]() ![]() Итак, сервер добавлен - можно идти дальше. А чтобы идти дальше есть три пути: Путь номер один На вкладке "Security" в колонке "Local Login" указываем
логин, которому нужен доступ на сервер NEPTUN. Далее на
сервере NEPTUN создаем такой же логин с необходимыми правами.
Почему такой же? Для удобства администрирования.
:) Путь номер два На сервере NEPTUN создать новый логин, например, "NEPTUN" и всем пользователям, которым необходим доступ на удаленный сервер, давать доступ под этим логином. Т.е., также на вкладке "Security" в колонке "Local Login" указать необходимый логин, а в колонке "Remote User" - указать логин "NEPTUN" Путь номер три По моему мнению - это самый лучший путь, но, чтобы его
использовать, у Вас должна быть развернута и функционировать
Active Directory. Без этого никак. 1. В оснастке Active Directory Users and Computers - Users
найти пользователя, под которым запускаются сервисы SQL
Server'a и в свойствах данного пользователя на вкладке Account
в Account options отметить флажок "Account is trusted for
delegention". После этого все должно работать. Иногда встречаются ошибки, такие как, например - пользователь устанавливает соединение с сервером TRELON, на котором установлен SP3, далее запускает распределенный запрос к серверу NEPTUN, на котором установлен SP2. В этом случае Вы получите ошибку "Login failed…". То есть необходимо обеспечить идентичность, скажем так, версий Ваших SQL серверов. И ещё одно условие - необходимо обеспечить идентичность установленных Windows Service Pack.
![]() Свойства компьютера в оснастке "Active Directory Users and Computers" Свойства пользователя в оснастке "Active Directory Users and Computers" Добавление нового пользователя. |
Автор: Владимир Белов 2003г. |