日期:2014-05-17  浏览次数:20557 次

偶尔看到个问题 想不出来了
问题如下:

请问如何设置只允许执行存储过程
环境为:SQL 2005 Sp3
系统:windows 2003 Sp3

因为sqlserver上运行了多个数据,而且为了安全考虑
所以想只给用户‘execute’权限,也就是只给存储过程的执行权限
但是我只给了用户execute权限之后,存储过程里的select,update,insert也没有权限了

请问如何能作到只给用户一个execute权限,而又不会屏蔽掉存储过程里的'selece,update'等权限??,并且用户没有单独执行select,update等的权利


。。权限管理方面一直不是很会 

希望得到回答
------最佳解决方案--------------------
EXECUTE AS 子句 (Transact-SQL)
在 SQL Server 中,可以定义以下用户定义模块的执行上下文:函数(内联表值函数除外)、过程、队列和触发器。

通过指定执行模块的上下文,可以控制 数据库引擎使用哪一个用户帐户来验证对模块引用的对象的权限。这有助于人们更灵活、有力地管理用户定义的模块及其所引用对象所形成的对象链中的权限。必须而且只需授予用户对模块自身的权限,而无需授予用户对被引用对象的显式权限。只有运行模块的用户必须对模块访问的对象拥有权限。
实例:
USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO

------其他解决方案--------------------
授予对存储过程的权限 
1.在对象资源管理器中,连接到某个 数据库引擎 实例,再展开该实例。

2.依次展开“数据库”、存储过程所属的数据库以及“可编程性”。

3.展开“存储过程”,右键单击要针对其授予权限的过程,再单击“属性”。

4.在“存储过程属性”中,选择“权限”页。

5.若要为用户、数据库角色或应用程序角色授予权限,请单击“添加”。

6.在“选择用户或角色”中,单击“对象类型”以添加或清除所需的用户和角色。

7.在“显式权限”网格中,选择要为指定的用户或角色授予的权限。有关权限的说明,请参阅权限(数据库引擎)。

选择“授予”指示要为被授权者授予指定的权限。选择“具有授予权限”指示被授权者还可以将指定权限授予其他主体。

------其他解决方案--------------------
...
洗澡关机。
------其他解决方案--------------------
该回复于2010-08-26 16:28:10被版主删除
------其他解决方案--------------------
引用:
...
洗澡关机。



故意的。




------其他解决方案--------------------
可以只赋予运行proc的权限

------其他解决方案--------------------
首先给特定数据库创建一个角色,不要给任何架构,然后给这个角色相应的权限
比如有个exerole
赋予所有存储过程的权限
declare @sql varchar(max)
set @sql=''
select @sql=@sql+'grant execute on [dbo].['+name+'] to exerole'+char(13) from sys.objects where type='p'
exec(@sql)


------其他解决方案--------------------
然后把这个角色赋予特定用户
------其他解决方案--------------------
结贴吧,此贴必须给我300分
------其他解决方案--------------------
如果通过一个客户端程序来提供、执行此功能,就很简单了
客户端程序的登录账号密码不是数据库的账号密码,而是数据库里的一对数据而已
------其他解决方案--------------------
该回复于2010-09-01 13:36:00被版主删除
------其他解决方案--------------------
该回复于2010-09-14 09:45:10被版主删除
------其他解决方案--------------------
结了。
------其他解决方案--------------------
引用:
结了。

俺想再听听....
------其他解决方案--------------------
早点睡,明天再想。