|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.06.2011, 10:51 | #1 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Проблемы с EXECUTE AS
Здравствуйте.
Пытаюсь запустить одну хранимую процедуру с делегированными правами при помощи EXECUTE AS, но мне постоянно возвращается ошибка: "Серверу-участнику "sa" не удалось обратиться к базе данных "Archive" в текущем контексте безопасности." Дело в том, что я пытаюсь в этой процедуре (назовём её sp_Test) сделать селект из другой БД. Для этого я создал логин и пользователя в первой (рабочей) БД и дал ему право на выполнение sp_Test. Вот её текст: Код:
Серверу-участнику "test_user" не удалось обратиться к базе данных "OuterBase" в текущем контексте безопасности. Теперь создаю логин db_master и пользователей в обе БД с такими же именами, и назначаю им роли db_owner. Если залогиниться под db_master, то sp_Test выполняется нормально - значит права есть. Но если добавить в sp_Test строчку execute as user = 'db_master', то выполнение этой процедуры из-под любого пользователя завершается ошибкой: Серверу-участнику "db_master"(!прошу обратить внимание!) не удалось обратиться к базе данных "OuterBase" в текущем контексте безопасности. Что я неправильно делаю? |
14.06.2011, 11:03 | #2 |
220400
Форумчанин
Регистрация: 21.05.2010
Сообщений: 726
|
дать права на вызов процедуры пользователю
GRANT EXECUTE ON [sp_Test] TO test_user потом вызывать execute as user = 'test_user' источник 1, 2
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам. Не учите человека, если вы не его учитель. |
14.06.2011, 11:35 | #3 | |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Цитата:
Но суть проблемы заключается в том, что я хочу настроить для test_user права доступа на одну (рабочую) бд в которой дам ему права на исполнение хранимых процедур, а уж эти процедуры бы обращались к любым таблицам любых баз данных используя права владельцев этих БД. Такое, вообще, возможно? |
|
21.09.2018, 19:59 | #4 |
Регистрация: 21.09.2018
Сообщений: 3
|
Greek9000, приветствую.
Понимаю, что дела давно минувших дней, но может ты нашёл решение в конце концов? Бьюсь уже бог знает сколько времени - всё перепробовал, не выходит ничего. У меня точно такая же ситуация, только но ХП, а тригер и он не читает из соседней БД, а пишет в неё. Вот вроде есть дока MS-овская про эту ошибку: https://docs.microsoft.com/ru-ru/sql...ql-server-2017 Но бесполезно всё... |
21.09.2018, 21:06 | #5 | |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Цитата:
У меня была задача перенести данные из одной БД в другую, при условии, что структура таблиц в целевой БД достаточно сильно отличалась от исходной Кажется, пришлось написать для этого сервис который подключался к обеим базам и переносил данные из одной в другую по следующей схеме: в оригинальной БД подготавливается представление со структурой соответствующей таблице целевой БД, а сервис - это простая программа выполняющая селект из этой вьюхи и как есть вставляющая результат в целевую таблицу Но если задача такая, что надо обязательно подключиться из-под СУБД, то вместо EXECUTE AS стоит попробовать межсерверное подключение - sp_addlinkedserver. Эта функция создает подключение к заданной БД на удаленном сервере. Естественно, сервер может быть не удаленным, а текущим. |
|
24.09.2018, 18:25 | #6 |
Регистрация: 21.09.2018
Сообщений: 3
|
Спасибо.
Обидно, что не работает самый прямой и простой вариант, обходные манёвры приходится применять. И главное - по документации судя, всё должно работать, ан нет... У меня вообще ситуация такая, что 2 БД на одном сервере постоянно синхронизируют между собой кое-какие данные через триггера. И пока вся работа идёт под логином с серверной ролью sysadmin (и без применения EXECUTE AS) всё работает. Но вот встала задача ограничить права для безопасности и столкнулся с тем, что MS SQL работает не так, как описано в документации. А это вообще-то довольно странно (что MS SQL работает не по документации), и я вот думаю: может опция какая-то есть хитрая, которая за это отвечает... |
24.09.2018, 20:18 | #7 |
Регистрация: 21.09.2018
Сообщений: 3
|
А, всё - разобрался...
Действительно Свойство базы данных TRUSTWORTHY: ставишь ON в обоих БД и всё работает как написано. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
не выполняется opendialog1.Execute | virtuhay266 | Общие вопросы Delphi | 2 | 09.01.2011 00:06 |
не выполняется opendialog1.Execute | virtuhay266 | Помощь студентам | 9 | 08.01.2011 22:12 |
Инструкция Execute | Desha | Microsoft Office Access | 6 | 10.06.2010 20:11 |
Ошибка при OpenDialog.Execute | ymka2 | Общие вопросы Delphi | 10 | 27.11.2009 14:15 |
Проблема с фкнкцией Execute | rocky7 | Общие вопросы C/C++ | 0 | 01.03.2009 16:42 |