0

だから、私は私の仲間のウェブサイトで見つけたコードと格闘してきました:

データベースログインを移動するための8つのステップ

データベースレベルのセキュリティ、ロール、および明示的なアクセス許可ステートメントを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つのデータセットに含まれるように、現在の状態で機能するが不便なものを変更するにはどうすればよいですか?

4

3 に答える 3

4

デビッド、

これは、あなたの望むことですか?

CREATE TABLE tempdb.dbo.Results (c1 VARCHAR(8000))

Declare @FullStatement varchar(MAX)
Set @FullStatement = 'SELECT ''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'

INSERT INTO tempdb.dbo.Results Exec sp_MSforeachdb  @FullStatement

select * FROM tempdb.dbo.Results
于 2012-12-16T21:15:50.240 に答える
0

データベースのユーザーと権限をスクリプト化するのはなぜですか?それらはデータベースにあり、データベースを移行しても引き続き存在します。データベースを最初から再作成する場合を除いて、これを行う必要はありません。

于 2012-12-17T00:17:44.800 に答える
0

これを行うには複数の方法があります。PowerShellを使用して、すべてのデータベースをループし、結果をExcelに入れることができます。ネルソン氏は、彼のPowerShellSQL大学シリーズでこれを持っています。申し訳ありませんが、リンクを取得しますが、空港で電話で入力しています。

于 2012-12-16T21:11:49.990 に答える