JamesP Asked: 2016-09-13 02:08:51 +0800 CST2016-09-13 02:08:51 +0800 CST 2016-09-13 02:08:51 +0800 CST 审计使用 CLR 表值函数 772 我已经编写了一些调用 Web 服务的 CLR 表值函数,我想审核它们的使用。有谁知道这可以在 CLR 代码本身中实现吗?我希望将审计代码与 CLR 代码放在一起,而不是每次使用它们时都必须编写显式的 INSERT 语句。 sql-server audit 1 个回答 Voted Best Answer Solomon Rutzky 2016-09-13T04:06:26+08:002016-09-13T04:06:26+08:00 由于 TVF 调用 Web 服务,程序集必须标记为WITH PERMISSION_SET = EXTERNAL_ACCESS(希望您选择签署程序集,创建非对称密钥,并从该密钥创建登录,而不是TRUSTWORTHY ON为数据库设置)。这个事实给了你两个选择: 使用File.AppendAllText之类的东西将信息记录到文件中并将其保存在数据库之外。如果文件不存在,则此方法会创建该文件。注意:此选项需要使用会触发触发器的并发操作进行测试,因为如果操作系统不允许对文件进行并发写入活动,则可能会产生一些阻塞/额外的等待时间。 通过创建常规/外部SqlConnection并发出INSERT语句来记录到表。请务必enlist=false;在连接字符串中指定,以便它不会尝试绑定到当前事务。这将允许 INSERT(发生在单独的连接/会话中)发生,无论 SQLCLR TVF 中是否引发异常(当然,除非错误与INSERT操作有关;-)。
由于 TVF 调用 Web 服务,程序集必须标记为
WITH PERMISSION_SET = EXTERNAL_ACCESS
(希望您选择签署程序集,创建非对称密钥,并从该密钥创建登录,而不是TRUSTWORTHY ON
为数据库设置)。这个事实给了你两个选择:使用File.AppendAllText之类的东西将信息记录到文件中并将其保存在数据库之外。如果文件不存在,则此方法会创建该文件。注意:此选项需要使用会触发触发器的并发操作进行测试,因为如果操作系统不允许对文件进行并发写入活动,则可能会产生一些阻塞/额外的等待时间。
通过创建常规/外部
SqlConnection
并发出INSERT
语句来记录到表。请务必enlist=false;
在连接字符串中指定,以便它不会尝试绑定到当前事务。这将允许 INSERT(发生在单独的连接/会话中)发生,无论 SQLCLR TVF 中是否引发异常(当然,除非错误与INSERT
操作有关;-)。