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?
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.
ipconfig /flushdns
và ipconfig /registerdns
từ một dòng lệnh để xem nếu điều đó làm rõ vấn đề.
EXECUTE AS
vàSELECT 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?