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 に答える