服务器配置:clr strict security
适用范围:SQL Server
控制 SQL Server 中 SAFE
、EXTERNAL_ACCESS
或 UNSAFE
权限的解释。 有关这些权限的详细信息,请参阅设计程序集。
值 | 说明 |
---|---|
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 security
将 SAFE
和 EXTERNAL_ACCESS
程序集视为已标记为 UNSAFE
。
建议使用证书或非对称密钥对所有程序集进行签名,且该证书或非对称密钥具有已在 UNSAFE ASSEMBLY
数据库中获得 master
权限的相应登录名。 SQL Server 管理员还可以将程序集添加到数据库引擎应信任的程序集列表。 有关详细信息,请参阅 sys.sp_add_trusted_assembly。
备注
启用时,CREATE ASSEMBLY
和 ALTER 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