Я хочу скопировать базу данных с помощью скрипта сборки в RDS. В одной хранимой процедуре есть команда создания сборки. Я не могу создать эту процедуру, потому что она говорит: «Отказано в доступе». Я администратор, но у меня нет прав sys_admin, так как это невозможно в RDS.
Я создал экземпляр AWS-RDS с версией SQL Server Enterprise. Я подключился из своей локальной MS SQL Management Studio. Я запускаю сценарий создания процедуры.
Это похоже на сценарий, который я запускал.
USE [master]
GO
CREATE DATABASE [xxx]
GO
ALTER DATABASE [xxx] SET COMPATIBILITY_LEVEL = 130
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [xxx].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
CREATE ASSEMBLY [xxx_clr]
FROM 0x4...
WITH PERMISSION_SET = SAFE
GO
-- error will appear here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CREATE PROCEDURE [pm].[xxx_SP]
@srcTblName [nvarchar](4000),
etc..
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [xxx_clr].[xxxCLR].[xxxMain]
GO
Есть ли способ сделать обходной путь для создания сборки на RDS?
Разрешает ли Amazon RDS SQLCLR вообще? Даже Azure SQL не позволяет этого
Доко говорит нет. Там действительно не так много больше. docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… Действительно ли необходимо делать в сборке все, что нужно? Если сложно (требуются другие сборки, общение с внешними сервисами), то все равно не получится. Если это не сложно, вы можете просто построить его в SQL
Я попытался создать сборку на пользовательской базе данных. Я получил следующую ошибку: Msg 10343, уровень 14, состояние 1, строка 415 CREATE или ALTER ASSEMBLY для сборки «function_xxxx_clr» с параметром SAFE или EXTERNAL_ACCESS не удалось, поскольку для параметра sp_configure «clr strict security» установлено значение 1. Microsoft рекомендует что вы подписываете сборку сертификатом или асимметричным ключом, имеющим соответствующий логин с разрешением UNSAFE ASSEMBLY. Кроме того, вы можете доверять сборке, используя хранимую процедуру sp_add_trusted_assembly.
К сожалению, необходимо создать сборку. Действия, предложенные в сообщении об ошибке, выполнить невозможно, так как у меня нет прав sys_admin.





Инструкции CREATE ASSEMBLY больше невозможны в RDS, начиная с SQL Server 2017, поскольку значение группы параметров clr strict security DB по умолчанию равно 0 и не может быть переопределено. Внесение сборки в белый список с использованием sp_add_trusted_assembly также невозможно, поскольку для выполнения инструкции необходимы права системного администратора.
Единственным другим подходом к достижению этого в AWS было бы
(1) Создайте экземпляр SQL Server на EC2, чтобы предоставить пользователю БД неограниченные привилегии.
(2) Попытаться использовать экземпляр RDS SQL Server более ранней версии, чем версия 2017. Возможно, вам потребуется подписать сборку.
В этом сообщение подробно описаны некоторые последствия обновлений параметров clr strict security в SQL Server 2017.
(2) было решением. Подписывать сборку не нужно. Включите CLR, и он отлично работает.
Опубликованный вами сценарий попытается создать сборку в базе данных master. Вы пытались добавить оператор
USEдля своей базы данных пользователей?