2014-06-19 78 views
0

请参考下面的SQL存储过程:如何授予访问权限以更改所有SQL表的权限?

ALTER PROCEDURE cspFieldAccess 
@Tbl varchar(20), 
@Fld varchar(20), 
@Usr varchar(35), 
@Dny varchar(5), 
@All varchar(5) 

AS 
DECLARE @sql nvarchar(max) 
IF @Dny = 'Y' and @All = 'Y' 
set @sql='DENY UPDATE ON ['[email protected]+'] ('[email protected]+') TO [MCCOSKERS\ViewPoint Production Users]' 

ELSE IF @Dny = 'Y' and @All = 'N' 
set @sql='DENY UPDATE ON ['[email protected]+'] ('[email protected]+') TO ['[email protected]+']' 

ELSE IF @Dny = 'N' and @All = 'Y' 
set @sql='GRANT UPDATE ON ['[email protected]+'] ('[email protected]+') TO [MCCOSKERS\ViewPoint Production Users]' 

ELSE IF @Dny = 'N' and @All = 'N' 
set @sql='GRANT UPDATE ON ['[email protected]+'] ('[email protected]+') TO ['[email protected]+']' 

exec sp_executesql @sql 

我可以在SQL完美地执行此过程(如SA),但我想它在应用程序调用观构建软件工作。

基本上,该过程将允许用户指定用户,表和字段,然后拒绝对字段的更改访问。如果“@ALL参数为‘Y’,那么它将适用于所有用户。

当我运行这个从观点,我得到一个错误信息,说‘无法找到对象PREH'’。

FYI:“PREH”是输入到Viewpoint的表格

我假设发生此错误是因为我登录的用户没有权限拒绝PREH上的更新。访问用户所有表?

或者,是否有可能将过程作为“SA”执行,然后给予用户模拟权限我想要访问的用户可以这样做吗?

回答

0

有几种方法可以做到这一点。

  1. 授予他们在模式或数据库级别的CONTROL权限。请注意,这是针对大多数意图和目的的所有权,因此具有在授予级别更改,删除等的能力
  2. 使用证书为您的过程签名,从所述证书中创建用户,授予适当的权限(参见上文)发给证书用户,最后授予程序权限给任何你想运行它的人。这有一个好处,就是让用户只做你为他们制作的东西,而不用把钥匙交给城堡。但它确实带来了复杂性的代价。