Разрешение проблем контекста безопасности при выполнении DTS пакета в задании по расписанию

ПУБЛИКАЦИИ  

По материалам статьи Microsoft: INF: How to Run a DTS Package as a Scheduled Job (Q269074)

СОДЕРЖАНИЕ

1. Введение
2. Кто является владельцем DTS пакета?
3. Как устанавливается владелец задания?
4. Как запускается DTS пакет?
5. Как Windows NT аутентификация используется при подключениях?
6. Типичные проблемы
6.1. Обозначенные буквой диски (Mapped Drives)
6.2. Относительный путь
6.3. Использование COM компонент в ActiveX сценариях
6.4. Безопасность пакета
6.5. Разрешения для SQLAgentCmdExec

1. Введение

Информация в этой статье относиться к Microsoft SQL Server версий 7.0 и 2000 (все издания)

Одной из распространённых проблем, связанных с использованием Data Transformation Services (DTS), состоит в том, что DTS пакет выполняется без ошибок в SQL Server Enterprise Manager, но наблюдаются сбои в работе DTS пакета, когда он выполняется как задание по расписанию. Обычно, это происходит из-за отличий в контексте безопасности, когда пакет выполняется как задание и когда он выполняется в интерактивном режиме. Эта статья призвана помочь в разрешении проблем безопасности, связанных с запуском на выполнение DTS пакетов.
Когда Вы запускаете на исполнение DTS пакет через DTS Designer в SQL Enterprise Manager (EM), пакет будет исполняться на том компьютере, где Вы запустили EM. Если Вы работаете с сервером (физически или через удалённое соединение), пакет будет выполнен на этом сервере. Если Вы работаете на рабочей станции, и Вы зарегистрировали SQL Server в EM, то пакет будет выполнен на этой рабочей станции. Контекст безопасности пакета будет такой, как у Вашей учётной записи Windows NT, под которой Вы зарегистрировались на этом компьютере. Когда пакет выполняется как задание по расписанию, пакет всегда выполняется на сервере.
Часто, разработчик создает и проверяет DTS пакет в интерактивном режиме на своей рабочей станции с помощью DTS Designer в EM. После того, как DTS пакет отлажен, пакет оформляется как задание. Это действие изменяет расположение пакета с рабочей станции разработчика на сервер. Если пакет загружал текстовые данные в SQL Server, может произойти сбой в работе пакета на сервере, если такой путь к текстовому файлу не существуют на сервере. Если пакет соединялся с другим сервером, сбой в работе пакета может произойти, если контекст безопасности задания не может обеспечить необходимые права для подключения.

[Содержание]

2. Кто является владельцем DTS пакета?

Пакеты оформленные, как задание по расписанию, соответственно управляются сервисом SQL Agent. Это задание, как любое другое задание по расписанию, имеет владельца (Owner). Владельцем может быть SQL Server логин или учетная запись Windows NT.

Определить владельца задания можно следующим образом:

Дважды щёлкните по заданию в Enterprise Manager, и затем посмотрите поле с раскрывающимся списком Owner.
-или-
Выполните системную хранимую процедуру msdb.dbo.sp_help_job.

Контекст безопасности, в котором задание выполняется, определяется владельцем задания. Если задание принадлежит логину, который не является членом серверной роли Sysadmin, то пакет будет исполнен в контексте специальной учетной записи SQLAgentCmdExec, и задание будет иметь её права и разрешения.
Для SQLAgentCmdExec, чтобы обеспечить запуск задания, которое будет присоединяться к SQL серверу, учетная запись SQLAgentCmdExec должна иметь надлежащие Windows NT разрешениями и обеспечивать доступ к SQL серверу с соответствующими правами для базы данных. Учетная запись SQLAgentCmdExec не имеет вообще никаких прав вне локального компьютера, на котором запущен SQL Server. Поэтому, любой пакет, который требует установки подключения к другим компьютерным, будет завершён со сбоем, если он оформлен, как задание, принадлежащее логину который не является членом роли Sysadmin.
Если задание принадлежит учетной записи (SQL Server логин или учётная запись Windows NT) которая является членом роли Sysadmin, задание будет выполняться SQL Agent-ом в контексте учетной записи, от имени которой запускается сервис SQL Agent.
Также, если задание принадлежит учетной записи из домена Windows NT и если пакет сохранен на SQL сервере или в репозитории SQL Server (не как файл), Вы должны запустить службу SQL Server от имени учётной записи этого же домена или учетной записи из доверенного домена.

[Содержание]

3. Как устанавливается владелец задания?

Когда Вы щёлкаете правой кнопкой мыши по DTS пакету и определяете его в виде задания по расписанию, присвоение владельца этому заданию зависит от того, как SQL Server зарегистрирован в Enterprise Manager. Если SQL Server зарегистрирован через Windows NT аутентификацию, владельцем задания по расписанию будет учетная запись, от имени которой стартует сервис SQL Agent. Если SQL Server зарегистрирован в EM с помощью собственной аутентификации SQL Server (например, под логином SA), владельцем задания будет тот же самый логин SQL сервера.

Изменение владельца пакета осуществляется следующим образом:

1. Дважды щёлкните по заданию в Enterprise Manager.
2. Щёлкните по вкладке General, и затем щёлкните по полю с раскрывающимся списком Owner.

Также Вы можете использовать системную хранимую процедуру msdb.dbo.sp_update_job, с помощью которой можно изменить владельца пакета.

