启用“ CLR集成”是仅服务器/实例级别的选项;每个数据库不能单独处理它。
但是,虽然我不确定为什么要针对每个数据库处理此问题很重要,但是您始终可以DENY CREATE ASSEMBLY
在不希望使用自定义SQLCLR代码的数据库中使用。
更新
我刚刚进行了测试DENY CREATE ASSEMBLY TO [Public];
,这对于sysadmin
固定服务器角色成员的登录名无效。因此,另一种有效拒绝某项操作的权限的方法是通过DDL触发器捕获该操作并发出aROLLBACK
来取消该操作。
以下是一个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
:
消息50000,级别16,状态1,过程PreventCreateAssembly,第59行
无法创建或更改程序集!
消息3609,级别16,状态2,第54行
事务在触发器中结束。该批次已中止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句