Proxy / thông tin SSIS không hoạt động trong bước công việc Tác nhân SQL


7

Tôi đã tìm kiếm xung quanh và tìm thấy những câu hỏi tương tự nhưng không có gì cụ thể với những gì tôi đang gặp rắc rối.

Vấn đề: Tôi không thể lấy proxy SSIS và thông tin xác thực SQL được định cấu hình chính xác để mạo danh tài khoản dịch vụ truy cập bị hạn chế cho bước công việc Tác nhân SQL chạy gói SSIS. Tài khoản dịch vụ truy cập hạn chế có tất cả các đặc quyền cần thiết và gói được thiết kế chính xác. Tôi đã đọc nhiều tài liệu về chủ đề này và muốn giúp đỡ trong trường hợp tôi bỏ lỡ điều gì đó.

Bối cảnh: (Máy chủ SQL 2012 SP3 chạy trên Windows Server 2012 R2. Công cụ SQL chạy trong Domain1 \ Admin1 và SQL Agent chạy dưới Domain1 \ Admin2. Cả hai cũng nằm trong vai trò máy chủ SYSADMIN.)

Chúng tôi có gói SSIS hoạt động tốt khi được chạy tương tác bởi SYSADMIN và cũng chạy tốt khi chạy trong bước công việc là "Tài khoản dịch vụ đại lý SQL Server". Tuy nhiên, nhóm Bảo mật của chúng tôi muốn chúng tôi chạy bằng thông tin đăng nhập giới hạn trong những gì công việc cần làm và tôi hiểu đây là cách tốt nhất. Tất cả mọi thứ tôi đã đọc chỉ ra rằng proxy và chứng chỉ SSIS sẽ giúp giải quyết yêu cầu này; tuy nhiên tôi không thể làm cho cấu hình hoạt động được vì vậy tôi phải làm gì đó sai.

Gói được chạy thông qua bước công việc gói SSIS. Đây là một tệp cục bộ và không được triển khai lên MSDB hoặc SSISDB. Gói kết nối với chia sẻ mạng, tải vào cơ sở dữ liệu cục bộ với máy chủ SQL, cắt ngắn một bảng, chạy một vài thủ tục được lưu trữ, sau đó xóa tệp XLS. Bước công việc được thiết lập để sử dụng thời gian chạy 32 bit.

Bảo mật đã tạo một tài khoản (Domain1 \ NewUser) sẽ có quyền Sửa đổi đối với chia sẻ mạng. Tôi cũng đã yêu cầu họ thêm Domain1 \ Admin2 làm Sửa đổi cho cùng một chia sẻ.

Để thiết lập, tôi đã tạo một đăng nhập SQL cho Domain1 \ NewUser chỉ sử dụng vai trò Công khai và thêm nó dưới dạng db_owner cho cơ sở dữ liệu được đề cập do phạm vi hành động mà gói cần thực hiện. Tôi đã tạo một thông tin xác thực (BatchLoad-cert) bằng cách sử dụng làm nhận dạng tài khoản Domain1 \ NewUser và mật khẩu làm việc chính xác của tài khoản người dùng. Sau đó, tôi đã tạo proxy SSIS (BatchLoad-Proxy) bằng thông tin xác thực BatchLoad, hoạt động trong hệ thống con gói SSIS và thêm thông tin đăng nhập SQL cho Domain1 \ NewUser làm hiệu trưởng tài khoản proxy. Sau đó, tôi đã thay đổi bước công việc Tác nhân SQL chạy gói SSIS để chạy dưới dạng BatchLoad-Proxy và thay đổi chủ sở hữu của công việc từ Domain1 \ Admin2 sang tài khoản Domain1 \ NewUser.

Khi công việc được chạy, chúng tôi gặp lỗi này (một số mặt nạ trên nhật ký đã được thực hiện):

Được thực thi với tư cách là người dùng: Domain1 \ NewUser. Microsoft (R) SQL Server Thực thi gói tiện ích Phiên bản 11.0.6020.0 cho Bản quyền 32 bit (C) Microsoft Corporation. Đã đăng ký Bản quyền. Bắt đầu: 12:46:17 PM

Lỗi: 2016-06-24 12: 46: 28.56 Mã: 0xC0202009 Nguồn: xxxxxxx_xxxx Trình quản lý kết nối "yyyyyyyyyyy" Mô tả: Mã lỗi SSIS DTS_E_OLEDBERROR. Đã xảy ra lỗi OLE DB. Mã lỗi: 0x80004005. Một bản ghi OLE DB có sẵn. Nguồn: "Công cụ cơ sở dữ liệu truy cập Microsoft Office" Hresult: 0x80004005 Mô tả: "Bảng bên ngoài không ở định dạng mong đợi.". Lỗi kết thúc

Một lần nữa, gói hoạt động tốt khi SYSADMIN chạy tương tác trong BIDS để chúng tôi biết tệp có định dạng chính xác và gói được thiết kế ổn.

Tôi không có quyền chia sẻ mạng. Khi tôi cố gắng kết nối thủ công, tôi gặp một lỗi tương tự:

Windows cannot access
\\<path to the network share>
Error code: 0x80004005
Unspecified error

Kết nối với chia sẻ mạng bằng tài khoản và mật khẩu Domain1 \ NewUser, tôi có thể xem thư mục ok vì vậy tôi đã xác minh tài khoản người dùng phù hợp có quyền truy cập.


