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


10

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


MSSQLSERVER(またはインスタンス名は何でも)サービスは、ローカルシステムまたは実際のログインとしてログオンしていますか?値は、検索を実行しているアカウントのレジストリにキャッシュされる場合があります。あなたのケースでは、あなたはログインしてリクエストを行っていました。通常のアカウントを使用してSQL Serverを実行している場合(必要に応じて)、「SQL Server」ログインとしてSQL ServerにログオンしてEXECUTE ASから、SELECT SUSER_NAME()テストを実行すると思います。また、SUSER_SNAME()他の100のバリエーションを試したことがありますか?
ソロモンルツキー2016年

新しい名前を使用してインスタンスにログインを作成してみてください。これは、ユーザーの権限には影響しません。を実行するとSUSER_SNAME()、その時点で修正されるはずです。その後、ログインを削除して、新しい名前が保持されているかどうかを確認できます。
ケネスフィッシャー

@srutzkyこれは、ドメインアカウントで実行されるデフォルトのMSSQLSERVERインスタンスです。残念ながら、それでログインするためのパスワードがありません。私はまだユーザーとしてsuser_sname()を試していませんが、引数を指定しない場合はsuser_name()と同じだと思います。試してみる価値はありますが、ありがとうございます。
ウォリアーボブ

1
SQL Serverは、SQLでもドメインでも、SIDによってすべてのアカウントを照合します。ドメインSIDはActive Directoryから取得されるため、名前を変更してもSIDは変更されません。キャッシュされている場合は、古い名前が返されます。ログインが既に存在する場合、SIDが一致する限り、同じ名前であるかどうかにかかわらず、ログインの名前が返されます。これは、データベースユーザーの場合も同じです。
Sean Gallardy 2016年

1
コマンドラインから実行ipconfig /flushdnsしてみてipconfig /registerdns、問題が解決するかどうか確認してください。
RLF、2016年

回答:


2

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


1
これが問題であるかどうかははっきりとは言えませんが、これか、それと同じようなものだと思います。サーバーを再起動すると(別の理由で発生しました)、少なくともこの場合はサーバーがクリアされたようです。それが再び現れるかどうかは明確ではありません。
ウォリアーボブ

それは良い提案です、私はそれを考えるべきでした!:-)キャッシュされたkerberosの問題を解消するために、実際にそれを実行しました。成功しました。
Normoe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.