Вопрос:
У меня возникают проблемы с выполнением функции…
Вот что я сделал:
- создать функцию, используя студию управления сервером sql. он был успешно создан.
- Затем я попытался выполнить вновь созданную функцию, и вот что я получу:
Разрешение EXECUTE было отклонено объект “xxxxxxx”, база данных ‘zzzzzzz’, схема ‘dbo’.
Ответ №1
Похоже, вам нужно предоставить разрешение на выполнение для пользователя (или группы, частью которой они являются) для хранимой процедуры.
Например, вы можете предоставить доступ таким образом:
USE zzzzzzz; GRANT EXEC ON dbo.xxxxxxx TO PUBLIC Ответ №2
Лучшее решение, которое я нашел, – создать новую роль базы данных i.e.
CREATE ROLE db_executor;
а затем предоставить разрешение на выполнение роли.
GRANT EXECUTE TO db_executor;
Теперь, когда вы переходите к свойствам пользователя и переходите к пользовательскому сопоставлению и выбираете базу данных, в которой вы добавили новую роль, теперь новая роль будет видна в членстве в роли базы данных для: section
Подробнее читайте в полной статье
Ответ №3
В сервере Sql:
просто перейдите к security->schema->dbo.
Дважды щелкните dbo, затем нажмите permission tab->(blue font)view database permission и не стесняйтесь прокручивать требуемые поля, такие как «execute». Помогите себе выбрать с помощью элементов управления grant или deny. Надеюсь, это поможет:)
Ответ №4
вам нужно запустить что-то вроде этого
GRANT Execute ON [dbo].fnc_whatEver TO [domainuser] Ответ №5
Это будет работать, если вы пытаетесь предоставить разрешение пользователям или ролям.
Использование Microsoft SQL Server Management Studio:
- Перейти к: Базы данных
- Щелкните правой кнопкой мыши на dbo.my_database
- Выберите: Свойства
- На левой боковой панели нажмите “Разрешения”
- Выберите пользователя или роль и в панели имен
- Найти Выполнить в разрешениях и галочке: Грант, С Грантом или Отклонить
Ответ №6
Вы не имеете права его исполнять, хотя у вас достаточно прав для его создания.
Для получения дополнительной информации см. Разрешения объекта GRANT (Transact-SQL)
Ответ №7
Предоставление такого разрешения может быть опасным, особенно если ваше веб-приложение использует это же имя пользователя.
Теперь веб-пользователь (и вся всемирная сеть) также имеет разрешение на создание и удаление объектов в вашей базе данных. Подумайте, SQL Injection!
Я рекомендую предоставить привилегии Execute только конкретному пользователю на данном объекте следующим образом:
выполнить execute на storedProcedureNameNoquotes в myusernameNoquotes
Теперь пользователь myusernameNoquotes может выполнять процедуру storedProcedureNameNoquotes без других ненужных разрешений на ваши ценные данные.
Ответ №8
У меня возникла одна и та же проблема, и я решил разрешить db_owner также пользователю базы данных.
Ответ №9
Если у вас есть такие проблемы, как вопрос, заданный выше в отношении исключения, возникшего при выполнении решения, проблема заключается в разрешении, не предоставляемом надлежащим образом пользователям этой группы для доступа к базе данных/хранимой процедуре. Все, что вам нужно сделать, это сделать что-то вроде того, что у меня есть ниже, заменив мое имя базы данных, хранимые процедуры (функции) и тип разрешения или роли или кто вы предоставляете доступ.
USE [StableEmployee] GO GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC
/****** Объект: StoredProcedure [dbo]. [GetAllEmployees] Script Дата: 01/27/2016 16:27:27 ******/
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[GetAllEmployees] as Begin Select EmployeeId, Name, Gender, City, DepartmentId From tblEmployee End Ответ №10
Если вы сделаете этого пользователя особенным для конкретной базы данных, возможно, вы не установите его как db_owner в “сопоставлении пользователей” свойств
Ответ №11
Вы можете дать всем разрешение на выполнение:
GRANT Execute on [dbo].your_object to [public]
“Public” – это роль базы данных по умолчанию, в которую входят все пользователи.