Các mục SPN của tôi sẽ trông như thế nào đối với mỗi phiên bản SQL?


8

Tôi đang tìm thông tin mâu thuẫn về cách định dạng chính xác SPN (Tên nguyên tắc dịch vụ) để có các kết nối Kerberos phù hợp và số lượng tôi cần cho mỗi phiên bản SQL.

Tài liệu MS 2017 này có chứa:

Bắt đầu với SQL Server 2008, định dạng SPN được thay đổi để hỗ trợ xác thực Kerberos trên TCP / IP, các đường dẫn có tên và bộ nhớ dùng chung. Các định dạng SPN được hỗ trợ cho các trường hợp được đặt tên và mặc định như sau.

  • Ví dụ được đặt tên: MSSQLSvc/FQDN:[port|instancename]
  • Ví dụ mặc định: MSSQLSvc/FQDN:port|MSSQLSvc/FQDN

Định dạng SPN mới không yêu cầu số cổng . Điều này có nghĩa là máy chủ nhiều cổng hoặc giao thức không sử dụng số cổng có thể sử dụng xác thực Kerberos.

Tôi lấy đoạn cuối này để nói rằng tôi chỉ cần một mục duy nhất, một trong những điều sau đây:

  • Ví dụ được đặt tên: MSSQLSvc/sqlbox1.mydomain.org/instance2
  • Ví dụ mặc định: MSSQLSvc/sqlbox1.mydomain.org

Điều đó dường như mâu thuẫn với tài liệu MS cũ hơn (2011) này , không chỉ về số cổng, mà còn liên quan đến việc sử dụng tên nào:

Để tạo SPN, bạn có thể sử dụng tên NetBIOS hoặc Tên miền đủ điều kiện (FQDN) của Máy chủ SQL. Tuy nhiên, bạn phải tạo SPN cho cả tên NetBIOS và FQDN .

Khi tôi nhìn vào các SPN đã tồn tại trong môi trường của tôi, tôi thấy rất nhiều kết hợp, một số máy chủ có tới 4 mục:

  • MSSQLSvc/sqlbox1
  • MSSQLSvc/sqlbox1:1433
  • MSSQLSvc/sqlbox1.mydomain.org
  • MSSQLSvc/sqlbox1.mydomain.org:1433

Ngay cả trình quản lý cấu hình Kerberos của MS dường như cũng muốn tạo hai phiên bản cuối cùng (với cách mã hóa phù hợp):

nhập mô tả hình ảnh ở đây

Tương tự như vậy đối với các trường hợp được đặt tên hiện có, tôi thấy một kết hợp kỳ lạ, một số trong đó gần như chắc chắn không hợp lệ:

  • MSSQLSvc/sqlbox1:1522
  • MSSQLSvc/sqlbox1:instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522
  • MSSQLSvc/sqlbox1.mydomain.org:instance2
  • MSSQLSvc/sqlbox1.mydomain.org/instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522:instance2

Vì vậy, DSN của tôi thực sự trông như thế nào, cho cả hai trường hợp mặc định và được đặt tên, nếu tôi chỉ sử dụng TCP trong môi trường của mình?

Tôi có nên bao gồm cổng, hay không? Hoặc bao gồm một với cổng và một không có?

Chỉ sử dụng FQDN hoặc tôi cần các mục chỉ có tên Netbios? Hay đó chỉ là nếu chúng ta đang sử dụng các đường ống có tên (mà chúng ta không phải)?

(Đối với ngữ cảnh, chúng tôi chạy SQL 2005 đến 2014, một số cụm, một số khác độc lập. Kết nối chỉ thông qua TCP, các ống có tên bị vô hiệu hóa trong trình quản lý cấu hình. Chúng tôi sẽ sửa / tạo chúng theo cách thủ công thay vì cho phép tài khoản dịch vụ SQL tạo chúng theo máy chủ bắt đầu.)


1
Bất kỳ lý do cụ thể nào mà bạn muốn tự mình quản lý SPN thay vì để SQL (và tài khoản dịch vụ của nó) làm điều đó cho bạn?
Nic

1
nếu SPN đi, nếu nó hoạt động, vấn đề định dạng là gì? Tôi thứ hai bình luận @Nic
Bob Klimes 18/07/17

@Nic Bởi vì điều đó sẽ yêu cầu cấp vài chục tài khoản dịch vụ quyền Active Directory mới, quản trị viên Active Directory của chúng tôi cho biết việc thêm thủ công một lần sẽ dễ quản lý hơn. Cũng tìm thấy một số liên kết nói rằng những điều buồn cười có thể xảy ra khi SPN cố gắng đồng bộ hóa trên nhiều bộ điều khiển miền khi chúng được thêm / xóa động khi chuyển đổi dự phòng / dừng / cụm. Tất cả những gì đã nói, hãy để tôi hỏi này: khi bạn làm phép tài khoản dịch vụ để thêm SPN khi khởi động, những gì nó trông như thế nào? Một mục duy nhất với FQDN và cổng? Hoặc không có cổng? Hoặc hai mục?
BradC

@BobKlimes Vâng, một số trong số họ không hoạt động, đó là vấn đề. Tôi đoán không có hại gì khi có nhiều mục hơn mức cần thiết, nhưng chỉ cố gắng hiểu những mục nào thực sự làm công việc.
BradC

1
@BradC Tôi chắc chắn đã có vấn đề với chuyển đổi dự phòng cụm và nhiều DC. Đó là những SPN duy nhất của tôi được tạo thủ công.
Bob Klimes

Câu trả lời:


5

