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