web-dev-qa-db-ja.com

SQLServerのユーザーSIDを変更する

SQL Server 2012を使用していて、(Active Directoryの)ドメインユーザーを使用しています。誤ってユーザーがADから削除され、同一のログインとパスワードで(ただし、SIDが異なる)新規に作成され、元のユーザーが削除および復元されました-最終的に、古いSIDの古いユーザーが再作成されました。

1人のユーザーを除いて、ほとんどすべてが再び問題ないようです。 SQL Serverは、どういうわけか1人のユーザーの間違ったSIDでスタックし(他のすべてのユーザーは問題ありません)、ADから正しいSIDを取得していません。両方の場所でSIDを確認しました-ADのSIDはSQLServerのSIDと同じではありません。

この「SIDの不一致」の結果、このユーザーはデータベースにアクセスできません。試行すると失敗し、次のようになります。

  • 「エラー:18456、重大度:14、状態:5。」
  • ユーザー「DomainX\UserX」のログインに失敗しました。理由:指定された名前に一致するログインが見つかりませんでした。

サーバーとそれが使用されていたすべてのデータベースからユーザーを削除してから追加しました-そして再び間違ったSIDを取得しました!そして、この「新しい」ユーザーはまだデータベースに接続できません。

「ギアを磨く」には、次の2つがあります。

  1. 他のユーザーのSIDが1つだけ一致または不一致になる方法
  2. 他のユーザーが問題ない場合(古いSIDを取得している場合)、ドメインコントローラーに問題はないと想定できますか?

2つの既存のユーザー(または孤立した?)ログインでのさまざまな操作について多くのことを見つけましたが、SIDを変更するだけでは見つかりませんでした。

しかし、主な質問は、MS SQL Server(バージョン11.0)で1人のユーザーのSIDを変更する方法です。これも可能ですか?

[〜#〜] update [〜#〜]
これについて考え続けると、間違った質問があることに気づきました。このUserXはドメインユーザーであるため、SQL Serverローカルユーザーではありません。つまり、SQL ServerでSIDを直接変更することはできません。

ADの同じユーザーを使用する2つの同一のサーバー(ServerAとServerB)があります。 ServerBでは、UserXは正しいSIDを取得しており、SQL Serverで正常に認証できます(正しいSIDはADと同じ意味です)。明確にするために-UserXはServerAで間違ったSIDを取得しています。

質問-このユーザーがActive Directoryのドメインユーザーである場合、whereおよびhow SIDを変更しますか? UserXがServerBで認証できる場合、それはWindowsユーザー内のServerAでSIDを変更する必要があることを意味しますか?

いくつかの考えやアイデアが間違った方向に進んだ場合は、私を訂正してください。

更新2
質問の答えにはなりませんでしたが、問題の解決策を見つけました。興味のある人のために-私の大学はADでその間違ったSIDを持つ削除されたユーザーを見つけました。そのユーザーは更新され、ADでは両方のユーザーがアクティブになっています-goodユーザーとbad1つ。 SQL Serverはユーザーを認識し、ユーザーログインとSIDの不一致の問題は何とか解決されました-ServerAのUserXはrightSIDを持ち、データベースにアクセスできます。これで、すべてが正常に機能します。 :)

3

削除されたADユーザーとSIDの不一致で同様の状況が発生しました。私にとって、問題はローカルSIDキャッシュであり、解決策は、SQLサーバーとクライアントのPCで以下のリンクの回避策に従うことでした。

https://support.Microsoft.com/en-us/help/946358/the-lsalookupsids-function-may-return-the-old-user-name-instead-of-the

  1. レジストリエディターを開きます。これをWindows XPまたはWindowsServer 2003で行うには、[スタート]、[ファイル名を指定して実行]、[regedit]と入力し、[OK]をクリックします。

    Windows Vista以降でこれを行うには、[スタート]をクリックし、[>検索の開始]ボックスにregeditと入力して、Enterキーを押します。

  2. 次のレジストリサブキーを見つけて右クリックします:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa>

  3. [新規]をポイントし、[DWORD値]をクリックします。

  4. LsaLookupCacheMaxSizeと入力し、Enterキーを押します。

  5. [LsaLookupCacheMaxSize]を右クリックし、[修正]をクリックします。

  6. [値のデータ]ボックスに0と入力し、[OK]をクリックします。

  7. レジストリエディタを終了します。

必要に応じて、後で、作成したLsaLookupCacheMaxSize DWORDを右クリックして削除します。

2
BigO71

次のコマンドを発行して、孤立したユーザーをチェックしてみましたか?

sp_changes_users_login 'Report' 

(影響を受けるSQL Serverのmasterデータベースに対してdatabase_in_questionに対して)影響を受けるサーバーで。)

孤立したユーザーがいる場合は、次を発行できます。

sp_change_users_login 'Update_one', 'Domain\UserX', 'Domain\UserX'

...影響を受けるデータベースに対して、またはSQLログインがデータベースユーザーにマップされている場合は、次のコマンドを発行します。

sp_change_users_login 'Update_one', 'UserX', 'Domain\UserX'

sIDの不一致を修正します。

Microsoftサイトの sp_change_users_login の構文。

1