データベースのユーザーとユーザーが割り当てられているロールに関する情報は、システム ビュー 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 ログインを作成する必要があります。ユーザー定義の役割がある場合は、まずそれらを再作成する必要があります。(ロールとロールに割り当てられたアクセス許可は非常に自由度が高く、その必要がある状況にはなりたくありません!)