t-sql为存储过程创建用户并授予执行权限

t-sql为存储过程创建用户并授予执行权限,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我有一个创建数据库、存储过程、视图、表和udf的脚本。我想包含一个脚本来创建用户“user_1”,并授予数据库的执行权限 我尝试按照以下步骤为所有存储的进程创建grant exec命令 declare @permission varchar(max) select @permission = COALESCE( @permission + '; ' + 'Grant Execute on ' + name + ' user_1', 'Grant Execute on ' +

我有一个创建数据库、存储过程、视图、表和udf的脚本。我想包含一个脚本来创建用户“user_1”,并授予数据库的执行权限

我尝试按照以下步骤为所有存储的进程创建grant 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)
不起作用。它给

“;”附近的语法不正确

如何解决此问题?

您是否尝试过:

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

如果需要,也可以“创建用户”。

创建登录:创建服务器级登录。然后。。。 创建用户:允许登录帐户附加到数据库。然后。。。 授予执行权限:授予数据库中所有sp和函数的执行权限。如果只想向特定SP授予权限,请使用“将abc上的执行授予xyz”

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

与原始用户的问题完全相同,但对我来说,这是TSQL中嵌入的坏字符-我猜是从任何源剪切和粘贴的

无论如何,根据你有多少空格,只需删除单词之间的空格,并替换为常规空格

在此之前,请尝试所有其他答案,这是不太可能的-我只是添加了它,因为有两行TSQL看起来彼此相同但在Management Studio中突出显示并运行时会产生不同的结果消息,这让人非常沮丧


更新:错误字符是从Microsoft Lync粘贴的

您尝试了什么?您是否查看了“创建用户”或“授予”的联机帮助?我需要一个脚本来提取所有存储的过程并授予权限。请注意,如果用户名有任何特殊字符或数字,例如
123SPROCUSER
,则用户名必须用方括号括起来,例如
[123SPROCUSER]
,这正是我要查找的。非常感谢。为什么SQL文档如此难以筛选?