服务器配置:clr strict security

适用范围:SQL Server

控制 SQL Server 中 SAFEEXTERNAL_ACCESSUNSAFE 权限的解释。 有关这些权限的详细信息,请参阅设计程序集

说明
0 “禁用”。 提供该列是为了向后兼容。 不建议将此值设置为 0
1 已启用。 导致数据库引擎忽略程序集上的 PERMISSION_SET 信息,并始终将其解释为 UNSAFE。 在 SQL Server 2017 (14.x) 及更高版本中,1 是默认值。

不再支持代码访问安全性

CLR 在 .NET Framework 中使用代码访问安全性 (CAS)(不可再作为安全边界)。 使用 PERMISSION_SET = SAFE 创建的 CLR 程序集可以访问外部系统资源、调用非托管代码以及获取 sysadmin 特权。 在 SQL Server 2017 (14.x) 及更高版本中,clr strict securitySAFEEXTERNAL_ACCESS 程序集视为已标记为 UNSAFE

建议使用证书或非对称密钥对所有程序集进行签名,且该证书或非对称密钥具有已在 UNSAFE ASSEMBLY 数据库中获得 master 权限的相应登录名。 SQL Server 管理员还可以将程序集添加到数据库引擎应信任的程序集列表。 有关详细信息,请参阅 sys.sp_add_trusted_assembly

备注

启用时,CREATE ASSEMBLYALTER ASSEMBLY 语句中的 PERMISSION_SET 选项在运行时将被忽略,但元数据中将保留 PERMISSION_SET 选项。 忽略此选项可最大程度减少中断现有代码语句。

CLR strict security 是一种 advanced option

启用严格安全性后,未签名的任何程序集都会加载失败。 必须修改或删除并重新创建每个程序集,以便使用在服务器上具有 UNSAFE ASSEMBLY 权限的相应登录名的证书或非对称密钥对其进行签名。

权限

更改此选项

要求具有 CONTROL SERVER 权限,或者具有 sysadmin 固定服务器角色的成员身份。

创建 CLR 程序集

启用 CLR strict security 时,创建 CLR 程序集需要以下权限:

  • 用户必须具有 CREATE ASSEMBLY 权限

  • 还必须满足以下条件之一:

    • 使用具有相应登录名(该登录名对应于服务器上的 UNSAFE ASSEMBLY 权限)的证书或非对称密钥对程序集进行签名。 建议对程序集进行签名。

    • 数据库的 TRUSTWORTHY 属性设置为 ON,且数据库由在服务器上具有 UNSAFE ASSEMBLY 权限的登录名所有。 不建议使用此选项。

示例

下面的示例首先显示 clr strict security 选项的当前设置,然后将选项值设置为 1(启用)。

EXEC sp_configure 'clr strict security';
GO
EXEC sp_configure 'clr strict security' , '1';
RECONFIGURE;
GO