В разрешении SELECT на объекте отказано - PullRequest
2 голосов
/ 05 декабря 2008

Если в SqlServer создана пользовательская роль, которую я добавил в роли db__denydatareader и db__denydatawriter. Я думаю, прошел через базу данных и предоставил разрешение exec всем необходимым хранимым процедурам.

Все работает нормально, вызов этих sps будет работать нормально. Единственным исключением является хранимая процедура, которая выполняет динамический sql с помощью sp_executesql. Это не говорит,

The SELECT permission was denied on the object 'listing_counter', database 'Cannla', schema 'dbo'.

Есть ли способ предоставить роли разрешение на выполнение этого запроса, не предоставляя ему выборочный доступ к базовым таблицам?

Я думаю, что я хочу сделать, это предоставить exec для sys.sp_executesql, но только в определенном случае.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2008

Вы можете создать нового пользователя только для вашей хранимой процедуры, которая использует execute_sql, предоставить ему необходимые права и затем добавить к определению процедуры WITH EXECUTE AS 'MyUser'. См. MSDN.

0 голосов
/ 05 декабря 2008

Используйте для этого следующее утверждение. У меня это сработало.

sp_addlinkedserver [@ server =] 'сервер' [, [@ srvproduct =] 'product_name'] [, [@ provider =] 'имя_поставщика']

 [ , [ @datasrc= ] 'data_source' ] 
 [ , [ @location= ] 'location' ] 
 [ , [ @provstr= ] 'provider_string' ] 
 [ , [ @catalog= ] 'catalog' ] 
...