Предоставлять разрешения роли базы данных SQL удаленно - PullRequest
0 голосов
/ 15 марта 2011

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

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

Итак, у меня есть MakeWebWriteable процедура, которая должна сгенерировать и выполнить некоторый код, как показано ниже. За исключением того, что ниже явно не будет работать. Я в недоумении, как ссылаться на роль и обновлять ее на удаленном сервере. Я думал об использовании exec (@sql) at [reporting\server], но я не уверен, как я буду ссылаться на объект роли определенной базы данных в этом.

grant insert, update, delete on dbo.TableName to webapplication
grant insert, update, delete on [reporting\server].DBName.dbo.TableName to [reporting\server].DBName.dbo.webapplication

Как я могу это сделать, или есть идеи получше? (т.е. репликация)

<ч /> edit 1: Обычно мы пишем миграции в виде сценариев SQL, фиксируем их в SVN и обновляем наши базы данных сценарием синхронизации - что-то вроде процесса в RoR, только без преобразования модели -> SQL , В идеале, мы бы просто поместили строку в конце миграции, в которую мы добавили таблицу, например, если мы хотим, чтобы таблица была доступна для веб-записи.

-- Code to create NewTable...

if object_id('SetWebWriteable') is not null
    exec SetWebWriteable @tableName = 'NewTable'

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

1 Ответ

0 голосов
/ 15 марта 2011

Из того, что Вы описываете, Вам нужна утилита SQLCMD. Подключитесь к любому серверу, используя учетные данные, которые он принимает (я обычно использую -E, который представляет Windows-аутентификацию), и выполняйте любые скрипты, которые вам нужны. Если Вам не доверяют, создайте учетную запись с достаточными учетными данными.

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

И вы можете использовать PowerShell, встроенный в SQL Server 2008, который может работать с объектами на ЛЮБОМ сервере, к которому вы можете подключиться (с вашими учетными данными). Посмотри на это. Он имеет командлет Invoke-Sqlcmd, который помогает TON.

1007 * Люк *

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