如何授予对所有SQL表的更改权限的访问权限?

时间:2014-06-19 22:23:33

标签: sql sql-server permissions impersonation procedure

请参阅以下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 ['+@Tbl+'] ('+@Fld+') TO [MCCOSKERS\ViewPoint Production Users]'

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

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

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

exec sp_executesql @sql

我可以在SQL(作为SA)中完美地执行此过程,但我想让它在名为Viewpoint Construction Software的应用程序中运行。

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

当我从Viewpoint运行时,我收到一条错误消息,说"找不到对象' PREH' "

仅供参考:" PREH"是输入Viewpoint的表。

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

或者,是否可以执行以下过程:" SA"然后为我想要访问的用户提供冒充权限吗?

1 个答案:

答案 0 :(得分:0)

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

  1. 在架构或数据库级别授予CONTROL权限。请注意,这是出于大多数意图和目的的所有权,因此可以在授予的级别更改,删除等。
  2. 使用证书签署您的程序,从所述证书创建用户,向证书用户授予适当的权限(见上文),最后向您想要运行它的任何人授予该程序的权限。这样做的好处是让您的用户只做您为他们制作的东西,而不会泄露城堡的钥匙。但它确实带来了复杂性的成本。