아래는 xQuery 1.0 안전한 솔루션이어야합니다. 더 작아 질 수도 있지만 전체 리뷰를 위해 이와 같이 남겨 두었습니다.
xquery version "1.0";
declare function local:encrypt($node){
'an encrypted value'
};
declare function local:decrypt($node){
'a decrypted value'
};
declare function local:traverse-and-encrypt($nodes as node()*) as node()*{
for $n in $nodes
return if($n/@encrypted = 'true')
then element{fn:node-name($n)}{
for $a in $n/@*
return if(fn:local-name($a) = 'encrypted')
then attribute {'encrypted'} {'false'}
else $a,
local:decrypt($n/text())
}
else if($n/@encrypted = 'false')
then element{fn:node-name($n)}{
for $a in $n/@*
return if(fn:local-name($a) = 'encrypted')
then attribute {'encrypted'} {'true'}
else $a,
local:encrypt($n/text())
}
else element{fn:node-name($n)}{
$n/@*,
$n/text(),
for $child in $n/*
return local:traverse-and-encrypt($child)
}
};
let $doc :=
<books>
<book>
<title encrypted="true">0234534rdf;skdlfsd</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title encrypted="false">Another book</title>
<author test='testing attributes'>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</books>
return local:traverse-and-encrypt($doc)
반환 :
<books>
<book>
<title encrypted="false">a decrypted value</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title encrypted="true">an encrypted value</title>
<author test="testing attributes">J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</books>
즉 z/OS 용 또는 리눅스/유닉스/윈도우에서 DB2에 있습니까? 지금까지 뭐 해봤 어? –
그래서 내용이 암호화되었지만 내용이 해독되었지만 내용이 여전히 암호화되어 있다고 (허위로) 말한 요소로 바꾸려면 (올바르게) 요소를 바꾸시겠습니까? 이 행동을 지정하고 심각한 상담을 관리하는 디자이너를 찾으십시오. –
코드는 데이터베이스에서 데이터베이스 패키지로 실행되므로 xquery를 사용하려고 시도했지만이 문제를 해결하는 방법이 다소 부족합니다. 주요 문제는 어떤 열이 암호화되어 있는지 미리 알려주지 않으므로 절차가 일반적인 것이어야한다는 것입니다. –