13

多くのユーザーが含まれるデータベースがあります。これらのユーザーは、DB のさまざまな組み込みロール (db_ddladmin など) に属しています。

別のデータベースで使用するために、同じ役割が割り当てられた同じユーザーを作成するスクリプトを生成したいと考えています。SQL Management Studio は、組み込みの役割ではなく、ユーザー定義の役割に対してのみ sp_addrolemember 呼び出しを生成するようです。すべての役割をスクリプト化する方法はありますか?

おそらく、既存のデータベースからデータベース スクリプトを生成するための、より優れたツールが他にあるでしょうか (できれば無料ですが、必須ではありません)。

4

4 に答える 4

25

データベースのユーザーとユーザーが割り当てられているロールに関する情報は、システム ビュー sys.database_principals と sys.database_role_members で利用できます。次のクエリでこのデータを確認します。

select * from sys.database_principals
select * from sys.database_role_members

データベース A で構成されたデータベース ユーザーとロールがあり、それらをデータベース B にコピーすると仮定します。ターゲット データベースでユーザーを作成するには、次のようにします。

  • データベース A で次のクエリを実行します。
  • 結果のスクリプトをデータベース B で切り取り、貼り付け、確認し、実行します。

.

SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
 from sys.database_principals
 where Type = 'U'
  and name <> 'dbo'

A と同じ役割を持つ B の新しいユーザーを構成するには、次のようにします。

  • データベース A で次のクエリを実行します。
  • 結果のスクリプトをデータベース B で切り取り、貼り付け、確認し、実行します。

.

SELECT 'EXECUTE sp_addrolemember ''' + roles.name + ''', ''' + users.name + ''''
 from sys.database_principals users
  inner join sys.database_role_members link
   on link.member_principal_id = users.principal_id
  inner join sys.database_principals roles
   on roles.principal_id = link.role_principal_id

これらのスクリプトを常に確認してください。例外や特別なケースが発生している可能性があり、セキュリティを台無しにしたくないだけです。

新しいデータベースが別の SQL Server インスタンスにある場合は、最初に SQL ログインを作成する必要があります。ユーザー定義の役割がある場合は、まずそれらを再作成する必要があります。(ロールとロールに割り当てられたアクセス許可は非常に自由度が高く、その必要がある状況にはなりたくありません!)

于 2010-07-16T15:23:25.247 に答える
0

Idera のオプションの 1 つを次に示します。http://www.idera.com/Products/Free-Tools/SQL-permissions/ ログインとアクセス許可を生成し、目的を達成するのに役立つ場合があります。

于 2010-07-16T14:07:40.323 に答える