如何仅对Microsoft SQL Server中的特定数据库启用CLR集成?

郑澄

默认情况下,CLR集成是禁用的。我对启用它说明的理解意味着,它已在整个服务器上启用或禁用。是否可以基于每个数据库启用它?如果是这样,怎么办?

所罗门·鲁兹基

启用“ CLR集成”是仅服务器/实例级别的选项;每个数据库不能单独处理它。

但是,虽然我不确定为什么要针对每个数据库处理此问题很重要,但是您始终可以DENY CREATE ASSEMBLY在不希望使用自定义SQLCLR代码的数据库中使用。

更新

我刚刚进行了测试DENY CREATE ASSEMBLY TO [Public];,这对于sysadmin固定服务器角色成员的登录名无效因此,另一种有效拒绝某项操作的权限的方法是通过DDL触发器捕获该操作并发出aROLLBACK来取消该操作。

以下是一个DDL触发器,该触发器可以在创建该数据库的任何数据库中工作,并且陷阱CREATE ASSEMBLYALTER ASSEMBLY语句可以捕获,但是仍然允许DROP ASSEMBLYDDL_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server CLR:如何在数据库项目的CLR SQL存储过程中调用WCF服务

如何快速检查用户是否对SQL Server中的特定数据库具有写权限?

在特定数据库中创建SQL Server视图

如何使用SQL在Informix中列出特定数据库的模式?

如何在Presto中为SQL Server目录指定数据库?

跟踪Microsoft SQL Server数据库中的更改

如何从MS SQL数据库(Microsoft SQL Server)中的其他.sql文件运行.sql文件?

如何在 SQL Server 2017 中仅对树叶求和?

如何在Microsoft SQL Server 2014中创建本地数据库?

如何在Microsoft SQL Server Management Studio中更新数据库图

如何从SQL Server 2012中的数据库创建特定表的备份.bak文件?

如何在SQL Server数据库中查找特定列?

SQL Server:如何从数据库中的所有存储过程中找到特定值?

如何在MongoDB中启用特定数据库的性能分析

如何回滚SQL Server数据库中的数据?

如何获得在特定数据库上执行的最昂贵的SQL查询

如何在SQL Server数据库中应用dtplyr

如何检测我的SQL Server数据库中的更改

如何在SQL Server中连接Azure数据库

如何使用SQL Server中的隐藏数据库对象?

如何使用 Nifi 将 Azure DataLakeStorage 中的 .parquet 数据转储到 Microsoft SQL Server 数据库?

存储新数据库后如何删除大数据库中的行(SQL Server)

Visual Studio中的SQL Server数据库项目-如何构建新数据库

SQL Server 2005如何从数据库转储中创建数据库

如何解决 java.sql.SQLException: 在数据库与 JDBC API 的集成中?

使用fluentMigrator时如何仅对特定数据库名称运行迁移

如何从 Firebase 数据库中检索特定数据

如何从 Firbase 数据库中获取特定数据

如何在AZURE SQL数据库服务器中启用对Azure服务的访问?