[Содержание]

4. Как запускается DTS пакет?

Если Вы запускаете пакет вручную, используя утилиту командной строки DTSrun.exe, контекст безопасности будет как у учётной записи Windows, под которой Вы зарегистрировались на компьютере. Если Вы запускаете пакет, используя DTSrun.exe через расширенную хранимую процедуру xp_cmdshell, пакет будет выполнен в контексте учетной записи, от имени которой стартует сервис SQL Server, при условии, что пользователь, который выполнил xp_cmdshell, является членом роли Sysadmin. Если пользователь, который выполнил xp_cmdshell, не включён в роль Sysadmin, то DTSrun.exe выполнится в контексте учетной записи SQLAgentCmdExec.
Если SQL Server был запущен от имени учетной записи Local System, DTS пакет не будет иметь никаких разрешений вне этого компьютера.
Если сервис SQL Server стартован под учетной записью Windows NT, пакет будет иметь те же самые права и разрешения как у этой учётной записи. Если эта учетная запись Windows NT принадлежит локальному компьютеру (не является учётной записью домена), пакет не будет иметь никаких прав вне этого компьютера. Если учётная запись Windows NT является учётной записью домена, пакет сможет обращаться к ресурсам на других компьютерах в том же домене.

[Содержание]

5. Как Windows NT аутентификация используется при подключениях?

Иногда DTS пакет содержит объект, который создаёт подключение к источнику данных используя Windows NT аутентификацию. Контекст безопасности, используемый для этого подключения, будет тот же самый, как у контекста пакета, который выполняется. Если пакет запускается из командной строки через DTSRun.exe, используются права учетной записи Windows NT, под которой зарегистрировались на компьютере. Если пакет выполняется как задание SQL Server Agent, то подключение будет создано от учетной записью, от имени которой стартован сервис SQL Agent (принимаем, что владелец пакета является членом роли Sysadmin).

[Содержание]

6. Типичные проблемы

Ниже представлено описание нескольких типичных проблем, с которыми Вы можете столкнуться при запуске DTS пакетов в виде заданий по расписанию.

[Содержание]

6.1. Обозначенные буквой диски (Mapped Drives):

Если в пакете используется путь к файлу с обозначенным буквой, распределённым в сети диском, исполнение пакета по расписанию завершиться неудачно независимо от того, кто является владельцем пакета. SQL Agent - как сервис Windows NT и любой сервис Windows NT не могут видеть обозначенные буквой, распределённые в сети диски. Обозначенные буквой диски являются частью профиля пользователя, который загружается при его входе в сеанс Windows NT. Сервисы не работают с параметрами пользователя. Используйте путь в формате UNC вместо обозначенных буквой дисков.

[Содержание]

6.2. Относительный путь:

Относительный путь (путь через имя диска) может определять текущее расположение пакета (например: C:\). Если пакет разработан на рабочей станции и используется в задании по расписанию, относительные пути, использованные в пакете при его исполнении на сервере, могут измениться. Относительный путь это ссылка, которая может указывать на другое физическое расположение на сервере. Если указываемые в этой ссылке файлы на сервере не будут находиться в таком же, как на рабочей станции месте, произойдёт сбой в выполнении пакета.

[Содержание]

6.3. Использование COM компонент в ActiveX сценариях:

Если компоненты COM (например, запросы Microsoft ActiveX Data Objects (ADO), Remote Data Objects (RDO) или объекты Decision Support Object (DSO)) вызываются в сценарии ActiveX, эти компоненты должны существовать на компьютере, на котором DTS пакет будет исполняться. Если Вы выполняете пакет с помощью DTS Designer в EM или через DTSrun.exe, эти компоненты должны существовать на компьютере, на котором Вы в этот момент работаете. Если пакет оформлен, как задание по расписанию, необходимые компоненты должны быть загружены на компьютере, где запущен SQL Server.

[Содержание]

6.4. Безопасность пакета:

DTS пакеты могут использовать пароль владельца и пользовательские пароли. Эти пароли существенны только для тех, кто может редактировать и исполнять пакеты. Ни один из них не влияет на контекст безопасности, в котором пакет исполняется.

[Содержание]

6.5. Разрешения для SQLAgentCmdExec:

Если задание выполняется в контексте учетной записи SQLAgentCmdExec, и учетная запись SQLAgentCmdExec не имеет прав входа в SQL Server, задание может закончиться неудачно со следующим сообщением об ошибке:

DTSRun: Loading... DTSRun: Executing... DTSRun OnStart: DTSStep_DTSExecuteSQLTask_1 DTSRun OnError: DTSStep_DTSExecuteSQLTask_1, Error = -2147217843 (80040E4D) Error string: Login failed for user 'NT_name\SQLAgentCmdExec'. Error source: Microsoft OLE DB Provider for SQL Server Help file: Help context: 0 Error Detail Records: Error: -2147217843 (80040E4D); Provider Error: 18456 (4818) Error string: Login failed for user 'NT_name\SQLAgentCmdExec'. Error source: Microsoft OLE DB Provider for SQL Server Help file: Help context: 0 DTSRun OnFinish: DTSStep_DTSExecuteSQLTask_1 DTSRun: Package execution complete. Process Exit Code 1. The step failed.

Вы должны обеспечить для SQLAgentCmdExec необходимый для правильной работы логин с соответствующими правами к базе данных.

[Содержание]


Перевод: Александра Гладченко  2002г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz