Định cấu hình ủy quyền không giới hạn cho BULK INSERT


12

Tôi có một cặp nút Microsoft SQL Server 2016 trong Nhóm Luôn sẵn sàng. Tôi đang cố gắng thực hiện BULK INSERT(sử dụng truy vấn SQL Server 2016 Management Studio) trên một tệp nằm trong Cụm chuyển đổi dự phòng máy chủ Windows Server 2016, nhưng tôi gặp phải lỗi sau:

Msg 4861, Cấp 16, Trạng thái 1
Không thể tải hàng loạt vì không thể mở tệp "\ Nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt". Mã lỗi hệ điều hành 5 (Truy cập bị từ chối.).

Điều này sẽ xảy ra bất kể tôi sử dụng tên nút hoạt động ( nas2.my.domain) hay trình nghe cụm chuyển đổi dự phòng ( nas.my.domain).

Sau khi nhìn xung quanh tôi phát hiện ra điều này là do SQL Server không thể mạo danh tài khoản người dùng mà tôi được kết nối do các sắc thái với BULK INSERT.

Nếu bạn kết nối với Máy chủ SQL bằng Xác thực Windows, tài khoản dịch vụ SQL Server sẽ cố gắng mạo danh tài khoản người dùng của bạn khi kết nối với máy chủ tệp. Nếu bạn kết nối bằng xác thực Máy chủ SQL, nó sẽ kết nối với máy chủ tệp dưới dạng tài khoản dịch vụ SQL Server.

Nếu ủy quyền và mạo danh không được cấu hình đúng (trạng thái mặc định), dịch vụ SQL Server sẽ không thể mạo danh tài khoản người dùng của bạn và sẽ quay lại cố gắng kết nối với máy chủ tệp dưới dạng người dùng ẩn danh.

Điều này có thể được xác nhận bằng cách xem qua nhật ký sự kiện bảo mật trên máy chủ tệp. Những sự thật này cùng với hướng dẫn về cách định cấu hình ủy quyền không bị ràng buộc và bị ràng buộc được ghi lại trong các liên kết sau:

Tôi đã thử làm theo các hướng dẫn trong hướng dẫn của thesqldude nhưng nó vẫn không hoạt động.

Cơ sở dữ liệu mà tôi đang cố gắng BULK INSERTkhông phải là một phần của nhóm khả dụng nên chỉ có nút MSSQL1 mới phù hợp. Máy chủ tệp đã hoạt động trên nút NAS2. Kiểm tra nhật ký sự kiện trên máy chủ tệp cho thấy nó vẫn đang gặp phải vấn đề này và SQL Server đang cố xác thực máy chủ tệp với tư cách là người dùng ẩn danh thay vì mạo danh tài khoản người dùng của tôi.

Có ai biết những gì đang xảy ra sai? Hoặc nếu có gì đó thay đổi trong SQL Server 2016 để làm cho các hướng dẫn này trở nên lỗi thời?

Tôi có thể xác nhận rằng GPO này đã được áp dụng cho MSSQL1 thông qua gpresult.exe /Rvà cả hai nút SQL và File Server đã được khởi động lại sau đó để đảm bảo mọi bộ đệm đã được xóa.


1
Hai câu hỏi: 1) Bạn đã thử bật tài khoản Miền Windows cá nhân của mình cho Đoàn chưa?, 2) Khi bạn kết nối với SQL Server qua SSMS, bạn có đăng nhập vào máy chủ (ví dụ Remote Desktop) mà SQL Server đang chạy và kết nối cục bộ không, hoặc đăng nhập vào máy trạm của bạn và kết nối với SQL Server từ xa? Nếu bạn chưa thử đăng nhập trực tiếp vào máy chủ và kết nối cục bộ qua SSMS, hãy thử điều đó. Nếu bạn chưa thử kích hoạt tài khoản miền của mình để ủy quyền, hãy thử điều đó.
Solomon Rutzky

Câu trả lời:


1

Cấu hình của bạn trông chắc chắn. SPN và Đoàn được cấu hình như tôi sẽ tự làm.

Điều duy nhất bạn chưa giải thích là quyền / chia sẻ tệp. Đây là nơi giải pháp của tôi bước vào.

