ユーザー名の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として、私は何をすべきか、またはこれを解決するためにどこを見ればよいでしょうか?
これはKerberosでのキャッシングに関連していますか? (推測は関係ないかもしれませんが) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx =