Подтвердить что ты не робот

Разрешение EXECUTE было отклонено на объекте "xxxxxxx", в базе данных "zzzzzzz", в схеме "dbo",

У меня возникают проблемы с выполнением функции...

Вот что я сделал:

  • создать функцию, используя студию управления сервером sql. он был успешно создан.
  • Затем я попытался выполнить вновь созданную функцию, и вот что я получу:

Разрешение EXECUTE было отклонено объект "xxxxxxx", база данных 'zzzzzzz', схема 'dbo'.

4b9b3361

Ответ 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 [domain\user]

Ответ 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" - это роль базы данных по умолчанию, в которую входят все пользователи.