我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
当前回答
我认为您必须选择您想要授予访问权限的对象,然后右键单击,并选择属性。在将要显示的模式窗口上选择权限,然后单击Search,在新显示的窗口上,选择browse,选择您想授予访问权限的用户,然后单击ok。它将为您显示权限和授予状态的列表,然后您可以选择授予或拒绝
其他回答
这表明您无权对指定的数据库表执行任何操作。要启用此功能,请转到Security -> Schema并进行检查。
一般的答案是授予上面解释的执行权限。但是如果SP的模式所有者与底层对象不同,这就行不通了。
通过以下方法检查模式所有者:
select name, USER_NAME(s.principal_id) AS Schema_Owner from sys.schemas s
要更改模式的所有者,您可以:
ALTER AUTHORIZATION ON SCHEMA::YOUR_SCHEMA TO YOUR_USER;
例子:
ALTER AUTHORIZATION ON SCHEMA::Claim TO dbo
ALTER AUTHORIZATION ON SCHEMA::datix TO user1;
最后,如果在你的SP中,你要截断一个表或改变结构,你可能想在你的SP中添加WITH EXECUTE AS OWNER:
ALTER procedure [myProcedure]
WITH EXECUTE AS OWNER
as
truncate table etl.temp
给予这样的权限可能是危险的,特别是如果您的web应用程序使用相同的用户名。
现在web用户(以及整个万维网)也有权限在数据库中创建和删除对象。想想SQL注入!
我建议将Execute权限仅授予给定对象上的特定用户,如下所示:
grant execute on storedProcedureNameNoquotes to myusernameNoquotes
现在用户myusernameNoquotes可以执行过程storedProcedureNameNoquotes,而无需对有价值的数据拥有其他不必要的权限。
我认为您必须选择您想要授予访问权限的对象,然后右键单击,并选择属性。在将要显示的模式窗口上选择权限,然后单击Search,在新显示的窗口上,选择browse,选择您想授予访问权限的用户,然后单击ok。它将为您显示权限和授予状态的列表,然后您可以选择授予或拒绝
你需要运行这样的程序
GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]