CLR integration默认情况下禁用。我的理解instructions启用它意味着对整个服务器启用或禁用它。是否可以在每个数据库的基础上启用它?如果是这样,怎么办?
最佳答案
启用“CLR 集成”仅是服务器/实例级别的选项;它不能按数据库单独处理。
但是,虽然我不确定为什么在每个数据库的基础上处理这个问题很重要,但您始终可以在不希望使用自定义 SQLCLR 代码的数据库中DENY CREATE ASSEMBLY
。
更新
我刚刚测试了DENY CREATE ASSEMBLY TO [Public];
,这对于属于sysadmin
固定服务器角色成员的登录名不起作用。因此,有效拒绝某个操作权限的另一种方法是通过 DDL Trigger 捕获该操作。并发出 ROLLBACK
这将取消该操作。
以下是一个 DDL 触发器,它可以在创建它的任何数据库中工作,并捕获 CREATE ASSEMBLY
和 ALTER ASSEMBLY
语句,但仍然允许 DROP ASSEMBLY
(使用 DDL_ASSEMBLY_EVENTS
作为事件组将禁止所有这三个操作):
USE [db_name];
GO
CREATE TRIGGER [PreventCreateAssembly]
ON DATABASE
AFTER ALTER_ASSEMBLY, CREATE_ASSEMBLY -- DDL_ASSEMBLY_EVENTS
AS
RAISERROR(N'Cannot CREATE or ALTER Assemblies!', 16, 1);
ROLLBACK;
GO
使用此 DDL 触发器后,当我尝试创建程序集时,即使我的登录名是sysadmin
,我现在也会收到以下错误:
Msg 50000, Level 16, State 1, Procedure PreventCreateAssembly, Line 59
Cannot CREATE or ALTER Assemblies!
Msg 3609, Level 16, State 2, Line 54
The transaction ended in the trigger. The batch has been aborted.
关于sql-server - 如何为 Microsoft SQL Server 中的特定数据库启用 CLR 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37744725/