обрізання таблиці Налаштування дозволу на такі об'єкти, як збережені процедури, можна виконати за допомогою:
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
абсолютно не надає прав на модифікацію таблиці, читання чи зміни будь-яких даних цієї таблиці.
Він лише бере на себе права, необхідні для виконання цього конкретного завдання, закодованого в контексті цієї процедури.
Цей метод створення збережених процедур, які можуть виконувати завдання, що вимагають підвищених прав на безпеку, не покладаючи їх на постійне призначення, є дуже корисним.