web-dev-qa-db-ja.com

suser_name()がADアカウント名の変更を反映しないのはなぜですか?

ユーザー名の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として、私は何をすべきか、またはこれを解決するためにどこを見ればよいでしょうか?

10
Warrior Bob

これはKerberosでのキャッシングに関連していますか? (推測は関係ないかもしれませんが) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx =

2
Normoe