0

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

4

1 回答 1

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
于 2012-10-21T10:10:00.013 回答