|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
Всем здравствуйте! Прошу сильно не кидаться какахами, по форуму порыскал, но в голове не сложилось картинки как решить мою проблему. В sql умею только пожалуй на уровне запросов, а сейчас вот приходится погружаться глубже... Суть проблемы: Есть хранимая процедура, которую я запускаю через ssms, запуская его от имени доменного пользователя windows, аутентификация по входу в вин соответственно. Процедура внутри ссылается на другие, в том числе и на системные sp_addlinkedserver и тд. Для остальных операций в базе используется авторизация через логин пароль, которой я пользуюсь в том числе и программно в Python, но при попытке запуска этой процедуры вылетает следующее: OLE DB provider "MSOLAP" for linked server "D9A60797-B376-40F1-8D98-FA6BC8F2C248" returned message "Произошла ошибка на уровне транспорта.". OLE DB provider "MSOLAP" for linked server "D9A60797-B376-40F1-8D98-FA6BC8F2C248" returned message "Узел преждевременно завершил подключение.". Msg 7303, Level 16, State 1, Line 3 Cannot initialize the data source object of OLE DB provider "MSOLAP" for linked server "D9A60797-B376-40F1-8D98-FA6BC8F2C248" Как то можно победить эту проблему и в python запускать эту процедуру? Я думаю точно можно, но не совсем понимаю, что мне нужно для этого сделать... Можно какими-то широкими мазками обозначит путь решения этой проблемы) Скрипт, который должен это запускать, крутится на сервере linux (возможно, это тоже важно). Спасибо заранее за помощь и уделённое время! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 11:04 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
3akapym, Почему используете драйвер для olap? Как выглядит скрипт pt из которого запускается процедура? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 12:12 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
felix_ff, 1. Насколько я понимаю, результаты работы процедуры затем доступны из excel, возможно поэтому и драйвер... Но я опять же не совсем понимаю, как это все устроено, может быть неправильно понял. Процедуру данную писал не я, я занимаюсь тем, что заполняю нужные для ее работы таблицы из различных источников. И вот надо бы сделать так, чтобы эту процедуру с некоторыми параметрами запускали пользователи, для которых все это разрабатывается, через кнопочку на нашей инфосистеме, а не дергали меня для запуска как сейчас, sql они не владеют от слова совсем)) 2. Скрипт в python я пока не писал, лишь пробовал запускать процедуру из ssms от этих же логина и пароля, которые использую в python для работы. Думаю, примерно будет выглядеть это все вот так: Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 13:12 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
3akapym, Если судить по ошибке 7303: У вас хранимка имеет код который пытается писать информацию на удаленный сервер (в данном случае excel файл). Если у вас линк-сервер создается внутри хранимки то параметры создания - "в студию". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 15:01 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
felix_ff, спасибо за ответы) Внутри основной процедуры запускается другая, которая как я понимаю и вылетает с ошибкой, код привожу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 10:30 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
3akapym, первое: что прилетает в параметр @srv к этой процедуре на момент вызова? второе: какая то очень странная конструкция запроса после этого улетает на линкованный сервер Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 15:53 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
felix_ff 3akapym, первое: что прилетает в параметр @srv к этой процедуре на момент вызова? второе: какая то очень странная конструкция запроса после этого улетает на линкованный сервер Код: sql 1.
Этот код запускает полное обновление OLAP куба на прилинкованной машине. Но походу в коде ошибка, попробуйте вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
И проверьте есть ли права на базу данных master у учетки выполняющей запрос. В крайнем случае добавьте в код Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 20:21 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
felix_ff 3akapym, первое: что прилетает в параметр @srv к этой процедуре на момент вызова? второе: какая то очень странная конструкция запроса после этого улетает на линкованный сервер Код: sql 1.
@srv - имя сервера, на котором хранится и процедура и все данные По поводу второго вообще не могу ничего сказать, в этом колдунстве я не разбираюсь. Похоже на js Grim08, я ради эксперимента пересоздал основную процедуру (не ту, которую вы предлагаете модифицировать,а внешнюю), добавив туда Код: sql 1.
При ее запуске теперь вылетает следующее (1 row affected) Msg 15247, Level 16, State 1, Procedure sys.sp_MSaddserver_internal, Line 34 [Batch Start Line 2] User does not have permission to perform this action. Msg 15247, Level 16, State 1, Procedure sp_serveroption, Line 27 [Batch Start Line 2] User does not have permission to perform this action. Msg 7202, Level 11, State 2, Line 3 Could not find server '4D7AEC10-23E7-4310-8F6A-D635A585E5DE' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers. Msg 15247, Level 16, State 1, Procedure sp_dropserver, Line 20 [Batch Start Line 2] User does not have permission to perform this action. Msg 15274, Level 16, State 1, Line 3 Access to the remote server is denied because the current security context is not trusted. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 10:39 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
3akapym, Простите, не подумал и вас запутал. Владельце вашей процедуры является схема "dbo" в базе данных, но для создания linked server нужны права на уровне сервера, поэтому использовать Код: sql 1.
не получится. Вот этот код запускает процессинг OLAP куба: Код: sql 1.
Ошибка в том что пользователь который запускает данный код не имеет доступ к OLAP кубу. Также учтите что подключение к службам SSAS можно только под Windows Autentification другого не дано. Для решения вашей проблемы или для тестирования можете добавить пользователя, который имеет доступ после команды создания linked server Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Но лучше получите доступ для того пользователя, который запускает эту процедуру ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 15:08 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
3akapym, все догнал, я думал что вы линк сервер создаете к excel файлику, а у вас там подключение к SSAS; WITH EXECUTE AS OWNER в данном случае использовать нельзя потому что контекст запуска будет EXECUTE AS USER и вам не хватит прав уровня сервера для создания динамического линкед сервера. а вообще для начала надо проверить вообще тот хост на котором у вас кубы живой вообще? проходят ли ICMP, открыт ли порт 2383? что выдает команда? setspn -L <имя сервера OLAP> если живой то можете для начала явно вручную создать линк на OLAP сервер без процедуры, и протестировать свой запрос, а уже потом разбираться с динамическим созданием. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 15:17 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
Честно я бы не стал использовать такой подход. 1. Полный процессинг куба может быть временно затратным 2. В процедуре предусмотрен механизм создания нескольких прилинкованных серверов, поэтому там и ГУИД и динамически запрос, но запустить 2 процессинга куба не получится. Поэтому лучше уж создать прилинкованный именованный сервер. 3. Странно что процессинг происходит из внешних приложений по запросу, лучше подумать про процессинг ежедневный или часовой все зависит от потребности, но чтобы данные были готовы к их использованию ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 15:49 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
Grim08 Ошибка в том что пользователь который запускает данный код не имеет доступ к OLAP кубу. Также учтите что подключение к службам SSAS можно только под Windows Autentification другого не дано. Для решения вашей проблемы или для тестирования можете добавить пользователя, который имеет доступ после команды создания linked server Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Но лучше получите доступ для того пользователя, который запускает эту процедуру Да я покопался и понял, что создать сервер пользователь может а вот выполнить команду внутри нет) Я правильно понимаю, что команда обновления куба не выполнится без windows authentication? Можно ли как то это реализовать посредством консольных утилит в linux? Без питона, просто сбацать bash-скрипт, который запустит то, что нужно... В прошлый мой заход к этой проблеме, я научился делать этой командой из винды: runas /netonly /user: <юзер> "sqlcmd -S <сервер> -d <база>" Вот думаю может что то подобное можно провернуть и на сервере... Дело в том, что этот расчет в кубе, должен проводиться, когда данные для него все собраны. А это делается частично вручную и не по времени, поэтому автоматический запуск здесь неуместен: нужно каким-то образом сделать возможность запуска извне в любое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 16:22 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
Я думаю ваш подход имеет место быть, только учтите что для подключения под определенным пользователем должна быть виндовая авторизация. Я не знаю зачем такой сложный процесс, но может проще создать джоб обновления и выдать учетке агента доступ в куб, а потом уже при помощи T-SQL дергать джобу? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2021, 16:28 |
|
Права пользователя и запуск хранимой процедуры
|
|||
---|---|---|---|
#18+
Grim08 Я думаю ваш подход имеет место быть, только учтите что для подключения под определенным пользователем должна быть виндовая авторизация. Я не знаю зачем такой сложный процесс, но может проще создать джоб обновления и выдать учетке агента доступ в куб, а потом уже при помощи T-SQL дергать джобу? Кажется, такой способ пробовал мой коллега: создавал джобу под виндовой авторизацией, и потом пытался ее дергать под рабочей учеткой без win_auth, и как бы нифига... Или нужно дать этой второй рабочей учетке доступ в куб? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2021, 09:09 |
|
|
start [/forum/topic.php?fid=46&fpage=35&tid=1685123]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 179ms |
0 / 0 |