Mengapa suser_name () tidak mencerminkan perubahan nama akun AD?

10

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?

Prajurit Bob
sumber
Apakah layanan MSSQLSERVER (atau apa pun nama instansinya) masuk sebagai Sistem Lokal atau Login asli? Nilai tersebut mungkin di-cache dalam registri akun yang menjalankan pencarian. Dalam kasus Anda, Anda masuk dan membuat permintaan. Saya berpikir bahwa mungkin jika Anda menggunakan akun reguler untuk menjalankan SQL Server (seperti yang seharusnya) maka mungkin masuk ke SQL Server sebagai login "SQL Server", kemudian jalankan EXECUTE ASdan SELECT SUSER_NAME()uji. Juga, sudahkah Anda mencoba SUSER_SNAME()dan 100 variasi lainnya?
Solomon Rutzky
Coba buat login dengan menggunakan nama baru. Ini tidak akan memengaruhi izin mereka. Jalankan SUSER_SNAME(), itu harus diperbaiki pada saat itu. Anda kemudian dapat mencoba menjatuhkan login dan melihat apakah itu membuat nama baru.
Kenneth Fisher
@srutzky Ini adalah instance MSSQLSERVER default yang berjalan di bawah akun domain. Sayangnya saya tidak punya kata sandi untuk login dengannya. Saya belum mencoba suser_sname () sebagai pengguna, saya yakin itu sama dengan suser_name () jika tidak ada argumen. Ini patut dicoba - terima kasih!
Warrior Bob
1
SQL Server cocok dengan semua akun oleh SID - apakah SQL atau domain. Karena SID domain berasal dari direktori aktif, mengubah nama tidak mengubah SID. Jika di-cache, nama lama akan dikembalikan. Jika login sudah ada, nama login akan dikembalikan apakah itu nama yang sama atau tidak, selama SID cocok. Ini sama untuk pengguna basis data.
Sean Gallardy
1
Anda mungkin mencoba menjalankan ipconfig /flushdnsdan ipconfig /registerdnsdari baris perintah untuk melihat apakah itu menyelesaikan masalah.
RLF

Jawaban:

2

Mungkinkah ini terkait dengan caching dengan Kerberos? (dugaan saja mungkin tidak berhubungan) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx

Normoe
sumber
1
Saya tidak bisa mengatakan dengan pasti bahwa ini masalahnya, tetapi saya percaya ini atau sesuatu seperti itu. Mem-boot ulang server (yang terjadi karena alasan terpisah) tampaknya telah membersihkannya, setidaknya untuk kasus ini. Tidak jelas apakah akan muncul lagi.
Warrior Bob
Itu saran yang bagus, aku seharusnya memikirkan itu! :-) Itulah yang kami lakukan sebelumnya untuk membersihkan masalah kerbero yang di-cache. Senang kamu berhasil!
Normoe