我有大约75个php现有脚本访问mysql数据库,类似于这个伪代码:
$query="SELECT * from table";
$result=mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
//use the rows
}
}
我最近被迫单独加密所有数据库字段,所以现在当这些75个php脚本如上所示运行时,所有$ row都会返回所有字段都被加密,因此无法使用。
因此,我想创建一个执行mysqli_query的函数,然后解密所有字段,并返回结果,就好像它是由mysqli_query返回的,而不是更改所有75个PHP脚本来解码每个字段,但是解密。像
这样的东西function QueryAndDecrypt($conn,$query){
$result=mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
$row=decrypt($row);
}
}
return $result; <<----- return result with fields decrypted
}
// now all 75 scripts would have to change just one line to call above
$query="SELECT * from table";
$result=QueryAndDecrypt($conn,$query); <<--- change only 1 line
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
//use the rows as normal decrypted
}
}
正如你所看到的,我只是想改变所有75个脚本中的那一行,这样它就会像以前那样做同样的事情,结果会回来,所有的字段都已经被解密了。
我尝试编写这个QueryAndDecrypt函数,但是当我从mysqli_result $ row更改结果时如上所示它不会改变,因为mysql的结果是某种不可改变的设置(我被告知),或类似的东西
无论如何,通过编写一个可以从执行sql查询的所有脚本调用的公共函数来执行此操作,并且还可以通过所有其他脚本(如常规脚本)访问它来解密结果mysql查询结果?
任何人都可以提供帮助,我刚刚离开船只#34;所以我不知道sql那么好或php,我现在非常绝望,因为所有的脚本都因为这个而被打破!!
由于
答案 0 :(得分:1)
抱歉,您无法修改结果的行,然后以某种方式“取消”将它们重新导入到要再次获取的结果中。
但您可以通过更改一行来修复代码:
func saveAction(image: NSImage, url: URL) {
if let tiffdata = image.tiffRepresentation,
let bitmaprep = NSBitmapImageRep(data: tiffdata) {
let props = [NSImageCompressionFactor: Appearance.imageCompressionFactor]
if let bitmapData = NSBitmapImageRep.representationOfImageReps(in: [bitmaprep], using: .JPEG, properties: props) {
let path: NSString = "~/Desktop/out.jpg"
let resolvedPath = path.expandingTildeInPath
try! bitmapData.write(to: URL(fileURLWithPath: resolvedPath), options: [])
print("Your image has been saved to \(resolvedPath)")
}
}
你必须编写类似这样的函数:
$query = "SELECT * from table";
$result = mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while ($row = MyFetchAssocAndDecrypt($result)) { <<--- change only 1 line
//use the rows as normal decrypted
}
}
PS:您提到要求您不应该通过网络将未加密的数据发送到数据库。这不是我的顾虑,因为您可以使用VPN或通过SSL连接到数据库。
更值得关注的是,包含明文数据和明文加密密码的查询将写入MySQL服务器上的数据库日志,并且这些日志未加密。
MySQL有一些可选扩展,承诺进行全数据库加密,但这些扩展忽略了查询日志。