Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запуск процедуры от имени / 14 сообщений из 14, страница 1 из 1
22.05.2018, 18:54
    #39648279
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
Здравствуйте!
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. У меня достаточно прав для выполнения всех необходимых операций.. теперь мне нужно сделать так, чтобы пользователь с меньшими правами мог получить возможность запустить процедуру и получить результат, но я не могу дать ему доступ ко всем таблицам из процедуры... я хочу, чтобы он запустил процедуру а внутри она использовала права логина который создал процедуру...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
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', после получения данных из удаленного сервера
...
Рейтинг: 0 / 0
22.05.2018, 18:55
    #39648280
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
выходит ошибка:
Не удалось выполнить в качестве сервера-участника, поскольку участник "uuu" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.

Помогите пожалуйста разобраться в чем дело и как я могу достичь указанной цели?
спасибо
...
Рейтинг: 0 / 0
22.05.2018, 19:03
    #39648288
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
SandistСерверу-участнику "uuu" не удалось обратиться к базе данных "ttt" в текущем контексте безопасности."uuu" это ваш [srv-sql03]?
...
Рейтинг: 0 / 0
22.05.2018, 19:37
    #39648301
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
SandistПомогите пожалуйста разобраться в чем дело и как я могу достичь указанной цели?
спасибо

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


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

Как только ты осознаешь свет этих простых истин - жисть станент легше, жисть станет веселей.
...
Рейтинг: 0 / 0
23.05.2018, 09:14
    #39648420
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
aleks222,

жаль нет тут смайла фейспалм... удаленный сервер выдает результат как надо... с ним проблем нет... как раз текущий сервер мозги делает [srv-sql03] - это удаленный сервер... после него уже начинаются проблемы...
мне кажется должен быть какой-то механизм... кто имеет знания в этих вопросах помогите пожалуйста
...
Рейтинг: 0 / 0
23.05.2018, 09:15
    #39648421
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
Дедушка,
uuu - это логин
ttt - база данных
...
Рейтинг: 0 / 0
23.05.2018, 09:41
    #39648436
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
Sandistaleks222,

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

С таким мутным потоком сознания вам следует переквалифицироваться в управдомы.
...
Рейтинг: 0 / 0
23.05.2018, 09:52
    #39648441
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
aleks222,

это не относится к теме моего вопроса
...
Рейтинг: 0 / 0
23.05.2018, 09:56
    #39648445
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
aleks222Sandistaleks222,

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

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

Что во вкладке security linked servera?
...
Рейтинг: 0 / 0
23.05.2018, 10:01
    #39648450
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
TaPaK,
я видимо неправильно сформулировал вопрос
суть в том, что я могу вообще не использовать linked server, пусть все данные лежат на одном сервере, все равно я не могу получить нужный результат, система выдает ошибку:
...
Рейтинг: 0 / 0
23.05.2018, 10:04
    #39648453
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
SandistTaPaK,
я видимо неправильно сформулировал вопрос
суть в том, что я могу вообще не использовать linked server, пусть все данные лежат на одном сервере, все равно я не могу получить нужный результат, система выдает ошибку:
database chaining
...
Рейтинг: 0 / 0
23.05.2018, 10:04
    #39648454
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
Sandist,

Серверу-участнику "uuu" не удалось обратиться к базе данных "IES" в текущем контексте безопасности.
когда я логинюсь к серверу от имени uuu, то процедура отрабатывает, когда пишу внутри with execute as 'uuu', логинюсь через учетку mon и пробую запустить процедуру, получаю вышеуказанную ошибку...
насчет удаленного сервера я написал на всякий случай, вдруг это на что влияет... ну да ладно с ним, его я уберу из процедуры, как на текущем сервере получить нужны результат
...
Рейтинг: 0 / 0
23.05.2018, 10:10
    #39648464
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
TaPaK,
спасибо большое, идею я понял, попробую поменять этот параметр
...
Рейтинг: 0 / 0
23.05.2018, 16:36
    #39648879
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры от имени
Sandist,
По итогу решил создать пару представлений (в которых ограничил набор) и дал доступ на select этим представлениям
вдруг кому пригодится
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запуск процедуры от имени / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]