Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
Здравствуйте!
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Я написал хранимую процедуру, которая получает данные из текущего сервера и из связанного сервера, затем данные объединятся и выводятся через select. У меня достаточно прав для выполнения всех необходимых операций.. теперь мне нужно сделать так, чтобы пользователь с меньшими правами мог получить возможность запустить процедуру и получить результат, но я не могу дать ему доступ ко всем таблицам из процедуры... я хочу, чтобы он запустил процедуру а внутри она использовала права логина который создал процедуру...

alter procedure sp_P 
        @dtB datetime = NULL
       ,@dtE datetime = NULL    
WITH EXECUTE AS Owner        
as

begin

if @dtB is null or @dtE is null
begin 
	SET @dtB = DATEADD(DAY,-1,CAST(GETDATE() as DATE))
	SET @dtE = CAST(GETDATE() as date)
end

declare @SQL varchar(max)   
SET @SQL = '
declare @dtB datetime = '''+REPLACE(CONVERT(varchar, @dtB, 120),'-','')+'''
       ,@dtE datetime = '''+REPLACE(CONVERT(varchar, @dtE, 120),'-','')+'''
       
select *
from table
'    
create table #table (id int)
insert into #table (id)
EXEC (@SQL) at [srv-sql03] 
select *
from #table o 
left join table2 (nolock) sms on  o.id=sms.id
end

Ну вот что-то типа этого

Когда не указываю WITH EXECUTE AS Owner
ошибка:
Серверу-участнику "uuu" не удалось обратиться к базе данных "ttt" в текущем контексте безопасности.

Когда же указываю
ошибка:
Доступ к удаленному серверу запрещен, поскольку текущий контекст безопасности не является доверенным.

Когда же пишу EECUTE AS LOGIN = 'LOGIN', после получения данных из удаленного сервера
22 май 18, 18:54    [21430264]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
выходит ошибка:
Не удалось выполнить в качестве сервера-участника, поскольку участник "uuu" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.

Помогите пожалуйста разобраться в чем дело и как я могу достичь указанной цели?
спасибо
22 май 18, 18:55    [21430268]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Sandist
Серверу-участнику "uuu" не удалось обратиться к базе данных "ttt" в текущем контексте безопасности.
"uuu" это ваш [srv-sql03]?
22 май 18, 19:03    [21430296]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
aleks222
Member

Откуда:
Сообщений: 850
Sandist
Помогите пожалуйста разобраться в чем дело и как я могу достичь указанной цели?
спасибо


1. Осознать, что даже если ты объявишь себя "путиным" - все прочие не обязаны тебе верить.
2. Точно так же и удаленный сервер клал на твой
EXECUTE AS LOGIN = 'LOGIN'

3. EXECUTE AS действует только в пределах ЭТОГО сервера.
4. Другой сервер спросит: "Ваш мандат?"

Как только ты осознаешь свет этих простых истин - жисть станент легше, жисть станет веселей.
22 май 18, 19:37    [21430345]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
aleks222,

жаль нет тут смайла фейспалм... удаленный сервер выдает результат как надо... с ним проблем нет... как раз текущий сервер мозги делает [srv-sql03] - это удаленный сервер... после него уже начинаются проблемы...
мне кажется должен быть какой-то механизм... кто имеет знания в этих вопросах помогите пожалуйста
23 май 18, 09:14    [21431064]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
Дедушка,
uuu - это логин
ttt - база данных
23 май 18, 09:15    [21431065]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
aleks222
Member

Откуда:
Сообщений: 850
Sandist
aleks222,

жаль нет тут смайла фейспалм... удаленный сервер выдает результат как надо... с ним проблем нет... как раз текущий сервер мозги делает [srv-sql03] - это удаленный сервер... после него уже начинаются проблемы...
мне кажется должен быть какой-то механизм... кто имеет знания в этих вопросах помогите пожалуйста


С таким мутным потоком сознания вам следует переквалифицироваться в управдомы.
23 май 18, 09:41    [21431109]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
aleks222,

это не относится к теме моего вопроса
23 май 18, 09:52    [21431129]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
aleks222
Sandist
aleks222,

жаль нет тут смайла фейспалм... удаленный сервер выдает результат как надо... с ним проблем нет... как раз текущий сервер мозги делает [srv-sql03] - это удаленный сервер... после него уже начинаются проблемы...
мне кажется должен быть какой-то механизм... кто имеет знания в этих вопросах помогите пожалуйста


С таким мутным потоком сознания вам следует переквалифицироваться в управдомы.

в точках зашифровано чот-то

Что во вкладке security linked servera?
23 май 18, 09:56    [21431139]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,
я видимо неправильно сформулировал вопрос
суть в том, что я могу вообще не использовать linked server, пусть все данные лежат на одном сервере, все равно я не могу получить нужный результат, система выдает ошибку:
23 май 18, 10:01    [21431153]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Sandist
TaPaK,
я видимо неправильно сформулировал вопрос
суть в том, что я могу вообще не использовать linked server, пусть все данные лежат на одном сервере, все равно я не могу получить нужный результат, система выдает ошибку:

database chaining
23 май 18, 10:04    [21431162]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
Sandist,

Серверу-участнику "uuu" не удалось обратиться к базе данных "IES" в текущем контексте безопасности.
когда я логинюсь к серверу от имени uuu, то процедура отрабатывает, когда пишу внутри with execute as 'uuu', логинюсь через учетку mon и пробую запустить процедуру, получаю вышеуказанную ошибку...
насчет удаленного сервера я написал на всякий случай, вдруг это на что влияет... ну да ладно с ним, его я уберу из процедуры, как на текущем сервере получить нужны результат
23 май 18, 10:04    [21431163]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,
спасибо большое, идею я понял, попробую поменять этот параметр
23 май 18, 10:10    [21431183]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры от имени  [new]
Sandist
Member

Откуда:
Сообщений: 397
Sandist,
По итогу решил создать пару представлений (в которых ограничил набор) и дал доступ на select этим представлениям
вдруг кому пригодится
23 май 18, 16:36    [21433170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить