Как предоставить роли базы данных разрешения на выполнение для схемы? Что я делаю неправильно?
Я использую SQL Server 2008 Express Edition.
Я создал логин, пользователя, роль и схему. Я сопоставил пользователя с логином и назначил ему роль.
Схема содержит ряд таблиц и хранимых процедур.
Я бы хотел, чтобы у роли были разрешения на выполнение всей схемы.
Я попытался предоставить разрешение на выполнение через Management Studio и введя команду в окне запроса.
GRANT EXEC ON SCHEMA::schema_name TO role_name
Но когда я подключаюсь к базе данных, используя SQL Management Studio (в качестве созданного мной имени входа), во-первых, я не вижу хранимые процедуры, но, что более важно, я получаю ошибку отказа в разрешении при попытке запустить их.
Рассматриваемая хранимая процедура ничего не делает, кроме выбора данных из таблицы в той же схеме.
Я попытался создать хранимую процедуру с и без строки:
WITH EXECUTE AS OWNER
Это не имеет никакого значения.
Я подозреваю, что допустил ошибку при создании схемы, или где-то возникла проблема с правами собственности, но я действительно изо всех сил пытаюсь заставить что-то работать.
Единственный способ, которым мне удалось успешно выполнить хранимые процедуры, - это предоставить разрешения на управление роли, а также выполнить, но я не верю, что это правильный, безопасный способ продолжить.
Любые предложения / комментарии будут очень признательны.
Благодарю.
3 ответа
Мне повезло со следующей техникой ниже (используя схему с именем "myschema" в качестве примера). Похоже, что у вас есть большинство частей на месте, но схема / роль владельца могут быть установлены неправильно.
-- Create the role that will own the schema
CREATE ROLE [myschema_owner] AUTHORIZATION [dbo];
-- Create the role that will have execute permissions on the schema
CREATE ROLE [myschema_execute] AUTHORIZATION [dbo];
-- Create the schema owned by our role
CREATE SCHEMA [myschema] AUTHORIZATION [myschema_owner];
-- Assign execute permissions to execute role
GRANT SELECT, EXECUTE ON SCHEMA::[myschema] TO [myschema_execute];
Я не уверен, как ограничить это определенной схемой (хотя ваш синтаксис выглядит так, как будто он должен работать), но если допустимо иметь права на выполнение для всей базы данных, то сработает следующее, затем добавьте свой логин в роль, как Анкур описывает.
grant execute to <ROLE_NAME>
Кроме того, предоставление этой функции функции VIEW DEFINITION позволит войти в нее для просмотра хранимых процедур.
Откройте SQL Server Management Studio, используя логин SA или аутентификацию Windows
Перейти к Ценные бумаги >> Логины
Щелкните правой кнопкой мыши на пользователя и свойства
Перейти к сопоставлениям пользователей
Выберите имя базы данных
и назначить разрешение
сделанный