Доступ к хранимым процедурам при отсутствии доступа к таблице - PullRequest
2 голосов
/ 18 марта 2011

Все,

Может ли хранимая процедура (запускаемая пользователем) в SQL Server записывать в таблицу, где у пользователя нет доступа для записи непосредственно в таблицу?

Ргдс,

МК

Ответы [ 3 ]

9 голосов
/ 18 марта 2011

Правильный ответ: НЕТ , хранимая процедура не имеет доступа для записи в таблицу.Однако большинство пользователей неправильно воспринимают это как ДА из-за цепочек владения :

Когда несколько объектов базы данных последовательно обращаются друг к другу, последовательность называется цепочкой.Хотя такие цепочки не существуют независимо, когда SQL Server пересекает ссылки в цепочке, SQL Server оценивает разрешения для составляющих объектов иначе, чем если бы он обращался к объектам по отдельности.Эти различия имеют важное значение для управления безопасностью.Цепочка владения позволяет управлять доступом к нескольким объектам, таким как несколько таблиц, путем установки разрешений для одного объекта, такого как представление.

Таким образом, процедура сможет записывать в таблицу, что у пользователя нет прав на запись в , если они образуют цепочку владения .Это означает, что если владелец схемы, содержащей таблицу, совпадает с владельцем схемы, содержащей процедуру, формируется цепочка владения, и процедуре разрешается запись в таблицу.Поскольку подавляющее большинство объектов, развернутых на практике, относятся к схеме dbo, цепочка владения почти всегда формируется.

Важно понимать эти детали, чтобы вы могли устранять неполадки и понимать , почему - процедура, разрешенная для записи в таблицу.Erland Sommarskog имеет отличную исчерпывающую информацию по этой теме: Предоставление разрешений с помощью хранимых процедур .Эта статья подробно описывает все доступные варианты.Ваш лучший вариант, намного лучше, чем цепочка владения, - подпись кода .

Понимание того, как это работает, также помогает понять, почему динамический SQL кажется «ломающимся»: запуск динамического SQL - это автоматический разрывцепочка владения, которая заставляет исчезать всю «магию».И это также помогает понять, почему эта «магия», по-видимому, не работает вне базы данных: кросс-цепочка владения дБ Опция значение по умолчанию равно 0.

0 голосов
/ 18 марта 2011

Короче, да.

Основное ограничение в этом сценарии - может ли пользователь выполнить хранимую процедуру.


Когда создает хранимую процедуру, ее необходимо выполнить с помощью логина / пользователя, который имеет необходимые права на запись в данную таблицу.

0 голосов
/ 18 марта 2011

Да, если пользователю предоставлены разрешения EXEC на SP, любые действия, которые он предпринимает (в этой базе данных), разрешены.

Переход к другой базе данных потребует проверки прав на базового пользователя.

Кроме того, динамический SQL, встроенный в SP, потребует, чтобы базовый пользователь имел разрешения.

...