ate*_*evm 3 sql-server regular-expression sql-clr python external-scripts
主要问题我们需要在MS SQL Server 2019上使用正则表达式,能力至少达到POSIX正则表达式的水平。
这个来自 stackoverflow 的问答正确地得出结论,如果您的查询必须依赖正则表达式,您应该使用 CLR。这篇 Readgate文章详细阐述了这种方法。所以我和我的一位同事提出了这个解决方案,但我的另一位同事断然表示,在这里使用 CLR 会给安全性和稳定性带来巨大风险,而使用外部脚本(Python 或 R)更安全。
这似乎是一个可疑的说法,因为CLR 中的用户代码是可以管理的,所以也许正好相反,但我没能说服我的同事。
在我绝望中写的另一个问题中,因为我被迫使用外部脚本并且仍然产生一个极快的查询。SQLpro 用户在他的评论中指出:
就安全性而言,使用 Python 或 R 可能比使用 CLR 更糟糕!
我倾向于相信。
所以我有两个问题:
我的另一位同事断然表示,在这里使用 CLR 会对安全性和稳定性构成巨大风险
好吧,您的同事绝对是错误的(除非他们可以提供此类声明的实际证据)。
自从 SQLCLR 在 SQL Server 2005 中引入以来,人们一直在说它“不安全”。但是,我还没有看到有人真正证明它确实不安全。我见过的唯一假设的“证据”是有人加载了一个将文件写入磁盘的程序集,并声称由于它可以写入磁盘,因此这是一个安全漏洞。但是,这是一个错误的主张,因为:
TRUSTWORTHY
启用或使用签名/证书来访问外部资源。如果您为了 a) 创建和 b) 执行所需的代码以使其看起来像是获得了提升的权限,那么这不是获得提升的权限的证据。
SQLCLR 并非天生不安全。当然,它可能会被错误地使用以意外允许某人获得提升的权限等,但它本身是安全的。而且,仅仅通过EXECUTE AS 'dbo'
在存储过程或函数中使用就很容易引入安全漏洞,这就是纯 T-SQL。
下面是我写的几篇关于 SQLCLR 安全主题的文章:
话虽如此,在使用正则表达式的上下文中,SQLCLR 和外部脚本都是“安全的”(假设您不允许用户临时访问以提交他们想要的任何随机 Python 代码)。
这是一个主要区别:外部脚本通过存储过程执行。意思是,您可以对单个值执行 RegEx。如果可以将 RegEx 函数集成到SELECT
and/orWHERE
子句中(我知道您可以传入查询并返回结果集),那么它充其量是笨重的,当然也不容易维护。而使用 SQLCLR,您可以创建标量函数和表值函数,这些函数和表值函数很容易集成到适当的基于集合的解决方案的查询中(请记住:不进行任何数据访问的正确编码的 SQLCLR 标量函数可以参与并行计划)。
如果您想要 RegEx 函数而无需编译任何东西,在我编写的 SQLCLR 库SQL# (SQLsharp)的免费版本中有很多可用的函数。
有关使用 SQLCLR 的更多信息,请访问我的网站:SQLCLR 信息
归档时间: |
|
查看次数: |
97 次 |
最近记录: |