В интеграционном проекте, где CRM-приложение являлось настольным клиентом к БД Microsoft SQL Server, а один из источников данных был MySQL, требовалось организовать выполнение запросов в БД-источнике по обращению из клиента CRM-приложения.

Предоставить доступ клиенту CRM-приложения к БД MySQL напрямую не представлялось возможным потому, что СУБД MySQL не поддерживает сквозную аутентификацию для Windows-пользователей (тех, кто запускает CRM-приложение).

Решено было: предоставить к MySQL доступ SQL Server-у, в котором настроить возможность Linked Server таким образом, что бы пользователи CRM-приложения обращались к этому Linked Server-у только через хранимые процедуры (ограничить возможность выполнения произвольных запросов).

Оказалось, что хранимые процедуры, объявленные WITH EXEC могут автоматически менять текущего пользователя БД (субъект безопасности уровня базы данных), но не логин (субъект безопасности уровня сервера). А Linked Server — объект уровня сервера. В итоге, невозможно, вызвав хранимую процедуру SQL Server, выполнить обращение к Linked Server из под кого-либо другого чем сам вызвавший пользователь.

Можно обращаться к Linked Server-у после олицетворения текущим логином пользователя CRM-приложения некоторого специального логина, имеющего доступ к Linked Server, используя EXECUTE AS LOGIN='..' (или SETUSER при определенных условиях), но предоставление права такого олицетворения CRM-пользователю лишает смысла ограничение доступа на уровне Linked Server-а (которое делается через сопоставление логинов) т.к. в этом случае любой логин MS SQL может в любой момент исполнить любой запрос от логина имеющего доступ.