我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
我在执行函数时遇到了问题。
以下是我所做的:
使用SQL Server Management Studio创建一个函数。它被成功地创建了。 然后我尝试执行新创建的函数,下面是我得到的结果:
日志含义在日拒绝执行权限 对象'xxxxxxx',数据库 'zzzzzzz' schema 'dbo'
听起来,您需要为所讨论的存储过程向用户(或用户所属的组)授予执行权限。
例如,你可以这样授予访问权限:
USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC
你可以给每个人执行权限:
GRANT Execute on [dbo].your_object to [public]
“Public”是所有用户都属于的默认数据库角色。
给予这样的权限可能是危险的,特别是如果您的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:部分中可见
欲了解更多细节,请阅读全文
在SQL Server Management Studio中,进入“security->schema->dbo”:
双击dbo,选择权限页面,然后点击“查看数据库权限”蓝色链接:
选择您想要更改权限的用户,并在“explicit”选项卡下查找“Execute”权限:
通过选中相应的框来选择相应的权限。
如果您遇到类似上述问题的问题,即在执行解决方案时抛出异常,那么问题在于权限,没有正确地授予该组的用户访问数据库/存储过程的权限。你所需要做的就是像我下面所做的那样,用你的数据库名称、存储过程(函数)和权限类型或角色或你授予访问权限的人替换我的数据库名称。
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
如果您试图将权限授予用户或角色,则此操作将有效。
使用Microsoft SQL Server Management Studio:
转到:数据库 右键单击dbo.my_database 选择:属性 在左侧面板上,单击:Permissions 在“名称面板”中选择“用户”或“角色” 找到“在权限中执行”并选中标记:“授予”、“与授予一起”或“拒绝”
您最好修改服务器角色,它是为安全特权而设计的。为您的用户添加系统管理员服务器角色。为了更好的安全性,您可以自定义服务器角色。但是这个方法会给你你现在想要的。
对象资源管理器->服务器->安全->登录 右键单击所需的用户 进入左边的服务器角色 确保选中sysadmin 点击OK并重新启动SQL服务器
祝你好运
以下是如何为一个非公开用户授予权限,
直接查询:
使用MyDatabase 授权执行[dbo]。[My-procedures-name] to [IIS APPPOOL\my-iis-pool] 去
一般的答案是授予上面解释的执行权限。但是如果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
如果你只需要授予一个功能(只有db管理员可以做到):
开放式管理工作室 在Object Eplorer中查找要授予的函数/过程(dbname-Programmability-[函数/存储过程]-…) 右键单击函数或过程名称并打开属性 在“属性”中选择“权限”,添加您想要的用户(或模式)并授予他执行权限。
我相信这是最安全的方法,因为您只授予用户执行这个函数。别的什么也没有。
我认为您必须选择您想要授予访问权限的对象,然后右键单击,并选择属性。在将要显示的模式窗口上选择权限,然后单击Search,在新显示的窗口上,选择browse,选择您想授予访问权限的用户,然后单击ok。它将为您显示权限和授予状态的列表,然后您可以选择授予或拒绝