ユーザー名の1つが合法的に変更されたため、Active Directoryのユーザー名をdomain \ oldnameからdomain \ newnameに変更しました。ただし、suser_sname()がストアドプロシージャでこのユーザーによって呼び出されると、新しい名前ではなく古い名前が返されます。
グーグルによって私はKB 946358に誘導されました。これは、おそらくsuser_name()がLsaLookupSidsを呼び出しているために、それらの名前がサーバーにキャッシュされ、更新されていないことを示唆しています。ただし、その記事の回避策にはサーバーの再起動が含まれており、それでも問題を理解したいと思います。
私のコンテキストを彼らのものに変更すると、正しい名前が戻ってきます:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
...これもLsaLookupSidsを呼び出すため、正しくない名前が返されると想定していました。ここで働いているメカニズムを本当に理解していないようです。
重要かもしれないいくつかの観察:
このユーザーはサーバーに明示的にログインしていません。しかし、彼らはそうするADグループのメンバーです。変更された名前(domain \ newname)がの結果セットに表示され
exec xp_logininfo 'domain\ADGroupName', 'members'
ます。domain \ oldnameにはありません。ユーザーが、Access 2003 MDBのパススルークエリから呼び出されたストアドプロシージャ内からsuser_name()を呼び出しています。
過去に多くのユーザーのアカウント名を変更しましたが、この問題は先週しか確認されていません(先週、2つの変更が行われ、どちらも問題が発生しているようです)。
サーバーは、Windows 2008 R2 DatacenterエディションでSql Server 2008 SP3 x64を実行しています。
どうしたの?DBAとして、私は何をすべきか、またはこれを解決するためにどこを見ればよいでしょうか?
SUSER_SNAME()
、その時点で修正されるはずです。その後、ログインを削除して、新しい名前が保持されているかどうかを確認できます。
ipconfig /flushdns
してみてipconfig /registerdns
、問題が解決するかどうか確認してください。
EXECUTE AS
から、SELECT SUSER_NAME()
テストを実行すると思います。また、SUSER_SNAME()
他の100のバリエーションを試したことがありますか?