存储过程中的XML节点加密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程中的XML节点加密相关的知识,希望对你有一定的参考价值。

我需要将一些行插入到使用XML插入值的表中。我面临的问题是该表包含一个字段'password',它在表定义中是varbinary,从前端传递的值应该加密在插入之前使用数据库中的函数

@encryptUsername=dbo.Encrypt(CONVERT(VARCHAR(MAX),@userName))

当使用XML插入值时,我不知道如何执行此操作。

以下是从XML插入值的示例sp

 INSERT INTO CLIENT(username,password)
   SELECT 
        Col.valueCol.value('(userName/text())[1]','VARCHAR'),
        Col.value('(password/text())[1]','VARCHAR')
 FROM @XmlData.nodes('/usernames/username')   Tab(Col)

这里我需要获取xml节点值'password'并在添加到表之前加密。有没有办法实现这个目标?

答案

使用没有长度的varcharnvarchar是危险的(Bad habits to kick: Varchar without a length (Aaron Bertrand))。

由于.value()方法返回一个类型值,这是一个varchar(max),你可以直接传递给你的函数。试试这个:

INSERT INTO CLIENT(username,password)
   SELECT 
        dbo.Encrypt(Col.value('(userName/text())[1]','VARCHAR(MAX)')),
        dbo.Encrypt(Col.value('(password/text())[1]','VARCHAR(MAX)'))
 FROM @XmlData.nodes('/usernames/username')   Tab(Col)

注意我从你的代码中取了上面的内容,你使用Col.valueCol.value()以及Col.value()。我接受了我认为正确的那个。

注意2您应该将INSERT语句更改为SELECT语句,以便在更改表数据之前检查结果...

以上是关于存储过程中的XML节点加密的主要内容,如果未能解决你的问题,请参考以下文章

如何对网页进行哈希算法?跪求大神回答!

LINQ to XML - 从文件加载 XML 片段

将单个xml节点作为数组转换为json

在 Groovy 中将字符串 XML 片段转换为文档节点

传递 XML 与传递用户定义类型

使用 R 的 xmlEventParse 存储特定的 XML 节点值