Использование переменных с GRANT и DENY в SQL Server 2005 - PullRequest
3 голосов
/ 18 июня 2009

В SQL Server 2005 как можно использовать переменную для имени пользователя для разрешений GRANT или DENY для объектов, входящих в базу данных? Я пробовал:

DECLARE @username varchar(30)
SET @username = 'DOMAIN\UserName'
GRANT SELECT ON [mytable] TO @username
GRANT UPDATE([field one], [field two], [field three]) ON [mytable] TO @username

Я получаю Incorrect syntax near '@username', поэтому я завернул его в [и]

GRANT SELECT ON [mytable] TO [@username]

Однако тогда это приводит к Cannot find the user '@username', because it does not exist or you do not have permission. Как я могу сделать это без необходимости вводить имя пользователя для каждого оператора? Я хочу сделать это, чтобы уменьшить вероятность опечаток (что может привести к тому, что неправильный пользователь получит права доступа)

Ответы [ 3 ]

7 голосов
/ 18 июня 2009

вам нужен динамический sql, измените EXEC на PRINT, если вы хотите увидеть, что будет выполнено добавлена ​​функция quotename, потому что вам нужны скобки для пользователей домена

 DECLARE @username varchar(30)
SET @username = 'DOMAIN\UserName'

SET @username = quotename(@username)

exec  ('GRANT SELECT ON [mytable] TO ' + @username )
exec ('GRANT UPDATE([field one], [field two], [field three]) ON [mytable] TO ' + @username )
1 голос
/ 18 июня 2009

Обновление ответа от Yoopergeek , вы можете иметь

DECLARE @sql VARCHAR(2000)
SET @sql = 'GRANT SELECT ON [mytable] TO [' + Replace(@username, '[', '\[') + ']' + Char(13) + Char(10)
SET @sql = 'GRANT UPDATE([field one], [field two], [field three]) ON [mytable] TO [' + Replace(@username, '[', '\[') + ']'
PRINT @sql
EXEC @sql
1 голос
/ 18 июня 2009

Будет ли в этом случае работать динамический SQL?

DECLARE @sql VARCHAR(2000)
SET @sql = 'GRANT SELECT ON [mytable] TO ' + @username
EXEC @sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...