これは最初の一歩かもしれませんが、おそらくあなたが望む良い出力ではありません (そして、2 つの結果セットが生成されます)。
EXEC sp_helplogins N'floob';
ただし、SQL Server 2000 では機能します。手順の一部の機能を試して複製したい場合は、基本的にすべてのデータベースでカーソルを使用してアクセス許可をチェックする方法を確認できます。SQL Server 2000 の場合:
EXEC sp_helptext N'sp_helplogins';
2005 年以降は、OBJECT_DEFINITION() の出力を好みます。
SELECT OBJECT_DEFINITION(OBJECT_ID(N'sys.sp_helplogins'));
したがって、同様のロジックに基づいて独自のカーソルを作成し、出力をよりきれいにすることができます...
以下は簡単な (そして完全ではない) 例です。多くはカバーしていませんが、上記が十分でない場合に開始するためのアイデアです。
DECLARE @login NVARCHAR(255);
SET @login = N'foobarblat';
-- above would be an input parameter to a procedure, I presume
CREATE TABLE #dbs(name SYSNAME);
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + N'INSERT #dbs SELECT ''' + name + ''' FROM '
+ QUOTENAME(name) + '.sys.database_principals AS u
INNER JOIN sys.server_principals AS l
ON u.sid = l.sid
WHERE l.name = @login;'
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND user_access_desc = 'MULTI_USER';
EXEC sp_executesql @sql, N'@login SYSNAME', @login;
SELECT name FROM #dbs;
DROP TABLE #dbs;
私が言ったように、これは完全ではありません。ユーザーが接続を拒否されているかどうか、拒否リーダー/ライター ロールのメンバーであるかどうか、データベース内のユーザー名がログインと一致しない場合にエイリアスが表示されないかどうかはわかりません。詳細については、sp_helplogins
何を見せたいかによる。