SSIS: пакетный файл записи на сетевую папку - Пакет вызовов (RDP vs Remote)

У меня есть пакет служб SSIS, который записывает файл данных.TXT в папку. Я проверил это на моей локальной машине: пакеты SSIS успешно записывают (на мой диск C - C:\myPath).

Затем развертывается на сервере: пакет не может записать (в сетевой файловый ресурс - \myDomain\Folder1\Folder2).

Моя учетная запись пользователя имеет доступ к папке. С сервера я попытался выполнить пакет двумя разными способами:

1) Удаленное соединение с моего компьютера с моими учетными данными пользователя через SSMS (пакет не может записать файл). Remote session execution on my PC is not working.

2) RDP с подключением к удаленному рабочему столу к MYSERVER с моими учетными данными пользователя через SSMS (пакет успешно записывает файл). I am able to run it from the RDP session on MYSERVER and the file was written succesfully.

В итоге: пакет работает, но не работает. Один из наших сетевых администраторов добавил MYSERVER, чтобы иметь доступ к папке, что может быть причиной, по которой я могу выполнить ее из сеанса RDP.

Точное сообщение об ошибке "Не удается открыть файл данных":

Мой вопрос:

А) Кто-нибудь знает, почему происходит сбой пакета, когда я выполняю его с одной и той же учетной записью пользователя двумя разными способами (Local Connection vs. Server RDP)?

Б) Есть ли у кого-нибудь рекомендации о том, как я предоставляю пользователю доступ к своему пакету? Пакет имеет два входных параметра (со значениями по умолчанию) для ввода пользователем.

_

Сообщение от моего сетевого администратора:

Your id is in the proper group to access the share and I even see numerous updates to the folder from your ID and yet I also find this.

Log Name:      Microsoft-Windows-SMBServer/Security
Source:        Microsoft-Windows-SMBServer
Date:          6/12/2018 9:01:21 AM
Event ID:      1006
Task Category: (1006)
Level:         Error
Keywords:      Audit Failure,(8)
User:          SYSTEM
Computer:      mySERVER.myDOMAIN
Description:
The share denied access to the client.
Client Name: \\10.26.151.96
Client Address: 10.26.151.96:57626
User Name: myDOMAIN\myUser
Session ID: 0x16C029C000581
Share Name: \\*\DIXFDev
Share Path: \??\D:\Shares\DIXFDev
Status: {Access Denied}
A process has requested access to an object, but has not been granted those access rights. (0xC0000022)
Mapped Access: 0x80080
Granted Access: 0x0
Security Descriptor: 0x0100048058000000680000000000000014000000020044000200000000031800FF011F000102000000000005200000002002000000002400BF011300010500000000000515000000007B755294545B7AB2192C25066D000001020000000000052000000020020000010500000000000515000000007B755294545B7AB2192C2500020000
Guidance:
You should expect access denied errors when a principal accesses a share without the necessary permissions. Usually, this indicates that the principal does not have direct security permissions or lacks membership in a group that has direct access permissions. To determine and correct the permissions on the specified share, an administrator can use the Security tab in File Explorer Properties dialog, the SMBSHARE Windows PowerShell module, or the NET SHARE command. You can also use the Effective Access tab in File Explorer to help diagnose the issue.
Applications may generate access denied errors if they attempt to open files in a writable mode first, and then reopen the files in a read-only mode. In this case, no user action is required.
If access to the share is denied and this event is not logged, you can examine the file and folder NTFS/REFS permissions.
This error does not indicate a problem with authentication, only authorization.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-SMBServer" Guid="{D48CE617-33A2-4BC3-A5C7-11AA4F29619E}" />
    <EventID>1006</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>1006</Task>
    <Opcode>0</Opcode>
    <Keywords>0x810000000000008</Keywords>
    <TimeCreated SystemTime="2018-06-12T14:01:21.342045500Z" />
    <EventRecordID>357496420</EventRecordID>
    <Correlation />
    <Execution ProcessID="4" ThreadID="2680" />
    <Channel>Microsoft-Windows-SMBServer/Security</Channel>
    <Computer>mySERVER.myDOMAIN</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <UserData>
    <EventData xmlns="Smb2Namespace">
      <ShareNameLength>11</ShareNameLength>
      <ShareName>\\*\DIXFDev</ShareName>
      <SharePathLength>21</SharePathLength>
      <SharePath>\??\D:\Shares\DIXFDev</SharePath>
      <ClientAddressLength>128</ClientAddressLength>
      <ClientAddress>0200E11A0A1A976000000000000000000000FFFF0A1A97600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</ClientAddress>
      <UserNameLength>14</UserNameLength>
      <UserName>myDOMAIN\bl0040</UserName>
      <ClientNameLength>14</ClientNameLength>
      <ClientName>\\10.26.151.96</ClientName>
      <MappedAccess>0x80080</MappedAccess>
      <GrantedAccess>0x0</GrantedAccess>
      <ShareSecurityDescriptorLength>132</ShareSecurityDescriptorLength>
      <ShareSecurityDescriptor>0100048058000000680000000000000014000000020044000200000000031800FF011F000102000000000005200000002002000000002400BF011300010500000000000515000000007B755294545B7AB2192C25066D000001020000000000052000000020020000010500000000000515000000007B755294545B7AB2192C2500020000</ShareSecurityDescriptor>
      <Status>0xc0000022</Status>
      <TranslatedStatus>0xc0000022</TranslatedStatus>
      <SessionID>0x16c029c000581</SessionID>
    </EventData>
  </UserData>
