Đăng nhập người dùng và quyền truy cập vào cơ sở dữ liệu có thể không chính xác sau khi cơ sở dữ liệu được khôi phục


Triệu chứng


Nếu một biến cơ sở dữ liệu người dùng SQL Server được khôi phục SQL Server khác (chẳng hạn như máy chủ dự phòng nóng) hoặc cùng một máy chủ SQL sau khi xây dựng lại hoặc tải lại phiên bản cũ của cơ sở dữ liệu chính, người dùng đăng nhập và cấp phép trên cơ sở dữ liệu có thể không đúng.

Sự cố này có thể hiển thị chính nó trong một số cách:
  • Khi đăng nhập vào máy chủ 6.x, người dùng có thể nhận được lỗi sau:
    TB 4002, mức 14, trạng thái 1, máy chủ Microsoft SQL Server, dòng 0
    Đăng nhập thất bại
    DB-thư viện: Đăng nhập không đúng.
  • Khi đăng nhập vào máy chủ 7.0, người dùng có thể nhận được lỗi sau:
    Thông báo lỗi 18456, mức 14, trạng thái 1,
    Đăng nhập không thành công cho người dùng '%ls'.
  • Trong khi cố gắng truy cập vào các đối tượng trong cơ sở dữ liệu, người dùng có thể nhận được lỗi sau:
    TB 229, mức 14, trạng thái 1
    cho phép %s bị từ chối vào đối tượng % * s, cơ sở dữ liệu %. * s, chủ sở hữu %.*s
  • Trong khi cố gắng tạo ra một đăng nhập và cấp quyền truy cập cơ sở dữ liệu khôi phục hoặc thêm người dùng vào cơ sở dữ liệu, lỗi sau có thể nhận được:
    Microsoft SQL-DMO (ODBC SQLState: 42000) lỗi 15023: người dùng hoặc vai trò '%s' đã tồn tại trong cơ sở dữ liệu hiện tại.
  • Người dùng có quyền truy cập vào các đối tượng mà họ đã không.

Nguyên nhân


Thông tin đăng nhập người dùng được lưu trữ trong bảng syslogins trong cơ sở dữ liệu chính. Bằng cách thay đổi máy chủ hoặc bằng cách thay đổi thông tin này bằng cách xây dựng lại hoặc khôi phục Phiên bản cũ của cơ sở dữ liệu chính, thông tin có thể khác với khi kết xuất cơ sở dữ liệu người dùng được tạo ra. Nếu đăng nhập không tồn tại cho người dùng, họ sẽ nhận được một lỗi "Đăng nhập không thành công" khi cố gắng đăng nhập vào máy chủ. Nếu người dùng đăng nhập tồn tại, nhưng SUID giá trị (6.x) hoặc SID giá trị (7.0) trong quản lý. syslogins và sysusers bảng trong cơ sở dữ liệu người dùng khác, người dùng có quyền khác hơn mong đợi trong cơ sở dữ liệu người dùng.

Lưu ý Nếu bạn đang sử dụng Microsoft SQL Server 2005, bảng syslogins và bảng sysusers được thực hiện với chế độ xem tương thích. Những quan điểm là sys.sysloginssys.sysusers. Để biết thêm thông tin về chế độ xem tương thích, xem chủ đề "Chế độ xem tương thích (Transact-SQL)" trong SQL Server 2005 sách trực tuyến.

Giải pháp


Để khắc phục sự cố này, thực hiện bất kỳ sau đây:
  • Nếu hiện tại kịch bản thêm đăng nhập, người dùng và quyền thả và tái tạo lại từ tập lệnh. Ví dụ về cách sử dụng tập lệnh để chuyển thông tin đăng nhập từ máy chủ, hãy xem bài viết sau trong cơ sở kiến thức Microsoft:
    246133 cách: chuyển thông tin đăng nhập và mật khẩu giữa các phiên bản của SQL Server

    240872 làm thế nào để giải quyết vấn đề về quyền khi di chuyển cơ sở dữ liệu giữa các máy chủ SQL
  • Bạn có thể sử dụng quy trình sp_change_users_login lưu trữ để liên kết lại mối quan hệ giữa các bảng syslogins, sysusers và sysalternates. Tuy nhiên, quy trình thực hiện ước tính tốt nhất trên các liên kết, và có thể cho phép người dùng quyền truy cập nhiều hơn dự định. Chạy trình với báo cáo đầu tiên sẽ tạo ra một danh sách người dùng sẽ được thay đổi. Sau đó, bạn nên kiểm tra để đảm bảo rằng người dùng bị ảnh hưởng có quyền thích hợp. Ngoài ra, xin lưu ý rằng quy trình sp_change_users_login khắc phục vấn đề quyền từ đăng nhập và tạo theo trình tự khác nhau trên cơ sở dữ liệu người dùng khi khôi phục sao lưu.
  • Khôi phục kết xuất cơ sở dữ liệu chính từ khi kết xuất cơ sở dữ liệu người dùng máy chủ trước khi tải cơ sở dữ liệu người dùng. Thực hiện điều này đảm bảo rằng tất cả thông tin người dùng trong cơ sở dữ liệu người dùng bình thường phù hợp với bảng syslogins quản lý.


    Cảnh báo: cơ sở dữ liệu chính chứa thông tin máy chủ toàn và ảnh hưởng đến tất cả cơ sở dữ liệu trên máy chủ. Bằng cách khôi phục cơ sở dữ liệu chính, bạn có thể gặp ID người dùng và/hoặc cơ sở dữ liệu bị mất hoặc có quyền không đúng. Bất kỳ thay đổi đối với máy chủ đã xảy ra kể từ khi sao lưu sẽ bị mất. Chỉ sử dụng phương pháp này nếu bạn chắc chắn rằng bản sao lưu cơ sở dữ liệu chính chứa thông tin chính xác cho cơ sở dữ liệu người dùng trong câu hỏi và tất cả các cơ sở dữ liệu trên máy chủ.
  • Sử dụng chuyển quản lý (cho 6.x) hoặc DTS (cho 7.0) để sao chép thông tin đăng nhập. Xin lưu ý rằng mật khẩu sẽ không được chuyển bằng cách sử dụng phương pháp này.
  • Liên hệ với nhà cung cấp hỗ trợ chính.