Nếu bạn chỉ sử dụng TCP / IP để kết nối với các phiên bản của mình, bạn chỉ cần các cổng được chỉ định. Tên trường hợp được sử dụng khi kết nối với Trường hợp SQL thông qua các giao thức được đặt tên. Đáng buồn thay, bài viết MS không đưa ra định dạng nào là cần thiết cho giao thức nào, nhưng nó có nguồn gốc từ (nhiều thử nghiệm trong môi trường của tôi) và tình trạng bài viết MS sau đây :

Đối với các đường ống được đặt tên và các kết nối bộ nhớ dùng chung, SPN ở định dạng MSSQLSvc / FQDN: instancename được sử dụng cho một thể hiện được đặt tên và MSSQLSvc / FQDN được sử dụng cho phiên bản mặc định.

Về tên FQDN so với tên NETBIOS, tôi sẽ đề xuất FQDN vì chúng không dễ gặp sự cố nếu bạn gặp phải sự cố máy chủ DNS ngẫu nhiên.

Được nâng lên từ bài viết trên blog của tôi về vấn đề này, các định dạng sẽ như sau:

nhập mô tả hình ảnh ở đây

Tài liệu tham khảo từ MS có thể được tìm thấy ở đây .

Bây giờ để tạo Ngày quản trị mạng của bạn (ví dụ: cấu hình OU cho phép Tự đăng ký SPN)

Quản trị mạng của bạn có thể tạo OU trên miền chứa tất cả các tài khoản Dịch vụ máy chủ SQL của bạn có thể được định cấu hình theo cách mà Tài khoản dịch vụ có thể tự tạo SPN cho chính nó. Phương pháp này chủ yếu theo dõi blog của Ryan Reis , nhưng có một số điều chỉnh nhỏ để các khoản trợ cấp quá mức không được thực hiện.

Quá trình này mô tả việc tạo OU trên miền cho phép các tài khoản trong đó tự đăng ký SPN của riêng mình:

  1. Là một tài khoản có quyền nâng cao trên miền, hãy mở Chỉnh sửa ADSI (adsiedit từ dấu nhắc lệnh)
  2. Nhấp chuột phải vào Chỉnh sửa ADSI -> Kết nối với ...
  3. Kết nối với bối cảnh đặt tên mặc định
  4. Điều hướng đến / Tạo bộ chứa OU giữ các tài khoản dịch vụ bạn muốn cấp quyền SPN cho
  5. Nhấp chuột phải vào OU -> Thuộc tính
  6. Nhấp vào tab Bảo mật
  7. Nhấp vào nút Nâng cao
  8. Đánh dấu TỰ CHỌN và nhấp vào Chỉnh sửa ... hoặc nếu người dùng đặc biệt TỰ TIN không hiển thị trong danh sách Tên nhóm hoặc Tên người dùng, nhấp vào Thêm ... và nhập TỰF cho tên đối tượng
  9. Nhấp vào tab Thuộc tính
  10. Chọn Đối tượng người dùng Hậu duệ từ danh sách thả xuống bên cạnh Áp dụng cho: Lưu ý: Đây là điều chỉnh nhỏ cho các bước được nêu trong bài đăng trên blog của Ryan vì lý do được nêu rõ hơn bởi bài đăng trên ServerFault / StackExchange này.
  11. Chọn hộp Cho phép bên cạnh các mục sau:
    • Đọc dịch vụPrincipalName
    • Viết dịch vụPrincipalName
  12. Nhấp vào Ok (trên cửa sổ quyền truy cập)
  13. Nhấp vào Ok (trên cửa sổ Cài đặt bảo mật nâng cao)
  14. Bấm Ok (trên cửa sổ thuộc tính OU)
  15. Thêm tài khoản dịch vụ chạy dịch vụ SQL Server vào OU
  16. (Tùy chọn) Khởi động lại Dịch vụ máy chủ SQL đang chạy trong (các) tài khoản đã nói
  17. Thưởng thức các món ăn

Sau khi làm theo các bước trên, bộ chứa OU đang được đề cập hiện được định cấu hình sao cho bất kỳ tài khoản nào được thêm vào nó sẽ có thể đăng ký và xóa SPN cho chính nó. Đây chính xác là số lượng quyền phù hợp vì các tài khoản này sẽ không thể chà đạp lên SPN được đăng ký bởi các tài khoản khác.

Mục đích của việc khởi động lại SQL Server trong bước 16 là để đảm bảo SPN được đăng ký như mong đợi. SQL sẽ cố gắng xóa mọi SPN đã đăng ký khi tắt máy và thêm chúng vào Khởi động, vì vậy việc khởi động lại chỉ thực sự cần thiết nếu không có SPN nào tồn tại cho dịch vụ SQL Server nói trên.

Lưu ý cuối cùng về cách tiếp cận này là nếu bạn đang chạy SQL Server trong cấu hình Dự phòng cụm chuyển đổi dự phòng (FCI) truyền thống, thì KHÔNG nên thêm tài khoản dịch vụ của cá thể này vào OU này, mỗi KB 2443457 .

Tôi thực sự cần phải đăng Phần 2 của loạt bài Kerberos của tôi ...


Đó không phải là Đối tượng Người dùng Hậu duệ , mà là Đối tượng Máy tính Hậu duệ .
Isaac Kleiman

1

Khi dịch vụ SQL Server tạo SPN, nó sẽ tạo hai cho mỗi phiên bản. Đây là định dạng mà nó sử dụng.

Sơ thẩm mặc định:

MSSQLSvc/servername.domain.com
MSSQLSvc/servername.domain.com:1433

Trường hợp được đặt tên:

MSSQLSvc/servername.domain.com:54321
MSSQLSvc/servername.domain.com:instancename

Đối với các trường hợp được đặt tên của bạn, nếu tạo SPN theo cách thủ công, bạn sẽ cần phải có một cổng tĩnh thay vì cổng động mặc định.

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.