AWS RDS(SQL Server)上的Create Assembly被拒绝。有解决方法吗?

时间:2019-05-31 10:11:04

标签: sql-server amazon-web-services amazon-rds

我想使用构建脚本将数据库复制到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上创建装配?

1 个答案:

答案 0 :(得分:0)

从SQL Server 2017开始,在RDS中不再可以使用

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设置更新的某些含义。