3
Câu hỏi đầu tiên tuyệt vời. Lỗi External table is not in the expected formatkhông có mùi giống như vấn đề quyền mà tôi mong đợi được đưa ra tiêu đề. Bạn nói rằng nó chạy tốt từ BIDS, nhưng đó là cho bạn ở chế độ tương tác. Với chiều rộng của miền vấn đề tiềm ẩn, tôi sẽ bắt đầu bằng cách sử dụng RunAs để chạy gói SSIS trên máy của bạn (hoặc máy chủ, bất cứ điều gì) để xác định đây là sự cố SQL / Proxy hoặc sự cố người dùng. Lệnh khoảng"C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx
billinkc

@billinkc, tôi cũng đã đề cập rằng gói tương tự này chạy tốt khi được thực thi trong công việc Tác nhân SQL trong một bước công việc là "Tài khoản dịch vụ đại lý SQL Server". Nói cách khác, tất cả mọi thứ đều giữ nguyên, chỉ khi tôi thay đổi bước công việc để chạy như proxy mới và thay đổi chủ sở hữu công việc thành Domain1 \ NewUser thì công việc mới thất bại. Nếu tôi chỉ thay đổi bước công việc thì thất bại nhưng với ít thông tin hơn. Chúng tôi đã loại trừ những điều hiển nhiên như XLS ở định dạng xấu, sử dụng tệp, quyền cho tài khoản NewUser, v.v. Dường như với tôi, phần duy nhất là proxy SSIS và thông tin đăng nhập ...
GregDBA

Bạn có đang đặt chủ sở hữu công việc để nhóm có thông tin xác thực proxy có thể quản lý công việc đại lý không? Thay đổi lịch trình và những gì không.
Jason Cumberland

Có, tôi đã thêm nhóm mà chủ sở hữu công việc là thành viên của MSDB.SQLAgentUserRole. Bởi vì tài khoản Domain1 \ NewUser này thực sự là một tài khoản thực thi hàng loạt, không có vấn đề gì về việc nó cần phải sửa đổi công việc của chính nó. Tôi đã làm điều này anyway. Vì đây là sự cố với hồ sơ người dùng cục bộ cho Excel, nên không có quyền SQL nào thực sự là một vấn đề. Tôi đã đăng vào ngày 23/8 rằng sau khi nhận ra điều này, công việc đã hoạt động tốt. Cảm ơn Jason.
GregDBA

Câu trả lời:


2

Tôi đánh giá cao phản hồi về điều này, và tôi hy vọng điều này sẽ giúp mọi người trong tương lai. Cuối cùng tôi đã thu hẹp nguyên nhân gốc rễ thực sự của vấn đề. Tôi đã không cung cấp đủ chi tiết xung quanh thực tế là một tệp Excel đang được sử dụng. Sau khi vô hiệu hóa mọi thứ trong gói, Nếu tôi chỉ kích hoạt tác vụ Luồng dữ liệu bằng nguồn Excel, tôi sẽ gặp lỗi, nhưng chỉ khi sử dụng proxy SSIS (đã khởi chạy công việc bằng tài khoản Domain1 \ NewUser) . Nếu tôi đặt bước công việc để sử dụng tài khoản SQL Server Agent, mọi thứ sẽ hoạt động tốt.

Sau một thời gian tránh xa sự cố, tôi đã thử đăng nhập vào máy chủ với thông tin đăng nhập NewUser1 và chạy Excel lần đầu tiên. Nó nhắc tôi viết tắt và sau đó tôi đóng chương trình. Tôi cũng đã thêm tài khoản vào nhóm Quản trị viên cục bộ của máy chủ để tôi có thể RDP.

Sau đó, tôi đã điều hành công việc bằng proxy SSIS và mọi thứ đều hoạt động tốt. Khi tôi xóa tài khoản khỏi nhóm Quản trị viên cục bộ, nó sẽ thất bại một lần nữa, nhưng tôi xác định đó là chính sách cục bộ "đăng nhập như một công việc hàng loạt" đã được cấp trong tư cách thành viên đó.

Đây là những gì tôi đã học được từ kinh nghiệm này:

  1. Thông tin SQL chỉ có thể mạo danh tài khoản người dùng, KHÔNG phải là một nhóm. SSIS proxy là một giải pháp hợp lệ để cấp các đặc quyền cần thiết cho một công việc hàng loạt. Excel (và có thể các ứng dụng khác) có thể cần được khởi chạy một lần bằng các thông tin đăng nhập có liên quan, chỉ để hoàn tất cài đặt ứng dụng trong hồ sơ người dùng trên máy chủ. Đăng nhập như một công việc hàng loạt là cần thiết cho một proxy chạy DTExec để khởi chạy một gói từ hệ thống tệp. Nguồn Excel có vấn đề và trình điều khiển OLE DB có thể báo cáo vấn đề này khi đó không phải là vấn đề về bố cục / định dạng:

Hresult: 0x80004005 Mô tả: "Bảng bên ngoài không ở định dạng mong đợi."


0

Bạn đã thử cấp quyền cho Domain1 \ NewUser cho MSDB (db_owner để kiểm tra) chưa?

Ở đây bạn có một bài viết tuyệt vời về người dùng Proxy SSIS: https://www.mssqltips.com/sqlservertip/2163/rasty-a-ssis-package-from-sql-server-agent-USE-a-proxy-account/

Đặc biệt là đoạn trích:

EXEC msdb.dbo.sp_update_proxy 
@proxy_name = N'proxy_name', 
@enabled = 1 

Cám ơn vì sự gợi ý. Có, tôi đã đọc bài này và một số bài viết khác khi tôi thực hiện cài đặt proxy SSIS.
GregDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.