職場では、AD グループを使用して SQL Server データベースへのアクセスを制御しています。
これらのグループはSecurity > Logins
とで確認できます(database) > Security > Users
。
問題は、一部の DB には有効なログイン/ユーザーとして 50 以上の AD グループがあり、私は複数のメンバーであることを知っています。
ログインしている AD グループを特定する方法はありますか?
職場では、AD グループを使用して SQL Server データベースへのアクセスを制御しています。
これらのグループはSecurity > Logins
とで確認できます(database) > Security > Users
。
問題は、一部の DB には有効なログイン/ユーザーとして 50 以上の AD グループがあり、私は複数のメンバーであることを知っています。
ログインしている AD グループを特定する方法はありますか?
あなたは事実上、それらすべてとしてログインしています。あなたがメンバーである各グループに付与された個々のアクセス許可のすべての結合を持つことになります。
探しているものに役立つ 2 つの簡単な組み込みコマンドがあります。
まず、拡張プロシージャ XP_LoginInfo (少なくとも SS2000 以降で使用可能) は、特定のログインがインスタンスへの接続に使用できるすべての接続パスを表示します。
DECLARE @LoginName sysname
SELECT @LoginName = SYSTEM_USER
EXEC xp_LoginInfo @AcctName = @LoginName, @Option = 'all'
最後の列「パーミッション パス」の下に表示されるすべてのグループ名は、指定された LoginName が属するグループです。「特権」列にも注意してください。ログインにインスタンスに対する管理者またはユーザーレベルの権限があるかどうかが表示されます。
現在、関数 fn_my_permissions (SS2005 以降で使用可能) は、現在接続されているログインが現在のデータベースまたはサーバーに対して持っているすべての権限を表示します。
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
Damien_The_Unbeliever が 11/28/12 に回答したように、基本的に、パーミッションの最終的なリストは、各グループ (および ID が明示的に追加されている場合は個別) に割り当てられたすべてのパーミッション (Grant と Deny の両方) の結合です。 xp_LoginInfo を実行します。
したがって、基本的には、許可されたパスが複数ある場合、どのグループにも正確に接続しないというのが答えです。代わりに、本質的に、あなたはそれらすべてとつながります。SQL Server では、アクセス許可の「結合」の性質を明確に示したり、述べたりしていませんが、上記の 2 つのコマンドで推測できます。
便利なセキュリティ カタログ ビューが多数、MSDN のこちらにあります。