</Event>

Скрипт, созданный из сеанса RDP SSMS со значениями параметров:

DECLARE
        @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'FYE AP AuditFile_rep238.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'IsolatedPackages', @project_name=N'FYE AP AuditFile_rep238', @use32bitruntime=False, @reference_id=56
        SELECT
                @execution_id DECLARE @var0 sql_variant = N'\\MYSERVER\folder1\folder2\SSISPackages\FYEAPAuditFile\audit-file-ap_ax-export_REP238_piped.txt' EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,
                @object_type                            =                                                                                                                                                                30           ,
                @parameter_name                         =N'paramFilePath'                                                                                                                                                             ,
                @parameter_value                        =@var0 DECLARE @var1 sql_variant = N'2017' EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id                                                              ,
                @object_type                            =                                                                                                  30                                                                         ,
                @parameter_name                         =N'paramYear'                                                                                                                                                                 ,
                @parameter_value                        =@var1 DECLARE @var2 SMALLINT = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id                                                                       ,
                @object_type                            =                                                                                         50                                                                                  ,
                @parameter_name                         =N'LOGGING_LEVEL'                                                                                                                                                             ,
                @parameter_value                        =@var2 EXEC [SSISDB].[catalog].[start_execution] @execution_id GO

Образ SSMS вызывающего пакета:

1 ответ

В обоих случаях вы подключаетесь к SQL Server, используя учетную запись пользователя, которая была аутентифицирована контроллером домена при входе в систему.

  1. Ваш клиентский компьютер
  2. Сервер под управлением SQL Server и SSIS

Во втором случае (RDP) это похоже на то, как вы работаете на сервере, обращающемся к общей папке. В первом случае (удаленная SSMS) вы на своем клиентском компьютере запрашиваете у удаленного SQL Server доступ к общей папке с использованием контекста безопасности. Это называется делегированием Active Directory (или "делегированием Kerberos") и должно быть настроено. Попросите администраторов вашего домена создать имена участников-служб для SQL Server (или его служебной учетной записи) и файлового сервера (оба, если они еще отсутствуют). Затем они должны настроить (разрешить) делегирование с SQL Server (или его учетной записи службы) на файловый сервер (например, с помощью "Active Directory - пользователи и компьютеры"). Это позволит SQL Server на удаленном компьютере обмениваться данными с контроллером домена, чтобы запросить билет службы (то есть на языке Kerberos) для файлового сервера от имени вас (или любого другого, кто подключен). Этот билет службы затем представляется службе "SMB-сервер" на файловом сервере, чтобы проверить общий файловый ресурс и разрешения NTFS.

PS: если вы планируете выполнить пакет с заданием агента SQL Server с использованием учетных данных агента SQL Server, вам не нужно все это делегирование. Просто настройте задание, его также можно без проблем запустить из удаленного сеанса SSMS, при условии, что агент SQL Server имеет соответствующий доступ к общей папке.

Другие вопросы по тегам