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