授予用户对extended_properties的访问权限,而不是VIEW DEFINITION

时间:2012-10-21 10:10:00

标签: sql-server

在注意到似乎没有人回答这个问题之后,我提出了一个适合我的解决方案。所以这是一个答案,而不是一个问题。

1 个答案:

答案 0 :(得分:0)

通常,要授予用户访问扩展属性的权限,您必须执行以下操作:

GRANT VIEW DEFINITION ON DATABASE::XDB TO AUSER
GRANT SELECT on sys.extended_properties to AUSER

但这意味着用户还可以查看所有源代码SP的功能等。我们不希望这样!现在,除了其他问题,我想要做的是允许用户(AUSER)看到一些扩展属性,但没有让他们能够查看源代码。

创建一个可以执行此操作的非登录用户:

CREATE USER EXTPROP WITHOUT LOGIN
GRANT VIEW DEFINITION ON DATABASE::XDB TO EXTPROP;
GRANT SELECT on sys.extended_properties to EXTPROP
-- use master
-- go
-- GRANT IMPERSONATE on LOGIN::EXTPROP TO AUSER

现在创建一个AUSER可以执行的功能。

CREATE PROCEDURE ShowVersion
WITH EXECUTE AS 'EXTPROP'
AS
select * from sys.extended_properties
where class_desc = 'DATABASE' and name = 'version'

GRANT EXECUTE ON ShowVersion to AUSER

要测试,请以AUSER身份登录SSMS并执行以下命令:

exec showversion -- returns result
select suser_sname() -- returns AUSER (no need to REVERT)
select * from sys.extended_properties  
where class_desc = 'DATABASE' and name = 'version' -- returns no rows