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

Откуда:
Сообщений: 13
Добрый вечер!
Перекопал много чего, но так ничего и не получилось.
Переносили базу на новый сервер, после чего выдает такую ошибку обращение к функции:

Msg 10314, Level 16, State 11, Line 1
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65536. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:
System.IO.FileLoadException: Could not load file or assembly 'regexmatch, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
System.IO.FileLoadException:
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString).

Доверительное стоит ON, CLR Integration - enable, логин восстановил. В принципе создал и исправил все как и в прошлой базе.

Все равно не получилось ничего. Подскажите пожалуйста, что я мог забыть или не сделать по не знанию.
25 ноя 09, 19:05    [7978944]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
Karmah
Member

Откуда:
Сообщений: 13
Если кто-нибудь сможет напишите пжл...
25 ноя 09, 22:48    [7979429]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Было чего-то такое... Владельца БД попробуйте на sa поменять.
25 ноя 09, 23:18    [7979519]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
слоненок
Member

Откуда:
Сообщений: 479
Karmah, ну так библиотеку тоже надо было перенести.
26 ноя 09, 00:08    [7979697]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
слоненок
Member

Откуда:
Сообщений: 479
Karmah, нужна ли вам вообще эта функция? IMHO - не нужна.
26 ноя 09, 00:25    [7979739]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
Karmah
Member

Откуда:
Сообщений: 13
Ray_D спасибо, очень помогло.
26 ноя 09, 12:56    [7981858]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
Karmah
Member

Откуда:
Сообщений: 13
слоненок.
1. Разве вместе с бэкапом не переносится тело CLR функций.
2. CLR использовались для написания функций для работы с регулярными выражениями.
26 ноя 09, 12:59    [7981880]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
Karmah
1. Разве вместе с бэкапом не переносится тело CLR функций.
Да, тело CLR хранится в БД, никакие доп. файлы не нужны.
26 ноя 09, 14:18    [7982617]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
слоненок
Member

Откуда:
Сообщений: 479
автор
1. Разве вместе с бэкапом не переносится тело CLR функций.

