だから、私は私の仲間のウェブサイトで見つけたコードと格闘してきました:
データベースレベルのセキュリティ、ロール、および明示的なアクセス許可ステートメントを1つの出力で生成したいので、何度もコピーアンドペーストせず、サーバー上のすべてのデータベースで実行されます(もちろんtempdbを除く)。
Declare @FullStatement varchar(MAX)
Set @FullStatement = ' use [?]; SELECT dp.state_desc + N'' '' + dp.permission_name + N'' TO '' + cast(QUOTENAME(dpl.name COLLATE DATABASE_DEFAULT) as nvarchar(500)) AS TSQLScript
FROM sys.database_permissions AS dp
INNER JOIN sys.database_principals AS dpl ON (dp.grantee_principal_id = dpl.principal_id)
WHERE dp.major_id = 0
and dpl.name not like ''##%'' -- excluds PBM accounts
and dpl.name not in (''dbo'', ''sa'', ''public'')
ORDER BY dp.permission_name ASC, dp.state_desc ASC'
Exec sp_MSforeachdb @FullStatement
テーブル変数、一時テーブルなどを使用して、すべてのステートメントが1つのデータセットに含まれるように、現在の状態で機能するが不便なものを変更するにはどうすればよいですか?