T-SQL创建用户并授予存储过程执行权限

10

我有一个脚本用来创建数据库、存储过程、视图、表和UDF。我想加入一个脚本来创建一个名为'user_1'的用户并授予对数据库的执行权限。

我尝试了以下方式来创建所有存储过程的授权执行命令:

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 USER或GRANT的在线帮助中查找了吗? - Tom H
3个回答

24

创建登录:创建服务器级别的登录。然后... 创建用户:允许登录账户连接到您的数据库。然后... 授予执行权限:授予所有存储过程和函数在您的数据库中的执行权限。如果您只想授予特定存储过程的权限,请使用“Grant Execute ON abc TO xyz”。

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

1
正是我所需要的。谢谢你。为什么SQL文档这么难以筛选呢? - Rodolfo Neuber

2

你尝试过以下方法吗:

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

如果您愿意,也可以使用"CREATE USER"来创建用户。


我需要一个脚本来提取所有存储过程并授予权限。 - stackoverflowuser
请注意,如果用户名包含任何特殊字符或数字,例如123SPROCUSER,则必须使用方括号将其括起来,如此[123SPROCUSER] - Shrout1

0

我和原始用户遇到了完全相同的问题,但对我来说,这是由于嵌入在 TSQL 中的坏字符 - 我猜测是从剪切和粘贴的来源中获得的。

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

在尝试此方法之前,请尝试所有其他答案,因为这种情况相当不太可能发生 - 我只是添加它,因为当在管理工作室中突出显示并运行两行看起来完全相同的 TSQL 时,却导致不同的结果消息,这让人非常沮丧...

更新:坏字符是从 Microsoft Lync 粘贴的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接