Sql server 如何仅为Microsoft SQL Server中的特定数据库启用CLR集成?
默认情况下禁用。我对启用它的理解意味着对整个服务器启用或禁用它。是否可以在每个数据库的基础上启用它?如果是,如何启用?启用“CLR集成”是服务器/实例级别的唯一选项;不能对每个数据库单独处理它 但是,虽然我不确定为什么在每个数据库的基础上处理这个问题,但您可以始终在不希望使用自定义SQLCLR代码的数据库中拒绝创建程序集 更新 我刚刚测试了Sql server 如何仅为Microsoft SQL Server中的特定数据库启用CLR集成?,sql-server,sqlclr,Sql Server,Sqlclr,默认情况下禁用。我对启用它的理解意味着对整个服务器启用或禁用它。是否可以在每个数据库的基础上启用它?如果是,如何启用?启用“CLR集成”是服务器/实例级别的唯一选项;不能对每个数据库单独处理它 但是,虽然我不确定为什么在每个数据库的基础上处理这个问题,但您可以始终在不希望使用自定义SQLCLR代码的数据库中拒绝创建程序集 更新 我刚刚测试了DENY CREATE ASSEMBLY TO[Public]这不适用于属于sysadmin固定服务器角色成员的登录。因此,另一种有效地拒绝对某个操作的权限的
DENY CREATE ASSEMBLY TO[Public]
这不适用于属于sysadmin
固定服务器角色成员的登录。因此,另一种有效地拒绝对某个操作的权限的方法是通过捕获该操作,并发出一个回滚
,该回滚将取消该操作
以下是一个DDL触发器,它可以在创建它的任何数据库中工作,并捕获CREATE ASSEMBLY
和ALTER ASSEMBLY
语句,但仍然允许拖放ASSEMBLY
(使用DDL\u ASSEMBLY\u EVENTS
,因为事件组将不允许所有三个操作):
使用[db_name];
去
创建触发器[PreventCreateAssembly]
关于数据库
在ALTER_ASSEMBLY之后,创建_ASSEMBLY--DDL_ASSEMBLY_事件
作为
RAISERROR(N'无法创建或更改程序集!',16,1);
回降;
去
有了这个DDL触发器,当我尝试创建程序集时,我现在收到以下错误,即使我的登录名是sysadmin
:
Msg 50000,16级,状态1,程序装配,第59行无法创建或更改程序集
Msg 3609,16级,状态2,第54行
事务在触发器中结束。批处理已中止
不,这是一个实例级选项。没有为特定数据库启用触发器的选项。的可能重复。当然,这不会阻止sysadmin角色的登录禁用触发器,但如果这是您遇到的问题,则您的问题不再是技术问题。@BaconBits True and True。但是,没有办法真正阻止系统管理员做任何事情:打开/关闭“CLR集成”或重新授予
创建程序集
,如果这样做有效的话。我认为这样做的好处是,至少可以防止像自动卷展脚本(作为sysadmin
运行)这样的事情,如果只拒绝向公众创建程序集,则允许这样做。