我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
当前回答
如果您让这个用户对于特定的数据库是特殊的,那么在属性的“用户映射”中可能不会将其设置为db_owner
其他回答
如果你只需要授予一个功能(只有db管理员可以做到):
开放式管理工作室 在Object Eplorer中查找要授予的函数/过程(dbname-Programmability-[函数/存储过程]-…) 右键单击函数或过程名称并打开属性 在“属性”中选择“权限”,添加您想要的用户(或模式)并授予他执行权限。
我相信这是最安全的方法,因为您只授予用户执行这个函数。别的什么也没有。
我也遇到过同样的问题,我把db_owner权限也给了数据库用户。
一般的答案是授予上面解释的执行权限。但是如果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] 去
在SQL Server Management Studio中,进入“security->schema->dbo”:
双击dbo,选择权限页面,然后点击“查看数据库权限”蓝色链接:
选择您想要更改权限的用户,并在“explicit”选项卡下查找“Execute”权限:
通过选中相应的框来选择相应的权限。