Генерация сценариев для членства в роли базы данных в SQL Server 2005

У меня есть база данных с большим количеством пользователей в нем. Те пользователи принадлежат различным встроенным ролям в DB (например, db_ddladmin).

Я хочу генерировать сценарий, который создает тех тех же пользователей с теми же ролевыми присвоениями для использования в другой базе данных. Studio управления SQL, кажется, только генерирует призывы sp_addrolemember к пользовательским ролям, не сборке - в. Там какой-либо путь состоит в том, чтобы сделать это сценарием все роли?

Возможно, существуют кто-либо другой, лучший инструмент для генерации сценариев базы данных от существующей базы данных (предпочтительно, но не обязательно, свободны)?

13
задан rickythefox 16 July 2010 в 13:53
поделиться

2 ответа

Информация о пользователях базы данных и ролях, которые им назначены, доступна в системных представлениях 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'

Чтобы настроить новых пользователей в базе данных B с теми же ролями, которые они имеют в базе данных A:

  • Выполните следующий запрос в базе данных 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. Если у вас есть определенные пользователем роли, вам нужно будет сначала создать их заново. (Роли и назначенные им разрешения очень неограниченны, и я не хочу оказаться в ситуации, когда мне придется это делать!)

.
22
ответ дан 1 December 2019 в 22:22
поделиться

Вот один вариант от Idera: http://www.idera.com/Products/Free-Tools/SQL-permissions/ Он генерирует логины и разрешения и может помочь вам выполнить то, что вы пытаетесь сделать.

0
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: