Разделение схемы SQL Server 2008 - разрешения схемы и роли базы данных - PullRequest
1 голос
/ 28 июля 2011

Я действительно надеюсь, что у кого-то есть понимание этого. Просто чтобы прояснить, о чем я говорю заранее; При ссылке на схему я имею в виду объект базы данных, используемый для разделения владельцев, а не схему создания базы данных.

Мы используем объекты Sql Server Schema для группировки таблиц в целые, где каждая группа принадлежит приложению. Каждое приложение также имеет свой собственный логин базы данных. Я только начал представлять роли базы данных, чтобы полностью автоматизировать развертывание для тестирования и промежуточной среды. Мы используем механизм сравнения объектов xSQL. Пакетный файл запускается каждую ночь, чтобы выполнить сравнение и создать файл изменения сценария. Затем его можно применить к целевой базе данных вместе с изменениями кода.

Проблема, с которой я сталкиваюсь, заключается в следующем. Рассмотрим следующую структуру базы данных:

База данных:

  • Безопасность / Schemas:
    • Ядро
      • CoreRole (владелец)
      • SchemaARole (выбрать, удалить, обновить)
      • SchemaBRole (выбрать)
    • SchemaA
      • SchemaARole (владелец)
    • SchemaB
      • SchemaBRole (владелец)
  • Безопасность / Роли / Роли в базе данных:
    • CoreRole
      • core_login
    • SchemaARole
      • login_a
    • SchemaBRole
      • login_b

Настройка отлично работает для трех приложений, которые их используют. Единственная проблема заключается в том, как создать / сгенерировать сценарий, который создает схему -> разрешения роли? Роль владельца применяется правильно. Так, например, схема Core получает роль владельца CoreRole (как и ожидалось). Однако SchemaARole и SchemaBRole не применяются.

Мне не удалось найти параметр, позволяющий включить это в объекте xSQL, и не существует опции для сценария этого из среды управления SQL Server. Ну, я не могу найти это, по крайней мере.

Я пытаюсь сделать невозможное? Как тогда SQL Server управляет этими отношениями?

1 Ответ

0 голосов
/ 01 декабря 2011

Я только что запустил SQL Profiler и поймал в ловушку то, что я думаю о вашем сценарии. Попробуйте это:

GRANT SELECT ON [Core].[TestTable] TO [CoreRole]
GRANT DELETE ON [Core].[TestTable] TO [CoreRole]
GRANT UPDATE ON [Core].[TestTable] TO [CoreRole]
...