Дозвіл EXECUTE відмовлено для визначених користувачем типів таблиць?


87

У мене запитання про типи користувацьких таблиць у SQL Server 2008.

Для потреби одного з додатків ASP.NET ми визначили наші власні типи таблиць на SQL Server 2008, щоб використовувати їх як параметри в збережених процедурах (під час виконання команди sql у програмі ASP.NET ми передаємо об'єкт DataTable як параметр для збереженої процедури див. тут приклад )

Проблема полягає в тому, що коли ми запускаємо команду Sql (виконуємо збережену процедуру) з ASP.NET, ми отримуємо помилку:

У дозвілі EXECUTE відмовлено об’єкту „ourTableType”, базі даних „ourDatabase”, схемі „ourSchema”.

Чому це так? Чому нам потрібно встановлювати дозвіл на користувацькі типи таблиць? Чому недостатньо встановити дозвіл лише на збережену процедуру, яка його використовує? І якщо у нас немає , щоб встановити його незалежно від того, чому немає EXECUTEтипу дозволу на набір у вікні властивостей взагалі (я можу бачити тільки Control, References, Take Ownership, View Definition)?

Я також не розумію, що встановлення дозволу Controlу вікні властивостей вирішує проблему, а збережена процедура працює без проблем.



Дякую! Я шукав, але явно недостатньо хороший: /
Janez

Спробуйте поставити AS dboв кінці. Як це: GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo. Працював у мене.
Джонатан

Відповіді:


197

Я дуже сподіваюся, що ви вирішили це дотепер, оскільки питанню вже майже 4 місяці, але якщо ви цього ще не зробили, ось що, на мою думку, є відповіддю.

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO

9
Мої 2 центи: Залежно від вашого механізму автентифікації з’єднання, можливо, вам доведеться надати exec загальнодоступній групі. Отже, ваш грант буде виглядати так: GRANT EXEC ON TYPE :: [schema]. [Typename] TO [Public] GO
Sudhanshu Mishra

@dotnetguy щиро дякую, жодне з рішень не працювало для мене, крім вашого.
Mazen el Senih

3

Якщо ваша збережена процедура використовує динамічний sql, тобто @sqlгенерується, а потім виконується через exec @sql, вам знадобиться дозвіл, наданий на базові таблиці.

Одне навколо - це змінити збережену процедуру, щоб вона працювала як інший користувач . Якщо ви змусите його працювати як САМ, він буде запущений під творцем збереженого процесу, що надзвичайно небезпечно. І все ж, якщо у вас немає іншого варіанту:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF

1
Thx за вказівку на це. Але збережена процедура не містить динамічного sql. Тільки загальні INSERT INTOоператори та таблиці «UPDATE», для яких цей користувач має всі необхідні дозволи. Крім того, цей користувач / логін спеціально зарезервований / створений для цієї програми ASP.NET, щоб мати можливість підключатися до цієї бази даних і виконувати лише збережені процедури (не створювати тощо, завжди є творець 'sa').
Janez

Дякую, це була проблема для мене. Інші читачі з цією проблемою можуть звернутися до отримати додаткові підказки щодо дозволів SQL Server на збережені документи з динамічним SQL .
Ніколай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.