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.
External table is not in the expected format
khô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