То, что код clr является неотъемлемой частью БД я упустил, каюсь :(.
автор
2. CLR использовались для написания функций для работы с регулярными выражениями.
ну флаг вам в руки ...
26 ноя 09, 15:08    [7983009]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
f1xedd
Member

Откуда:
Сообщений: 1
а можно вдогонку похожий вопрос -
System.Data.SqlClient.SqlException: Error 100000, Message: "Error 10314, Message: "Ошибка Microsoft .NET Framework при попытке загрузить сборку с идентификатором 65563. Возможно, на сервере заканчиваются ресурсы, либо для сборки не установлено доверие при помощи PERMISSION_SET = EXTERNAL_ACCESS или UNSAFE. Повторите запрос или обратитесь к документации за рекомендациями по решению проблем с доверием для сборок. Дополнительные сведения об этой ошибке:
System.IO.FileLoadException: Невозможно загрузить файл или сборку "sql_clr_utilities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Произошла ошибка, связанная с безопасностью. (Исключение из HRESULT: 0x8013150A)
System.IO.FileLoadException:
в System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
в System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
в System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
в System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
в System.Reflection.Assembly.Load(String assemblyString)
", Level 16, State 11, Procedure spAPP_utlProcessBOMByOlnIDParametricItemsProcessor, Line 92", Level 16, State 1, Procedure spAPP_utlSQLErrorHandler, Line 22
Внимание! Значение NULL исключено в статистических или других операциях SET.
в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

и так далее - смена собственника не помогла, права у сборки - вообще unrestricted,
беда в том что при переводе в trustworthy on база перестает видеть нужную службу на сервере. как победить - подскажите пожалуйста..
16 июл 10, 19:24    [9118506]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Assembly  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
как решается эта проблема?
такая же фигня.
Перенесли базу, в одной таблице не обновляются поля, ошибка такая же .
Другие таблицы обновляются
Владельца бд менял,
TRUSTWORTHY включал

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
19 июн 14, 10:41    [16187455]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
сборка 65536 это системная сборка microsoft.sqlserver.types, version=10.0.0.0,
если посмотреть вьюшку
SELECT * from sys.dm_clr_loaded_assemblies
на источники базы данных она загружена, на новом нет.
Это все на одном сервере, только разные инстансы.
Делал рестарт сервера, уменьшил распределение памяти, делал бекап и снова восстановил бд, все равно нет её в загруженных.

Пересоздал таблицу, на которой нет обновления, после этого обновление таблицы прошло, но сборка не загружена.
Думаю и на других таблицах может это возникнуть, хотя до этого некоторые таблицы обновлялись.
19 июн 14, 11:25    [16187808]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Assembly  [new]
GlassMorre
Member

Откуда:
Сообщений: 111
некро, конечно, но *мат* до сих пор жизненно.


сид дбошника поменялся. и если код цлрный вызывается из другой бд впервые - новый сид из нового инстанса не может запустить цлрку. а если из приаттаченной\ восстановленной загружается - то загрузится успешно и будет работать до тех пор, пока сборщик мусора не обнаружит, что сборка не используется и не выгрузит ее. То есть до конца рабочего дня. А потом как повезет, из контекста какого дбошника кто первым запустит. проверяется битый сид легко. запуск из восстановленной бд екзекьют аз дбо и екзекьют аз контекст дбо. Если в первом случае любой запрос крашится - у вас битый сид дбошника в бд. Помимо включения на новом инстансе самой цлрки потребуется еще принудительно отобрать овнерство у битого сида.

ALTER DATABASE [myDB] SET TRUSTWORTHY ON
EXEC sp_changedbowner ‘sa’
ALTER AUTHORIZATION ON DATABASE::mydb TO sa;

Пляска с бубном вокруг да около помогла. С ужасом жду завтрашнего дня...
8 июл 15, 15:21    [17867924]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
GlassMorre
Member

Откуда:
Сообщений: 111
ссылко на мсдн
8 июл 15, 15:25    [17867947]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
UNSAFE CLR сборку для теста я взял отсюда 17785946

Сначала на сервере 1 создаем базу db1 с CLR сборкой и PERMISSION_SET = UNSAFE

:connect WH01\SQLSRV2014

use master;
go

-- Публичный ключ из asymmetric key pair, приватным ключем из которой была подписана UNSAFE CLR-сборка
create asymmetric key __RegexWrapper from file = 'C:\temp\unsafe\RegexWrapperPublicKey.snk';
go

create login __RegexWrapper from asymmetric key __RegexWrapper;
go

grant unsafe assembly to __RegexWrapper;
go

create database db1;
go

 /* !!! OFF !!! */ alter database db1 set trustworthy off; /* !!! OFF !!! */
go


В базе db1 развертываем сборку UNSAFE сборку выполняя скрипт regex-install-unsafe-v2-18.06.2015.sql (взять можно отсюда 17785946)

-- Тестируем
use db1;
go

select ext.Regex_IsMatch(N'test', N't', null) res;
go



res
-----
1

(1 row(s) affected)

Бэкапим базу для переноса на другой сервер

backup database db1 to disk = N'c:\temp\db1.bak'
go


Восстанавливаем базу db1 на другом сервере

:connect WH01\SQLSRV2014EXPR

use master;
go

restore database db1 from disk = N'c:\temp\db1.bak'
with
	move N'db1' to N'D:\databases\MSSQL12.SQLSRV2014EXPR\MSSQL\DATA\db1.mdf',
	move N'db1_log' to N'D:\databases\MSSQL12.SQLSRV2014EXPR\MSSQL\DATA\db1_log.mdf'
go

 /* !!! OFF !!! */ alter database db1 set trustworthy off; /* !!! OFF !!! */
go


-- Тестируем
use db1;
go

select ext.Regex_IsMatch(N'test', N't', null) res;
go




Msg 10314, Level 16, State 11, Line 64
...
The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or
UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues.
...

For more information about this error:
System.IO.FileLoadException: Could not load file or assembly 'regexwrapper_v2, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=e5fc3c1ab9762e96' or one of its dependencies. An error relating
to security occurred. (Exception from HRESULT: 0x8013150A)

...


Забыли раздать права (логин с правами и публичный ключ из asymmetric key pair остался на предыдущем сервере, на этом его нет)


use master;
go

-- Публичный ключ из asymmetric key pair, приватным ключем из которой была подписана UNSAFE CLR-сборка
create asymmetric key __RegexWrapper from file = 'C:\temp\unsafe\RegexWrapperPublicKey.snk';
go

create login __RegexWrapper from asymmetric key __RegexWrapper;
go

grant unsafe assembly to __RegexWrapper;
go



-- Тестируем
use db1;
go

select ext.Regex_IsMatch(N'test', N't', null) res;
go



res
-----
1

(1 row(s) affected)
8 июл 15, 20:58    [17869435]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
GlassMorre
ссылко на мсдн


ссылка ужасная
8 июл 15, 21:01    [17869440]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Костыль

-- Что если публичного ключа из asymmetric key pair нет.
-- Есть только восстановленная база со UNSAFE сборкой.
-- Нужно вытащить publik key из UNSAFE сборки, хранящейся в базе и создать его в базе master,
-- чтобы потом создать дле publik key логин и раздат ему права.

-- Если для сервера уже настроен FILESTREAM, то можно поступить так:

-- Создаем временную базу drop_me и FileTable в ней
create database drop_me;
go

use drop_me;
go

alter database drop_me set filestream (non_transacted_access = read_only)
go
alter database drop_me set filestream (directory_name = N'fs')
go
alter database drop_me add filegroup drop_me_fs_fg contains filestream 
go
alter database drop_me add file 
( 
	name = N'drop_me_fs_fg_f', 
	filename = N'D:\databases\MSSQL12.SQLSRV2014EXPR\MSSQL\DATA\drop_me' 
) to filegroup drop_me_fs_fg
go

create table dbo.download_assemblies as filetable
with
( 
    filetable_directory = 'download_assemblies',
    filetable_collate_filename = database_default
);
go

-- Выгружаем из базы db1 UNSAFE сборку в FileTabe в базе drop_me
use db1;
go

insert into drop_me.dbo.download_assemblies(name, file_stream)
select
	af.name, af.content
from
	sys.assemblies a
		inner join
	sys.assembly_files af on a.assembly_id = af.assembly_id
where
	a.name = 'RegexWrapper_v2'
go

-- Теперь сборка лежит на файловой системе (см. рис.) и можно создать из нее public key в базе master
use master;
go

create asymmetric key __RegexWrapper from executable file = N'\\wh01\SQLSRV2014EXPR\fs\download_assemblies\RegexWrapper_v2'
go

-- Чистим за собой
drop database drop_me;
go


В интернетах есть сбособ выгрузки через OLE ADODB.Stream

К сообщению приложен файл. Размер - 15Kb
8 июл 15, 22:19    [17869666]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
GlassMorre
Member

Откуда:
Сообщений: 111
Увы и ах. Не в этом дело. На восстановленной бд убил сборку и задеплоил из проекта. Та же фигня, только обращение из контекста ДБО восстановленной бд может загрузить сборку. Загрузка сборки из контекста другой базы невозможна, хотя роль ДБО у вызывающего полльзователя прописана. При этом, уже загруженную сборку использовать он может. Трусворсти он, авторизейшн стоит от СА, овнершип тоже СА. Даже не знаю, что делать. Пару раз в день приходиться загружать сборку от СА, чтоб пользователи могли работать. Сами они запустить проект не могут.
14 июл 15, 09:32    [17888651]     Ответить | Цитировать Сообщить модератору
 Re: Assembly  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
GlassMorre
Увы и ах. Не в этом дело. На восстановленной бд убил сборку и задеплоил из проекта. Та же фигня, только обращение из контекста ДБО восстановленной бд может загрузить сборку. Загрузка сборки из контекста другой базы невозможна, хотя роль ДБО у вызывающего полльзователя прописана. При этом, уже загруженную сборку использовать он может. Трусворсти он, авторизейшн стоит от СА, овнершип тоже СА. Даже не знаю, что делать. Пару раз в день приходиться загружать сборку от СА, чтоб пользователи могли работать. Сами они запустить проект не могут.


У вас CLR Assembly в одной базе, вызывающий код в другой базе? Так раздайте права вызывающему коду через сертификат.
14 июл 15, 09:43    [17888695]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить