Ответ 1
Информация о пользователях базы данных и назначенных им ролях предоставляется в виде системных представлений sys.database_principals и sys.database_role_members. Просмотрите эти данные с помощью этих запросов:
select * from sys.database_principals
select * from sys.database_role_members
Предполагаю, что у вас есть пользователи баз данных и роли, настроенные в базе данных A, и вы хотите, чтобы они были скопированы в базу данных B. Чтобы создать пользователей в целевой базе данных:
- Запустите следующий запрос в базе данных A
- Вырезать, вставить, ОБЗОР и запустить полученный script в базе данных B
.
SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
from sys.database_principals
where Type = 'U'
and name <> 'dbo'
Чтобы настроить новых пользователей в B с теми же функциями, что и в A:
- Запустите следующий запрос в базе данных A
- Вырезать, вставить, ОБЗОР и запустить полученный script в базе данных 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-логины. Если у вас есть определенные пользователем роли, вам сначала нужно их воссоздать. (Роли и права, назначенные им, очень открытые, и я никогда не хочу быть в ситуации, когда мне нужно это делать!)