SQL Server: проблема с синонимом для каждого пользователя, созданного хранимой процедурой

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

Рабочие процессы работают с таблицей синонимов.

Работает для входа администратора.

Проблема: если пользователь выполняет Calc, синонимом будет Domain/Username.S, а рабочий процесс, который обращается к S, не находит Domain/username.S

Если администратор создал синоним, он называется dbo.S, а рабочие работают только с доступом к S.

Как рабочие хранимые процедуры могут получить доступ к синониму, созданному пользователем, который вызвал Calc? Чтобы пользователи X могли вызывать Calc и работать с разными таблицами S, но использовать одни и те же рабочие процессы.

Заранее спасибо, надеюсь мне кто-нибудь поможет.

Среда: SQL Server 2008 Предоставленные права пользователя: Создать синоним


person Lakedaimon    schedule 05.07.2011    source источник
comment
Я РЕШИЛ проблему с некрасивым РЕШЕНИЕМ. Таблица синонимов была удалена, и теперь Calc получает имя таблицы в качестве параметра, который передается рабочему процессу. Теперь они будут использовать динамический SQL для работы с переданной таблицей. Теперь это хорошо, как синонимы, но это работает.   -  person Lakedaimon    schedule 07.07.2011


Ответы (1)


Используйте префикс схемы при создании calc, выполнении calc, создании S и вызове S. Или убедитесь, что все ваши пользователи имеют доступ к одной и той же схеме по умолчанию. Но я предпочитаю первое.

person Aaron Bertrand    schedule 05.07.2011
comment
Префикс схемы зависит от исполняющего пользователя calc. Итак, как рабочий процесс может узнать этот префикс для вызова prefix.S ? - person Lakedaimon; 05.07.2011
comment
Если вы создаете dbo.Calc, то пользователь вызывает dbo.Calc. Вы хотите сказать, что у вас есть несколько копий Calc с разными схемами? - person Aaron Bertrand; 05.07.2011
comment
Одна копия Calc, которая создает разные копии S. User1: exec Calc -> user1.S создан worker должен работать над этим User2: exec Calc -> user2.S создан worker Calc должен работать над этим - person Lakedaimon; 05.07.2011