web-dev-qa-db-ja.com

SQL Serverのアクセス許可でADセキュリティグループを更新する方法

Small Business Server 2003でSql Server 2008を使用しています。クライアントはWinXPを使用しています。

Active Directoryセキュリティグループにユーザーを追加しました。このユーザーがすぐにデータベースにアクセスできないのはなぜですか? SQL Serverでユーザーが認識されるまでに遅延があるようです。

SQL Serverに個々のユーザーを追加する必要がないように、アクセス許可にADセキュリティグループを明示的に使用しています。つまり、アクセスを許可するために、ユーザーをADセキュリティグループに追加する以外に何もする必要はありません。

しかし、何らかの理由でSql Serverは追加をすぐに認識しません。私はこれを何度も見ました。ユーザーをグループに追加しましたが、そのユーザーは翌日までデータにアクセスできません。リアルタイムでActive Directoryにクエリを送信していないようです。それがそうであることを確認できますか?

Sql ServerがActive Directoryからユーザーのリストを「更新」するために何をする必要がありますか?

12
D_Bester

ユーザーはワークステーションからログオフし、再度ログオンする必要があります。そのため、変更は翌日有効になるようです。これは、ユーザーが翌日にログオンしたときに、ドメインコントローラーから新しいトークンを取得し、このトークンに、メンバーであるドメイングループのリストが含まれているためです。ドメイングループのリストを含むこのトークンは、ユーザーがコンピューターにログインしたときにのみ更新されるため、ユーザーがログアウトしない場合、トークンは更新されません。

ドメインコントローラーが異なる物理的な場所にある場合に考慮する必要があるマルチサイトドメインレプリケーションの遅延もあります。

12
mrdenny

ユーザーがログオンすると、グループメンバーシップに関するすべての情報を含むセキュリティトークンが割り当てられます。

このトークンは、その間にADのグループメンバーシップに変更を加えても、ユーザーがログオフするまで(その時点で破棄されます)存続します。行った変更は、ユーザーが次にログオンして新しいセキュリティトークンを受け取ったときにのみ有効になります。

たとえば、ファイルシステムに権限を割り当てるときに同じシナリオを再現できます。これはADの動作であり、SQL Serverの動作ではありません。

5
Jon Seigel

したがって、次のようなコマンド/スクリプトを実行することで、毎回新しい認証情報を取得するという結果がすぐに得られます。

runas /netonly /user:domain\username "sqlcmd -S serverName -d dbname -q \"insert into testpermissions values (65)\""

cmd.exeを使用します(Powershellではなく、引用を正しく取得できませんでした)。

そうすれば、毎回新しいトークンを取得できます(ただし、パスワードを入力する必要があります)。煩わしすぎる場合は、パスワードテキストを保存して何かを行うこともできます。

とにかく、私のために働くと私はそれが誰かを助けることを望みます。

1
Karl