У меня есть приложение, работающее в IIS, которое подключается к экземпляру SQL Server 2008 R2, используя встроенную проверку подлинности Windows. Это приложение выполняет простые операции чтения/записи в db с использованием набора хранимых процедур. Я могу ограничить привилегии на SQL-сервере достаточно хорошо для этой комбинации входа/пользователя.SQL Server повышенные разрешения со встроенным входом
Но для небольшого подмножества приложения мне нужны «повышенные»/более мощные разрешения в базе данных ... например, создание/удаление уведомления о событиях и, возможно, очереди и услуги брокера.
Так что в основном у меня есть один процесс с кодом, запущенным под той же учетной записью пользователя, который подключается к SQL-серверу, и мне нужны два разных набора привилегий ... одно соединение с очень ограниченными правами доступа, одно соединение с более мощными привилегиями.
Я бы хотел использовать проверку подлинности на основе Windows ... SQL-аутентификация с двумя комбинациями пользователей и паролей не является вариантом.
Есть ли рекомендуемый способ достижения этого?
- Олицетворение в коде приложения, подключение к SQL Server с помощью встроенной системы безопасности от олицетворенного контекста (другой пользователь учетной записи/входа SQL) не нравится, так как я должен управлять второй логин/пароль
- SQL роли приложений сервера (требует приложения при условии, пароль я считаю) - действительно не нравится, так как мне нужно хранить пароли
- проверки подлинности SQL с двумя пользователями - не вариант
- создайте выделенные хранимые процедуры для «повышенного материала» и используйте
execute as
(должно работать, однако, не уверен, могу ли я создавать хранимые процедуры в целевом db) - сложная идея: запустите процесс приложения, подключитесь к db, ограничьте приложение маркера, а затем открыть менее привилегированное соединение (будет работать?)
- использования COM + (a la Keith Brown's protocol transition), служба WCF или второй процесс для «повышенных» частей приложения (слишком сложных)
Я полагаю, что есть простое и аккуратное решение, которое мне не хватает ...
Вы упомянули, что у вас может не быть привилегии для создания процедур: вы создаете процедуру во время развертывания приложения (во время установки), потому что программа установки приемлемо для запуска из контекста повышенных привилегий. Если у вас нет настройки, вы создаете инструмент обеспечения, который необходимо запускать во время развертывания, для которого требуются более высокие привилегии, и который выполняет первоначальную процедуру развертывания. Если вы не можете этого сделать, это в основном означает, что вам не разрешено это делать, поэтому вам не следует начинать с этого. –
спасибо за ответ. Если имя очереди неизвестно заранее, есть ли способ создать его без использования динамического sql? У меня есть эта проблема для различных операторов сервис-брокера (большинство из которых нельзя параметризовать как подготовленные операторы/с SqlCommands). – 2010-07-07 09:16:54
Вам придется использовать динамический SQL (sp_executesql) –