Назад | Перейти на главную страницу

Как предоставить роли базы данных разрешения на выполнение схемы? Что я делаю не так?

Я использую выпуск SQL Server 2008 Express.

Я создал логин, пользователя, роль и схему. Я сопоставил пользователя с логином и назначил пользователю роль.

Схема содержит ряд таблиц и хранимых процедур.

Я бы хотел, чтобы роль имела разрешения на выполнение для всей схемы.

Я попытался предоставить разрешение на выполнение через студию управления и путем ввода команды в окне запроса.

GRANT EXEC ON SCHEMA::schema_name TO role_name

Но когда я подключаюсь к базе данных с помощью студии управления SQL (в качестве логина, который я создал), сначала я не вижу хранимые процедуры, но, что более важно, я получаю ошибку отказа в разрешении при попытке их запустить.

Рассматриваемая хранимая процедура ничего не делает, кроме выбора данных из таблицы в той же схеме.

Я попытался создать хранимую процедуру со строкой и без нее:

WITH EXECUTE AS OWNER

Это не имеет значения.

Я подозреваю, что я допустил ошибку при создании схемы или где-то возникла проблема с правом собственности, но я действительно изо всех сил пытаюсь заставить что-то работать.

Единственный способ, которым мне удалось успешно выполнить хранимые процедуры, - это предоставить полномочия на управление роли, а также выполнение, но я не считаю, что это правильный и безопасный способ продолжения.

Любые предложения / комментарии будут очень признательны.

Спасибо.

Мне повезло со следующей техникой, приведенной ниже (с использованием схемы с именем "мысхема" для примера). Похоже, у вас есть большая часть элементов, но владение схемой / ролью может быть установлено неправильно.

-- 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.

Перейти к Ценным бумагам >> Логины

Щелкните правой кнопкой мыши пользователя и свойства

Перейти к сопоставлениям пользователей

Выберите имя базы данных

и назначить разрешение

сделано