Создание сценариев для членства в роли базы данных в SQL Server 2005 - PullRequest
12 голосов
/ 16 июля 2010

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

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

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

Ответы [ 3 ]

21 голосов
/ 16 июля 2010

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

0 голосов
/ 25 октября 2013

Для пользовательских ролей БД

SELECT 'CREATE ROLE [' + name + ']' 
  FROM sys.database_principals 
  where type='R' and is_fixed_role = 0 and name != 'public'
0 голосов
/ 16 июля 2010

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

...