Я использую выпуск 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.
Перейти к Ценным бумагам >> Логины
Щелкните правой кнопкой мыши пользователя и свойства
Перейти к сопоставлениям пользователей
Выберите имя базы данных
и назначить разрешение
сделано