- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已深入研究 SQL CLR。不幸的是,我的第一个示例在对安全代码的透明代码调用方面存在问题。
重点是我的 SQL CLR 触发器被视为透明代码。在触发器中,我使用 Quartz 调用 Quartz Windows 服务:
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = string.Format("tcp://{0}:{1}/{2}", "localhost", "555",
"QuartzScheduler");
var schedulerFactory = new StdSchedulerFactory(properties);
IScheduler scheduler = schedulerFactory.GetScheduler();
错误:
(135,1): SQL72014: .Net SqlClient Data Provider: Msg 6522, Level 16, State 1, Procedure AfterMarketSessionInserted, Line 1 A .NET Framework error occurred during execution of user-defined routine or aggregate "AfterMarketSessionInserted": System.MethodAccessException: Attempt by security transparent method '.Database.Triggers.MarketSessionTriggers.AfterMarketSessionInserted()' to access security critical method 'Quartz.Impl.StdSchedulerFactory..ctor(System.Collections.Specialized.NameValueCollection)' failed.
Assembly 'Database, Version=1.0.5275.15169, Culture=neutral, PublicKeyToken=null' is partially trusted, which causes the CLR to make it entirely security transparent regardless of any transparency annotations in the assembly itself. In order to access security critical code, this assembly must be fully trusted. System.MethodAccessException: at Database.Triggers.FinancialMarketSessionTriggers.AfterFinancialMarketSessionInserted()
--------------
为什么 SQL CLR 触发器代码被认为是透明代码并受到部分信任?
如何使 SQL CLR 触发器代码不是透明代码或使其完全受信任?
我乐于接受建议。
最佳答案
Why is SQLCLR code only trusted partially?
默认情况下,在 SQL Server 内部运行的 CLR 代码(即“SQLCLR”)受到高度限制,以免降低 SQL Server 的安全性或稳定性。
How do you make SQLCLR fully trusted?
程序集中的 CLR 代码可以做什么(主要)由每个程序集的 PERMISSION_SET
属性控制。如果在通过 CREATE ASSEMBLY
加载程序集时未指定 PERMISSION_SET
,则默认设置为 SAFE
,这是最受限制的,不完全信任。为了使 CLR 代码能够到达 SQL Server 外部(到达网络、文件系统、操作系统等),您需要至少将程序集设置为 EXTERNAL_ACCESS
,但这是仍然不完全信任。为了被视为完全信任,您需要将程序集设置为UNSAFE
。
为了将任何程序集设置为 EXTERNAL_ACCESS
或 UNSAFE
,您需要执行以下操作之一:
UNSAFE ASSEMBLY
权限。这是首选方法。TRUSTWORTHY = ON
。这假定数据库的所有者具有 UNSAFE ASSEMBLY
服务器级权限(通常是这种情况)。虽然此选项更快/更容易,但由于 TRUSTWORTHY = ON
是 fairly wide-open security hole 而不是首选。 .如果您想更详细地了解 SQLCLR 安全性,尤其是关于 SAFE
程序集的限制程度,请查看此 article我在 SQL Server Central 上写的。
关于c# - SQL CLR 触发器,由于透明代码调用关键代码,如何使程序集可信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153370/
我了解堆栈和堆的基本概念,但如果有任何一个可以解决以下困惑,那就太好了: 是否为整个应用程序流程或项目中开始的每个线程都创建了一个新堆栈? 是否为整个应用程序进程或项目中开始的每个线程都创建了一个新堆
我已经阅读了无数关于 C# 4.0 新特性的博客、帖子和 StackOverflow 问题。甚至新的 WPF 4.0 功能也开始公开发布。我找不到并且想知道的: 从 C#/WPF 开发人员的角度来看,
最近,我的 asp.net 应用程序崩溃了。我在 Windows 上获得了事件日志,两种类型的异常消息: Application: w3wp.exe Framework Version: v4.0.3
我了解当前状态的 CLR 绑定(bind)到 Windows 操作系统,并通过在内部使用 Win32 API 提供各种服务。 由于 .NET Core 是独立于平台的,这基本上意味着相同的 IL 代码
AFAIK,try 和 finally block 用于执行一段可能会抛出一些异常的代码,我们还添加了 catch block ,如果我们准备处理某种类型的异常和/或将它们排除在外,比如 FileIO
问题: 线程中的未处理异常进入 CLR来自非托管代码不会触发“正常”未处理的异常 CLR 处理。 在下面的代码中,使用 C++ 调用 CSSimpleObject.GetstringLength()
JVM/CLR 如何执行 JIT 编译的原生代码?是通过一些代码注入(inject)还是通过将代码复制到可执行内存?允许动态代码执行的系统调用是什么? 最佳答案 我可以在 CACAO VM 中解释我们
我从事的项目需要 .Net 与非托管代码的互操作性。几周前我开始使用 .Net,虽然我在 C/C++ 方面有很多经验,但我很惊讶 CLR 如何处理 P/Invoke。这是详细信息。我的同事写了这个函数
在哪里可以找到 ODP 到 CLR 类型映射的列表?在 Oracle 数据库上,NUMBER(9,0) 类型在 .NET 应用程序中作为 MS Oracle 驱动程序的 System.Decimal
我有一个 Ubuntu 12.04。我尝试在我的 python 代码中导入 clr,但出现此错误。 我浏览了链接。但这一切都是徒劳的。有没有办法检查“clr”存在?如何查看模块是否存在? 最佳答案 您
我提到了 this somewhat similar question在问这个之前,但无法解决我的问题 我正在查看一个包含许多解决方案的旧应用程序。问题发生在其中一个解决方案中(比如 S)。这是情况:
假设我有一个旧的应用程序,它将尝试加载外部程序集。 旧应用程序编译为 CLR 2。 新程序集编译为 CLR 4。 我希望能够在 CLR 4 中运行那个旧应用程序。我记得有一些 xml manifest
我可以编写、编译并成功运行以下 IL 程序,并将 .maxstack 大小设置为 1,该值太低,因为该程序在某个时间点堆栈上有两个值(即 2+2==4) 。该程序不会在 CLR 中崩溃,并以“Hell
.Core CLR 与 Mono CLR 有什么区别?那么微软为什么要维护不同的运行时环境呢? 最佳答案 两者都是 .NET Standard 的实现,但它们具有不同的实现细节。 Mono从历史上看,
我正在尝试使用以下配置创建一个 Visual C++ Win32 控制台应用程序:操作系统:Windows 7 Visual Studio :VS 2012公共(public)语言运行时支持:公共(p
// This is the main DLL file. #include "stdafx.h" #include "Tga2DCLI.h" //#include #include Tga2DC
我有两个项目的解决方案。第一个是基本类库项目,其中包含在多个服务端点 (DataContract.dll) 之间共享的类的定义。第二个是将使用共享程序集中定义的类的 SQL CLR 项目。在我的本地机
我尝试创建一个使用 Windows 窗体的 .NET 控制台应用程序来创建和保存屏幕截图。在创建新的控制台应用程序项目时,我尝试使用 COM 引用通过依赖项导入 System.Windows.Form
DOS 变成 Windows 的方式是一样的吗? 我们似乎最终支持和开发了 Microsoft 的三个平台,我不确定边界应该在哪里。 为什么不能将 CLR 的好处(例如类型安全、内存保护等)内置到 W
在 VC++ .Net 中,Clr/Safe (/clr:safe) 和 Clr/Pure (/clr:pure) 是什么意思? 最佳答案 来自doc : /clr:pure Produces a M
我是一名优秀的程序员,十分优秀!