GRANTs на [master] распространяются на другие БД? - PullRequest
0 голосов
/ 16 апреля 2009

ОК, я пытаюсь создать «пустую» версию базы данных на другом экземпляре SQL Server 2005. Для этого я использую мастер сценариев, чтобы создать большой скрипт, который СОЗДАЕТ все таблицы, представления, SP и т. д. добавляет некоторых пользователей и предоставляет им разрешения. Теперь в разделе разрешений скрипта у меня есть (между прочим)

use [master]
GO
GRANT CREATE VIEW to [myUser]
GO
...
use [prodDb]
GO
GRANT REFERENCES on [tblMyTable] to [myUser]
GO
...

Помните, что это скрипт, сгенерированный мастером. То, что я пытаюсь выяснить, должно ли "использовать мастер ... GRANT CREATE VIEW" позволить myUser создавать представления в prodDb? Это мое понимание - я говорю «myUser может создавать представления в любой базе данных в этом экземпляре», - но я думаю, что получаю ошибки разрешения, когда пытаюсь разрешить myUser создавать представление в prodDb. Когда я смотрю на разрешения для prodDb в SQL Server Manager, разрешения правильные, но целевая система, в которой я выполняю сгенерированный сценарий, не имеет SQL Server Manager, и я не уверен, как проверить разрешения для пользователя для данного объекта из командной строки (и, очевидно, ошибки, когда я пытаюсь использовать эти разрешения, являются большой подсказкой).

Это ошибка в мастере сценариев? Должен ли я забрать разрешения на уровне мастера и предоставить их только на уровне базы данных? Если это имеет какое-либо значение, это для локального приложения в автономной системе, которое никогда не будет подключено к сети.

ETA: ОК, так почему же мастер сценариев не выполняет правильные операторы GRANT для prodDb? Я имею в виду, если я посмотрю на текущие разрешения для myUser на prodDb, они могут CREATE VIEW. Но если я запускаю сценарий на новом экземпляре SQL Server из командной строки, myUser не может создать CREATE VIEW на prodDb. Я могу исправить это вручную, но чертовски раздражает необходимость помнить, что каждый раз, когда я перезапускаю мастер скриптов.

Ответы [ 2 ]

3 голосов
/ 16 апреля 2009

Насколько я понимаю, изменения в Master не распространяются на другие базы данных, это просто площадка для общесистемных объектов, таких как пользователи, системные хранимые процедуры и список других существующих баз данных.

Изменения в модели будут распространяться на новые базы данных, созданные после изменения, но не существующие базы данных.

1 голос
/ 16 апреля 2009

"idforstackoverflow" совершенно прав:

  • Master - это, так сказать, «системная» база данных
  • «Модель», с другой стороны, является шаблоном для новых баз данных. Изменения в модели будут распространяться в новые базы данных при их создании - существующие изменения не будут затронуты этими изменениями

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...