Сбой выполнения хранимой процедуры sql из-за разрешений для таблиц - PullRequest
1 голос
/ 23 июня 2010

Позвольте мне сначала объяснить контекст.

Две базы данных находятся на двух разных серверах в одной сети.Существует хранимая процедура, которая копирует данные из таблицы в одной базе данных в таблицу в другой базе данных (две базы данных имеют одинаковую структуру, но содержат разные данные).Пользователи не имеют прав доступа к таблицам напрямую (если только их роль не позволяет им делать это), только через хранимые процедуры.

Теперь проблема.

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

выдержка из документации msdn:

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

Почему тогда происходит сбой выполнения?Все таблицы имеют одного и того же владельца.

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Используете ли вы "OpenQuery" внутри процедуры? Попробуйте использовать полные имена, включая связанный сервер.

INSERT INTO Linked_Server.Database.schema.table_name Выберите .............

0 голосов
/ 23 июня 2010

У вас есть хранимая процедура, которая вставляет данные в таблицы на обоих серверах.Используете ли вы связанный сервер, и если у вас есть права доступа для выполнения вставки в таблицу через связанный сервер, а также разрешения для выполнения хранимой процедуры?

...