Як надати дозвіл на виконання однієї збереженої процедури?


40

Як правило, коли я створюю збережену процедуру, я використовую наступне як шаблон сортування

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

 <procedure>

end

Чи є спосіб включити надання дозволу на виконання тільки на цю збережену процедуру, поки я в ній?
Наприклад, як ...

Grant execute [User_Execute] 

... але тільки для цієї збереженої процедури?

Я бачив деякі інші подібні запитання, але, схоже, всі вони стосуються ВСІХ збережених процедур, а не лише одного, і я не бачив жодного, де ви можете вказати дозволи всередині create procedureсценарію. Навіть відповіді про те, як я можу встановлювати дозволи без GUI для конкретних збережених процедур, буде вітатися.

Редагувати Верхня відповідь, безумовно, спрямовувала мене в правильному напрямку, це, по суті, те, що я шукав, я не думав про створення команд, що я в кінцевому підсумку робив, пробираючи команду разом із моєю збереженою процедурою. У всякому разі, я думаю, що це досить гладко.

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

<procedure>

end
GO
GRANT EXECUTE ON <procedurename> to <username>
GO

Код, наданий в редагованому тексті, є дійсним і правильна відповідь на це питання.
ninty9notout

Відповіді:



10

обрізання таблиці Налаштування дозволу на такі об'єкти, як збережені процедури, можна виконати за допомогою:

GRANT EXECUTE ON <schema>.<object> to <user>;

Однак ви також можете надати права безпеки як на рівні входу, так і на рівні користувача. Ви хочете визначити та надати ТІЛЬКИ необхідні права для об’єктів, які потребують доступу (наприклад, виконання). Розглянемо можливість використання EXECUTE ASможливості, яка дозволяє імпортувати іншого користувача для підтвердження дозволів, необхідних для виконання коду БЕЗ необхідності надання всіх необхідних прав усім базовим об'єктам (наприклад, таблиць). EXECUTE ASможе бути додано до збережених процедур, функцій, тригерів тощо.

Додайте до коду наступним чином прямо у Збереженій процедурі:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER

У цьому випадку ви видаєте себе за власника виклику власника модуля. Ви також можете себе представити САМО, АБО користувачеві, що створює або змінює модуль АБО ... імпонірує CALLER, що дозволить модулю приймати дозволи поточного користувача, АБО ... видавати себе за власного власника, який візьме на себе дозвіл Власник процедури називається АБО ... імперсоніфікований "ім'я користувача", який буде представляти себе конкретним користувачем АБО ... видати себе "ім'ям входу", буде представляти певний логін.

Найбільш часу вам потрібно буде надати EXECUTEправа лише на збережені програми, а потім надаються права на всі об'єкти, на які посилається в збереженій програмі.

Таким чином, НІ НЕ потрібно давати неявні права (наприклад: оновлювати дані або викликати додаткові документи). Ланцюжок власності вирішує це за вас. Це особливо корисно для динамічного sql або якщо вам потрібно створити підвищені завдання безпеки, такі як CREATE TABLE. EXECUTE ASє зручним інструментом для розгляду цих питань.

Цей приклад може допомогти уточнити все це:

Створіть користувача під назвою NoPrivUser з відкритим доступом до бази даних (наприклад, dbadb):

USE [master];
GO 
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb], 
  CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO 
USE [DBAdb];
GO 
CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser];
GO

ПРИМІТКА: СТВОРИТЕЛЬ АБО ВЛАСНИК ЦЬОГО ПРОЦЕДУРИ ЗАБЕЗПЕЧУЄТЬСЯ СТВОРИТИ ПРАВА ТАБЛИЦІ в цільовій базі даних.

use DBAdb 
go 
CREATE PROCEDURE dbo.MyProcedure 
WITH EXECUTE AS OWNER 

truncate table MyTable

GO
GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; 
GO
-- Now log into your database server as NoPrivUser and run the following.

За допомогою EXECUTE ASпункту збережена процедура запускається в контексті власника об'єкта. Цей код успішно створюється, dbo.MyTableа рядки успішно вставляються. У цьому прикладі користувач NoPrivUserабсолютно не надає прав на модифікацію таблиці, читання чи зміни будь-яких даних цієї таблиці.

Він лише бере на себе права, необхідні для виконання цього конкретного завдання, закодованого в контексті цієї процедури.

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


4
Це та сама відповідь, яку ви опублікували вчора в ТА , яку я також повинен був відформатувати для читання.
Аарон Бертран

5

введіть тут опис зображення

виберіть вхід у базу даних -> Перейдіть до Securable та натисніть кнопку Пошук, як на попередньому зображенні. Натиснувши кнопку Пошук, ви побачите наступне вікно, щоб додати тип об’єкта.

Натисніть кнопку "Типи об'єктів", і ви отримаєте вікно "Вибрати типи об'єктів" з різними об'єктами. Тепер якщо ви бачите, збережена процедура перелічена в області типів об'єктів. Тепер ми виберемо нашу конкретну збережену процедуру, на яку хочемо надати дозвіл.


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