Bug Cannot generate SSPI context on SSMS when connect SQL Server

vohongnhuy

Moderator
Hướng dẫn khắc phục lỗi “The target principal name is incorrect. Cannot generate SSPI context” trong SSMS khi đến nối đến SQL Server.

Tài liệu của Microsoft về lỗi này: https://support.microsoft.com/en-us...he-cannot-generate-sspi-context-error-message

Tóm tắt:

Để kết nối SQL Server, cần có các Service Principal Name (SPN) để hỗ trợ quá trình xác thực.

Tham khảo: https://docs.microsoft.com/en-us/sq...rt-in-client-connections?view=sql-server-2017.


Nếu bạn chạy service SQL Server với LocalSystem account, SPN sẽ tự động được đăng ký và xác thực Kerberos thành công với máy tính đang chạy SQL Server. Tuy nhiên, nếu bạn chạy service SQL Server với Domain account hoặc Local account, thì hầu hết các trường hợp tạo SPN sẽ thất bại vì Domain account và Local account không có quyền đặt SPN của riêng họ. Khi việc tạo SPN không thành công, điều này có nghĩa là không có SPN nào được thiết lập cho máy tính đang chạy SQL Server. Còn với Domain admin account thì bạn có quyền tạo SPN.


Bạn không nên sử dụng domain admin account để chạy dịch vụ SQL Server (để tránh rủi ro bảo mật), khi đó máy tính đang chạy SQL Server không thể tạo SPN của riêng nó. Do đó, bạn phải tự tạo SPN cho máy tính đang chạy SQL Server để bạn có thể xác thực Kerberos khi bạn kết nối với máy tính đang chạy SQL Server. SPN bạn tạo phải được gán cho account service của service SQL Server trên máy tính cụ thể nào đó.


Nguyên nhân:
Có nhiều nguyên nhân gây ra lỗi trên:

  • Password account change/Password Expired: Khi bạn đổi mật khẩu của Domain account hoặc Local account, dẫn đến quá trình truy cập các SPN và xác thực Kerberos bị lỗi.

  • Thiếu Permission để account tạo SPN.

  • SPN không được khởi tạo.

  • Lỗi tạo sai các SPN trong SQL Server.
Giải pháp:
1. Bạn có thể thay đổi permission của Domain account để nó có thể tạo SPN
  • Sử dụng ADSI Edit snap-in trong Active Directory để gán quyền cho Domain account.
    • Read servicePrincipalName

    • Write servicePrincipalName
2. Tự tạo SPN với SETSPN.EXE trong CMD
  • Cần quyền Domain admin để tạo các SPN này, cho nên bạn có thể sử dụng Domain admin account để chạy các lệnh sau trong CMD:
    • Setspn -S MSSQLSvc/<FQDN>:<Port> Domain\Account

    • Setspn -S MSSQLSvc/<FQDN> Domain\Acount
3. Sử dụng tool do Microsoft cung cấp
  • Tool Microsoft® Kerberos Configuration Manager for SQL Server® tại https://www.microsoft.com/en-us/download/details.aspx?id=39046

  • Cài đặt trên máy tính gặp lỗi (lưu ý bạn cần đăng nhập với quyền Domain admin hoặc Local Admin, vui lòng tham khảo ý kiến Domain Administrator), cài đặt tool.

  • Khởi chạy tool ở C:\Program Files\Microsoft\Kerberos Configuration Manager for SQL Server\KerberosConfigMgr.exe

  • Chọn Connect -> Connect (không điền thông tin) để kết nối SQL Server localhost
 SQL (1)


  • Tại đây sẽ liệt kê các SPN có sẵn hoặc bị lỗi. Bạn chỉ cần chọn Fix All.

  • Hoàn tất.
 
Back
Top