【问题标题】:XML node encryption in Stored procedure存储过程中的 XML 节点加密
【发布时间】:2018-03-05 06:22:31
【问题描述】:

我需要在使用 XML 插入值的表中插入几行。我面临的问题是该表包含一个字段“密码”,该字段在表定义中为 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 节点值“密码”并在将其添加到表之前进行加密。有没有办法实现这一目标?

【问题讨论】:

标签: sql-server xml stored-procedures sql-server-2012


【解决方案1】:

在没有长度的情况下使用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 语句,以便在更改表的数据之前检查结果...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多