对象'xxxxxxx',数据库'zzzzzzz',架构'dbo'上的EXECUTE权限被拒绝

upe*_*mar 172 sql-server

我在执行函数时遇到问题.

这是我做的:

  1. 使用SQL Server Management Studio创建函数.它已成功创建.
  2. 然后我尝试执行新创建的函数,这是我得到的:

对象'xxxxxxx',数据库'zzzzzzz',架构'dbo'上的EXECUTE权限被拒绝.

Row*_*haw 156

听起来您需要向相关存储过程的用户(或他们所属的组)授予执行权限.

例如,您可以授予访问权限:

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC
Run Code Online (Sandbox Code Playgroud)

  • 是的,它允许任何与DB连接的人运行存储过程.我希望人们担心安全性会授予他们*数据库**中**相关组的访问权限. (7认同)
  • 您还可以使用`GRANT EXEC TO PUBLIC`来授予对数据库中所有对象的访问权限 (7认同)
  • 我永远不会向公共角色授予执行权限。在我们的环境中,任何方式都要求禁止公共角色。我总是向特定用户或为此目的明确创建的角色授予执行权限。 (4认同)
  • 为什么每个人都反对建议给予PUBLIC在数据库中执行任何内容的权利的评论?这是一种特殊情况,而不是事实。 (4认同)
  • 嗨,我知道这是在很久以前,但我有一个问题.这样的行动可能会有一些安全问题吗?是否打开sp用于每个人? (2认同)
  • 不确定是否授予“public”访问权限;我宁愿选择更安全的选择,即使用 exec 权限创建单独的角色。 (2认同)

kaz*_*zim 100

我找到的最佳解决方案是创建一个新的数据库角色,即

CREATE ROLE db_executor;
Run Code Online (Sandbox Code Playgroud)

然后授予该角色exec权限.

GRANT EXECUTE TO db_executor;
Run Code Online (Sandbox Code Playgroud)

现在,当您转到用户的属性并转到用户映射并选择已添加新角色的数据库时,现在新角色将显示在数据库角色成员身份中:

有关详细信息,请阅读全文

  • 如果您需要将所有SP的EXECUTE授予特定用户登录,则此答案最佳 - 不使用public或db_owner.这似乎是最谨慎和有用的答案. (6认同)
  • 由于某种原因,这是在 SQL Server 2012 上对我有效的唯一答案。向我的用户授予显式 EXECUTE 权限不起作用。仅当它通过角色继承权限时才有效。 (3认同)

Suh*_*wan 65

在Sql Server Management Studio中:

去吧security->schema->dbo.

双击dbo,然后单击permission tab->(blue font)view database permission并随意滚动所需的字段,例如"execute".帮助自己选择使用grantdeny控件.希望这会有所帮助:)


Iai*_*ain 51

你需要运行这样的东西

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]
Run Code Online (Sandbox Code Playgroud)

  • 这就是我需要的,但我必须做`[domain\user]`而不是`'domain\user' (4认同)

cse*_*yam 39

如果您尝试授予用户或角色权限,则此方法有效.

使用Microsoft SQL Server Management Studio:

  1. 转到:数据库
  2. 右键单击dbo.my_database
  3. 选择:属性
  4. 在左侧面板上,单击:权限
  5. 在"名称"面板中选择"用户"或"角色"
  6. 在权限和选中标记中查找执行:授予,使用授予或拒绝


小智 16

提供此类权限可能很危险,尤其是当您的Web应用程序使用相同的用户名时.

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

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

grant execute on storedProcedureNameNoquotes to myusernameNoquotes
Run Code Online (Sandbox Code Playgroud)

现在,用户myusernameNoquotes可以执行procedureProcedureNameNoquotes过程,而无需对贵重数据进行其他不必要的权限.


Den*_*eev 8

虽然您有足够的权限来创建它,但您无权执行它.

有关更多信息,请参阅GRANT对象权限(Transact-SQL)