Salah satu nama pengguna kami diubah secara hukum, jadi kami mengubah nama pengguna Direktori Aktif mereka untuk mencocokkan - dari domain \ oldname ke domain \ newname. Namun, ketika suser_sname () dipanggil oleh pengguna ini dalam prosedur tersimpan, ia mengembalikan nama lama, bukan yang baru.
Googling menuntun saya ke KB 946358 yang menunjukkan bahwa nama mereka sedang di-cache di server dan tidak diperbarui, mungkin karena suser_name () memanggil LsaLookupSids. Namun, solusi dalam artikel itu melibatkan me-restart server, dan bahkan jika itu saya masih ingin memahami masalahnya.
Jika saya mengubah konteks saya menjadi milik mereka, nama yang benar muncul kembali:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Saya akan berasumsi bahwa ini juga akan memanggil LsaLookupSids, dan akan mengembalikan nama yang salah. Sepertinya saya tidak terlalu mengerti mekanisme yang sedang bekerja di sini.
Beberapa pengamatan yang mungkin penting:
Pengguna ini tidak memiliki login eksplisit di server. Tetapi mereka adalah anggota grup AD yang melakukannya. Nama yang diubah (domain \ newname) muncul di hasil yang ditetapkan untuk
exec xp_logininfo 'domain\ADGroupName', 'members'
; domain \ oldname tidak.Pengguna memanggil suser_name () dari dalam prosedur tersimpan, dipanggil dari kueri passthrough di Access 2003 MDB.
Kami telah mengubah banyak nama akun pengguna di masa lalu, tetapi hanya mengamati masalah ini pada minggu lalu (dua perubahan dilakukan pada minggu lalu, keduanya tampaknya menunjukkan masalah).
Server menjalankan Sql Server 2008 SP3 x64 pada Windows 2008 R2 Datacenter edition.
Apa yang sedang terjadi? Sebagai DBA, apa yang dapat saya lakukan atau di mana saya harus mencari cara untuk menyelesaikan ini?
SUSER_SNAME()
, itu harus diperbaiki pada saat itu. Anda kemudian dapat mencoba menjatuhkan login dan melihat apakah itu membuat nama baru.
ipconfig /flushdns
dan ipconfig /registerdns
dari baris perintah untuk melihat apakah itu menyelesaikan masalah.
EXECUTE AS
danSELECT SUSER_NAME()
uji. Juga, sudahkah Anda mencobaSUSER_SNAME()
dan 100 variasi lainnya?