powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа CLR после восстановления резервной копии
5 сообщений из 5, страница 1 из 1
Работа CLR после восстановления резервной копии
    #40133706
SadJester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть боевой сервер под управлением MS SQL версии
Microsoft SQL Server 2017 (RTM-CU20) (KB4541283) - 14.0.3294.2 (X64) Mar 13 2020 14:53:45 Copyright (C) 2017 Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

В одной из баз есть CLR, которая работает с настройками Permission Set - Safe.

После восстановления этой БД на предбоевом сервере БД эта CLR отказывается работать в режиме Safe. При установке PERMISSION_SET = UNSAFE все заводится.

Версия предбоевого сервера:
Microsoft SQL Server 2017 (RTM-CU15) (KB4498951) - 14.0.3162.1 (X64) May 15 2019 19:14:30 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)

Вопрос в следующем. Как можно завести CLR с Permission Set - Safe после восстановления БД?
Хотя бы куда покопать для решения?

trustworthy на базе включен на обоих серверах.

ошибка возникающая при работе в Safe после восстановления бэкапа такая:
авторA .NET Framework error occurred during execution of user-defined routine or aggregate "SonicMQ::Receive(Internal)":
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(RuntimeAssembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet grantedSet, PermissionSet refusedSet, CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh, Object assemblyOrString, SecurityAction action, Boolean throwException)
at System.StubHelpers.StubHelpers.DemandPermission(IntPtr pNMD)
at Microsoft.Win32.NativeMethods.GetCurrentProcessId()
at System.Diagnostics.Process.GetCurrentProcess()
at Sonic.Client.Sys.SysTrace..ctor(Int32 level)
at Sonic.Client.Sys.SysObject..ctor(PackageConfig config)
at Sonic.Client.Jms.IO.JIOConnection..ctor(String id, Hashtable properties)
at Sonic.Client.Jms.Impl.Connection.computeRandomAndConnect(Int32[] factors, String[] brokers, Boolean enableRandomize, Hashtable connectionProperties)
at Sonic.Client.Jms.Impl.Connection..ctor(String brokerURL, String connectID, String username, String password, String clientID, Hashtable environment)
at Finam.SqlServer.SonicMQ.CreateConnection(SqlString connectionString)
at Finam.SqlServer.SonicMQ.Receive(SqlString connectionString, SqlString queueName, SqlInt32 count, SqlString messageSelector, SqlInt64 timeOut)
.
...
Рейтинг: 0 / 0
Работа CLR после восстановления резервной копии
    #40133721
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SadJester
После восстановления этой БД на предбоевом сервере БД эта CLR отказывается работать в режиме Safe. При установке PERMISSION_SET = UNSAFE все заводится.
https://docs.microsoft.com/en-us/troubleshoot/sql/admin/error-run-clr-object-create-assembly - не совсем то, но вдруг корни проблем выросли в одной кучке?
Попробуйте EXEC sp_changedbowner 'sa' на предбоевом сервере, ну или нужно устанавливать инстанс от того же пользователя.
...
Рейтинг: 0 / 0
Работа CLR после восстановления резервной копии
    #40133724
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SadJester
Есть боевой сервер под управлением MS SQL версии
Microsoft SQL Server 2017 (RTM-CU20) (KB4541283) - 14.0.3294.2 (X64) Mar 13 2020 14:53:45 Copyright (C) 2017 Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

В одной из баз есть CLR, которая работает с настройками Permission Set - Safe.

После восстановления этой БД на предбоевом сервере БД эта CLR отказывается работать в режиме Safe. При установке PERMISSION_SET = UNSAFE все заводится.

Версия предбоевого сервера:
Microsoft SQL Server 2017 (RTM-CU15) (KB4498951) - 14.0.3162.1 (X64) May 15 2019 19:14:30 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)

Вопрос в следующем. Как можно завести CLR с Permission Set - Safe после восстановления БД?
Хотя бы куда покопать для решения?

trustworthy на базе включен на обоих серверах.

ошибка возникающая при работе в Safe после восстановления бэкапа такая:
авторA .NET Framework error occurred during execution of user-defined routine or aggregate "SonicMQ::Receive(Internal)":
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(RuntimeAssembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet grantedSet, PermissionSet refusedSet, CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandleInternal rmh, Object assemblyOrString, SecurityAction action, Boolean throwException)
at System.StubHelpers.StubHelpers.DemandPermission(IntPtr pNMD)
at Microsoft.Win32.NativeMethods.GetCurrentProcessId()
at System.Diagnostics.Process.GetCurrentProcess()
at Sonic.Client.Sys.SysTrace..ctor(Int32 level)
at Sonic.Client.Sys.SysObject..ctor(PackageConfig config)
at Sonic.Client.Jms.IO.JIOConnection..ctor(String id, Hashtable properties)
at Sonic.Client.Jms.Impl.Connection.computeRandomAndConnect(Int32[] factors, String[] brokers, Boolean enableRandomize, Hashtable connectionProperties)
at Sonic.Client.Jms.Impl.Connection..ctor(String brokerURL, String connectID, String username, String password, String clientID, Hashtable environment)
at Finam.SqlServer.SonicMQ.CreateConnection(SqlString connectionString)
at Finam.SqlServer.SonicMQ.Receive(SqlString connectionString, SqlString queueName, SqlInt32 count, SqlString messageSelector, SqlInt64 timeOut)
.


Имхую:
1. trustworthy ON - совсем плохая практика, и, собственно, это используется, но это не требуется для SQLCLR
2. Зачем вам в данном случае SAFE?
3. Как написано выше - проверьте владельца, не помешает, но не исключено, что и не поможет.
...
Рейтинг: 0 / 0
Работа CLR после восстановления резервной копии
    #40133782
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SadJester,

что-то вы темните, сборки, которые подключаются к серверу
Finam.SqlServer.SonicMQ.CreateConnection(SqlString connectionString)
не могут быть safe.
Что можно сделать - это внесение сборки в список доверенных, кроме прочих вариантов предполагающих уровень доступа "небезопасный".
...
Рейтинг: 0 / 0
Работа CLR после восстановления резервной копии
    #40133795
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SadJester,

Может у Вас external_access?
Тогда почитайте тут .

Я делаю восстановление для сборок с external_access как то так:
Код: 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.
--1) Restore MyDb on another server:
restore database MyDB from disk = '....'
....

--2) Copy assembly to masterdb:
use MyDB; 
GO

select * from sys.assembly_files where name = 'myAssembly' --> copy byteы to clipboard

--2.1)  
use master
GO

--paste assembly bytes and create assembly:
create Assembly myAssembly_TEMP from  0x4D5A....

--3) configure secutity
CREATE ASYMMETRIC KEY Key_for_MyDB FROM ASSEMBLY myAssembly_TEMP

CREATE LOGIN [Login_for_my_DB] FROM ASYMMETRIC KEY Key_for_MyDB;

GRANT EXTERNAL ACCESS ASSEMBLY TO [Login_for_my_DB];

--4) 
drop assembly MyDB_TEMP

...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа CLR после восстановления резервной копии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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