我想使用构建脚本将数据库复制到RDS。在一个存储过程中,有一个create assembly命令。我无法创建此过程,因为它显示“权限被拒绝”。我是管理员,但我没有'sys_admin'权限,因为在RDS中是不可能的。
我用SQL Server Enterprise版本创建了一个AWS-RDS实例。我从本地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上创建装配?
答案 0 :(得分:0)
CREATE ASSEMBLY语句,因为clr strict security
DB参数组值默认设置为0,并且不能被覆盖。使用sp_add_trusted_assembly
进行程序集白名单也是不可能的,因为执行该语句需要sysadmin特权。
在AWS内实现此目标的唯一其他方法是
(1)在EC2上创建一个SQL Server实例,以授予DB用户不受约束的特权。
(2)尝试使用2017版之前的RDS SQL Server实例。您可能需要在程序集上签名。
此post详细介绍了SQL Server 2017中clr strict security
设置更新的某些含义。