T-sql создать пользователя и предоставить выполнение с разрешения для хранимых процедур

У меня есть script, который создает базу данных, хранит procs, views, tables, udf. Я хочу включить script для создания пользователя user_1 и предоставить разрешение на выполнение в базе данных.

Я попытался выполнить команду create exec для всех сохраненных процедур

declare @permission varchar(max)

select @permission = COALESCE(
    @permission + '; ' + 'Grant Execute on ' + name +  ' user_1', 
   'Grant Execute on ' + name +  ' user_1')
from sysobjects where xtype in ('P')

exec (@permission)

Но exec (@permission) не работает. Он дает

неправильный синтаксис рядом с ';'.

Как я могу это решить?

Ответ 1

Создать вход: создает вход на уровне сервера. Затем... Создать пользователя: позволяет подключиться к вашей учетной записи. Затем... Grant Execute To: предоставляет права на выполнение всех функций sp и функций в вашем db. Используйте "Grant Execute ON abc TO xyz", если вы хотите предоставить права только определенным sps.

Create login abacadaba with password='ABVDe12341234';
Create user abacadaba for login abacadaba;
Grant Execute to abacadaba;

Ответ 2

Вы пробовали:

CREATE LOGIN TestUser WITH PASSWORD = 'TopSecret'
GRANT EXEC ON MyStoredProc TO TestUser

вы также можете "СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ", если этого хотите.

Ответ 3

Имела точно такую ​​же проблему, как и оригинальный пользователь, но для меня это были плохие символы, встроенные в TSQL, - я предполагаю, из какого источника он был вырезан и вставлен.

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

Попробуйте все другие ответы до этого, это довольно маловероятно - я просто добавляю его, поскольку это было так расстраивающе, что у меня было 2 строки TSQL, которые выглядели идентичными выше/ниже друг друга, но в результате различные сообщения результатов, когда они выделены и запущены в Management Studio...

UPDATE: плохие символы были вставлены из Microsoft Lync