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

以下是我所做的:

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

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


当前回答

一般的答案是授予上面解释的执行权限。但是如果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

其他回答

以下是如何为一个非公开用户授予权限,

直接查询:

使用MyDatabase 授权执行[dbo]。[My-procedures-name] to [IIS APPPOOL\my-iis-pool] 去

如果您遇到类似上述问题的问题,即在执行解决方案时抛出异常,那么问题在于权限,没有正确地授予该组的用户访问数据库/存储过程的权限。你所需要做的就是像我下面所做的那样,用你的数据库名称、存储过程(函数)和权限类型或角色或你授予访问权限的人替换我的数据库名称。

USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC

/******对象:StoredProcedure [dbo]。[GetAllEmployees]脚本日期:01/27/2016 16:27:27 ******/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee

End

听起来,您需要为所讨论的存储过程向用户(或用户所属的组)授予执行权限。

例如,你可以这样授予访问权限:

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC

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

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

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

你需要运行这样的程序

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]