Как дать разрешение на выполнение, но не просматривать хранимую процедуру на сервере SQL

Я являюсь разработчиком и хочу, чтобы мой администратор баз данных предоставил группе пользователей разрешения на выполнение хранимых процедур в схеме [Rptg] и просмотр результатов, но не смог просмотреть код t-sql в хранимой процедуре. Они будут использовать Azure Data Studio для подключения и выполнения хранимой процедуры. Должны ли мы сначала создать роль?

2 ответа

Решение

Вам определенно следует использовать роли. Чтобы убедиться, что участники роли не могут просматривать текст процедуры, вы можете добавить:

deny view permission on dbo.procx to role25;

отказать в разрешении на схему

DENY VIEW DEFINITION ON SCHEMA::Products  to role25;

В приведенном ниже примере предоставляются полномочия на выполнение роли в схеме Rptg. Члены этой роли по умолчанию не имеют VIEW DEFINION для этих хранимых процедур, как это было указано в комментарии @JeroenMostert.

CREATE ROLE RptgSchemaProcExecutor;
GRANT EXECUTE ON SCHEMA::Rptg TO RptgSchemaProcExecutor;

Вот пример сценария проверки.

CREATE USER ExampleUser WITHOUT LOGIN;
ALTER ROLE RptgSchemaProcExecutor
    ADD  MEMBER ExampleUser;
GO
EXECUTE AS USER = 'ExampleUser';
GO
--this will err with "There is no text for object 'Rptg.ExampleProc'."
EXECUTE sp_helptext  'Rptg.ExampleProc';
GO
REVERT;
GO
Другие вопросы по тегам