Tại sao suser_name () không phản ánh thay đổi tên tài khoản AD?


10

Một trong những tên người dùng của chúng tôi đã được thay đổi hợp pháp, vì vậy chúng tôi đã thay đổi tên người dùng Active Directory của họ để khớp - từ domain \ oldname thành domain \ newname. Tuy nhiên, khi người dùng này gọi suser_sname () trong một thủ tục được lưu trữ, nó sẽ trả về tên cũ chứ không phải tên mới.

Googling đã dẫn tôi đến KB 946353 , điều đó cho thấy rằng tên của họ đang được lưu trữ trên máy chủ và không được cập nhật, có lẽ vì suser_name () đang gọi LsaLookupSids. Tuy nhiên, cách giải quyết trong bài viết đó liên quan đến việc khởi động lại máy chủ và ngay cả khi tôi vẫn muốn hiểu vấn đề.

Nếu tôi thay đổi ngữ cảnh của mình thành tên của họ, tên chính xác sẽ quay trở lại:

EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name()   --returns 'domain\newname'

... Tôi đã giả định rằng điều này cũng sẽ gọi LsaLookupSids, và do đó sẽ trả lại tên không chính xác. Có vẻ như tôi không thực sự hiểu các cơ chế làm việc ở đây.

Một số quan sát có thể quan trọng:

  • Người dùng này không có thông tin đăng nhập rõ ràng trên máy chủ. Nhưng họ là thành viên của một nhóm AD. Tên đã thay đổi (tên miền \ newname) xuất hiện trong tập kết quả cho exec xp_logininfo 'domain\ADGroupName', 'members'; tên miền \ oldname thì không.

  • Người dùng đang gọi suser_name () từ trong một thủ tục được lưu trữ, được gọi từ truy vấn thông qua trong MDB Access 2003.

  • Chúng tôi đã thay đổi rất nhiều tên tài khoản của người dùng trong quá khứ, nhưng chỉ quan sát thấy vấn đề này trong tuần trước (hai thay đổi đã được thực hiện trong tuần trước, cả hai dường như thể hiện vấn đề này).

  • Máy chủ đang chạy Sql Server 2008 SP3 x64 trên phiên bản Windows 2008 R2 Datacenter.

Chuyện gì đang xảy ra vậy? Là DBA, tôi có thể làm gì hoặc tôi có thể tìm cách giải quyết vấn đề này ở đâu?


Dịch vụ MSSQLSERVER (hoặc bất kể tên thể hiện là gì) đang đăng nhập như Hệ thống cục bộ hoặc Đăng nhập thực sự? Giá trị có thể được lưu trong bộ nhớ cache của tài khoản đang chạy tra cứu. Trong trường hợp của bạn, bạn đã đăng nhập và thực hiện yêu cầu. Tôi nghĩ rằng có thể nếu bạn đang sử dụng tài khoản thông thường để chạy SQL Server (như thường lệ) thì có thể đăng nhập vào SQL Server dưới dạng đăng nhập "SQL Server", sau đó chạy EXECUTE ASSELECT SUSER_NAME()kiểm tra. Ngoài ra, bạn đã thử SUSER_SNAME()và bất kỳ trong số 100 biến thể khác?
Solomon Rutzky

Hãy thử tạo một đăng nhập trên ví dụ bằng cách sử dụng tên mới. Điều này sẽ không có bất kỳ ảnh hưởng đến quyền của họ. Chạy SUSER_SNAME(), nó nên được cố định tại điểm đó. Sau đó, bạn có thể thử bỏ đăng nhập và xem nếu nó giữ tên mới.
Kenneth Fisher

@srutzky Đây là một phiên bản MSSQLSERVER mặc định chạy trong tài khoản miền. Thật không may, tôi không có mật khẩu để đăng nhập. Tôi chưa thử suser_sname () với tư cách là người dùng, tôi tin rằng nó giống với suser_name () nếu không có đối số. Mặc dù vậy cũng đáng để thử - cảm ơn!
Chiến binh Bob

1
SQL Server phù hợp với tất cả các tài khoản theo SID - cho dù SQL hay miền. Vì SID tên miền đến từ thư mục hoạt động, việc thay đổi tên sẽ không thay đổi SID. Nếu nó được lưu trữ, tên cũ sẽ được trả lại. Nếu đăng nhập đã tồn tại, tên của thông tin đăng nhập sẽ được trả về cho dù đó có phải là cùng tên hay không, miễn là SIDs khớp. Điều này là giống nhau cho người dùng cơ sở dữ liệu.
Sean Gallardy

1
Bạn có thể thử chạy ipconfig /flushdnsipconfig /registerdnstừ một dòng lệnh để xem nếu điều đó làm rõ vấn đề.
RLF

Câu trả lời:


2

Điều này có thể liên quan đến bộ nhớ đệm với Kerberos? (chỉ là một phỏng đoán mặc dù có thể không liên quan) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx


1
Tôi không thể nói chắc chắn đây là vấn đề, nhưng tôi tin điều này hoặc một cái gì đó tương tự. Khởi động lại máy chủ (xảy ra vì lý do riêng biệt) dường như đã xóa nó, ít nhất là trong trường hợp này. Không rõ liệu nó sẽ xuất hiện trở lại.
Chiến binh Bob

Đó là một gợi ý tốt, tôi nên nghĩ về điều đó! :-) Đó là những gì chúng tôi đã làm trước đây để giải quyết vấn đề kerberos được lưu trong bộ nhớ cache. Vui mừng bạn đã thành công!
Normoe
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.