我在执行函数时遇到了问题。

以下是我所做的:

使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:

日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'


当前回答

给予这样的权限可能是危险的,特别是如果您的web应用程序使用相同的用户名。

现在web用户(以及整个万维网)也有权限在数据库中创建和删除对象。想想SQL注入!

我建议将Execute权限仅授予给定对象上的特定用户,如下所示:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

现在用户myusernameNoquotes可以执行过程storedProcedureNameNoquotes,而无需对有价值的数据拥有其他不必要的权限。

其他回答

最好的解决方案,我发现是创建一个新的数据库角色,即。

CREATE ROLE db_executor;

然后授予角色执行权限。

GRANT EXECUTE TO db_executor;

现在,当您转到用户的属性并转到user Mapping并选择您添加了新角色的数据库时,现在新角色将在database role membership for:部分中可见

欲了解更多细节,请阅读全文

给予这样的权限可能是危险的,特别是如果您的web应用程序使用相同的用户名。

现在web用户(以及整个万维网)也有权限在数据库中创建和删除对象。想想SQL注入!

我建议将Execute权限仅授予给定对象上的特定用户,如下所示:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

现在用户myusernameNoquotes可以执行过程storedProcedureNameNoquotes,而无需对有价值的数据拥有其他不必要的权限。

如果您让这个用户对于特定的数据库是特殊的,那么在属性的“用户映射”中可能不会将其设置为db_owner

如果你只需要授予一个功能(只有db管理员可以做到):

开放式管理工作室 在Object Eplorer中查找要授予的函数/过程(dbname-Programmability-[函数/存储过程]-…) 右键单击函数或过程名称并打开属性 在“属性”中选择“权限”,添加您想要的用户(或模式)并授予他执行权限。

我相信这是最安全的方法,因为您只授予用户执行这个函数。别的什么也没有。

你可以给每个人执行权限:

GRANT Execute on [dbo].your_object to [public]

“Public”是所有用户都属于的默认数据库角色。