Giải pháp 1 (Tài khoản cá nhân)

  1. Xác minh rằng tài khoản cá nhân của bạn được phép truy cập tệp trên chia sẻ của máy chủ tệp
    • tài khoản cá nhân của bạn cần ít nhất các quyền ĐỌC ở cấp độ chia sẻ hoặc trong hầu hết các trường hợp bạn có thể thấy MỌI NGƯỜI có quyền ĐỌC.
    • tài khoản cá nhân của bạn cần ít nhất các quyền ĐỌC ở cấp độ cho phép của tệp
    • Kiểm tra quyền thừa kế ở cấp tệp cho một tệp đó
      • Khởi động lại máy chủ SQL sau khi thay đổi quyền truy cập tệp hoặc chu trình dịch vụ SQL Server.
    • Ngoài ra: Đăng nhập vào SQL Server bằng tài khoản cá nhân của bạn và kết nối với chia sẻ và mở tệp.
  2. Mở SSMS bằng tài khoản cá nhân của bạn .
  3. Mở một kết nối đến phiên bản SQL Server của bạn bằng Windows xác thực.
    • Xác minh bạn được kết nối với phiên bản của bạn với tài khoản dịch vụ SQL Server với tập lệnh bạn đã sử dụng trước đó.
  4. Thực hiện nhập với BULK INSERT

Giải pháp 2 (Tài khoản dịch vụ SQL Server)

  1. Xác minh rằng tài khoản dịch vụ SQL Server được phép truy cập tệp trên chia sẻ của máy chủ tệp
    • các dịch vụ SQL Server nhu cầu tài khoản tại quyền READ ít nhất ở cấp phép phần hoặc trong nhiều trường hợp bạn có thể thấy tất cả mọi người có quyền truy cập ĐỌC.
    • các SQL Server service nhu cầu tài khoản tại quyền READ ít nhất là ở mức cho phép của tập tin
    • Kiểm tra quyền thừa kế ở cấp tệp cho một tệp đó
      • Khởi động lại máy chủ SQL sau khi thay đổi quyền truy cập tệp hoặc chu trình dịch vụ SQL Server.
    • Ngoài ra: Đăng nhập vào Máy chủ SQL bằng Tài khoản dịch vụ máy chủ SQL và kết nối với chia sẻ và mở tệp.
  2. Mở SSMS bằng tài khoản dịch vụ SQL Server .
    • Runas: your_domain \ SQL_Server_service_account
    • Cung cấp mật khẩu
  3. Mở một kết nối đến SQL Server của bạn bằng Windows xác thực.
    • Xác minh bạn được kết nối với phiên bản của bạn với tài khoản dịch vụ SQL Server với tập lệnh bạn đã sử dụng trước đó.
  4. Thực hiện nhập với BULK INSERT

Quyền BULK INSERT

Đoàn tài khoản bảo mật (Mạo danh)

Nếu người dùng sử dụng thông tin đăng nhập SQL Server, hồ sơ bảo mật của tài khoản quy trình SQL Server sẽ được sử dụng. Đăng nhập bằng xác thực Máy chủ SQL không thể được xác thực bên ngoài Cơ sở dữ liệu. Do đó, khi lệnh BULK INSERT được khởi tạo bằng đăng nhập bằng xác thực Máy chủ SQL, kết nối với dữ liệu được thực hiện bằng ngữ cảnh bảo mật của tài khoản quy trình SQL Server ( tài khoản được sử dụng bởi dịch vụ Công cụ cơ sở dữ liệu SQL Server ). Để đọc thành công dữ liệu nguồn, bạn phải cấp tài khoản được sử dụng bởi Công cụ cơ sở dữ liệu SQL Server, truy cập vào dữ liệu nguồn. Ngược lại, nếu người dùng SQL Server đăng nhập bằng cách sử dụng Xác thực Windows, người dùng chỉ có thể đọc các tệp có thể được truy cập bởi tài khoản người dùng, bất kể hồ sơ bảo mật của quy trình SQL Server.

Tham khảo: BULK INSERT (Transact-SQL)


0

Theo kinh nghiệm của tôi với ủy quyền, Tài khoản dịch vụ máy chủ SQL cần có quyền thích hợp để chia sẻ mà nó đang cố gắng truy cập thay mặt bạn. Bạn đã điều chỉnh các quyền đó? Tôi nghĩ rằng chỉ đọc sẽ đủ trả trước.

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.