Mysql

如何使查詢保密?

  • December 2, 2020

我有一個項目,我需要對其活動保密,而且我不是伺服器管理員。

如果我的應用程序使用 id 更新使用者的值1,它可能會說類似的內容UPDATE 'users' SET 'Name' = 'George' WHERE 'Id' = 1;,並且會顯示在 Apache 日誌中。

我能做些什麼來避免這種情況?

Apache 日誌顯示 Apache Web 伺服器被要求執行的操作。

它通常對 SQL*知之甚少(也不關心)。*任何味道。

拜託,拜託告訴我您沒有通過 URL 和/或 QueryString 向您的 Web 應用程序送出原始 SQL 語句並執行它們!

強制性 XKCD 參考:小鮑比桌

這是一個巨大的安全風險,如果 Apache 真的將查詢(包括個人數據)記錄到它自己的、基本上不安全的日誌文件中,那麼您將進入數據保護立法(例如 GDPR)方面的非常危險的水域。

將邏輯移動到伺服器端。

創建執行所需操作的儲存過程。然後從您的程式碼中呼叫此過程。例如:

-- on the server
CREATE 
DEFINER = 'dbadmin@localhost'
PROCEDURE update_user_name (userid BIGINT, newname VARCHAR(255))
SQL SECURITY DEFINER
UPDATE users
SET name = newname
WHERE id = userid;

-- on the client
CALL update_user_name (1, 'George');

就這樣。Apache 日誌將僅顯示 CALL 語句。

主要改進:

  1. 客戶端無權查看 SP 文本 - 因此他無法看到此 SP 執行了什麼、更新了哪些表、在 SP 中實現了哪些附加檢查邏輯。
  2. 客戶端可能根本沒有訪問數據的權限——即使假設他猜測執行了什麼 SQL,嘗試執行UPDATESP 中使用的查詢也會導致“您沒有訪問表的權限users”。因為只有'dbadmin@localhost'數據訪問權限,SP是使用這個賬號執行的,而查詢是使用使用者賬號執行的。
  3. 如果您需要更改邏輯(例如,添加一些限製或改進),那麼您只需更改 SP 的文本,您不需要在所有客戶端工作站上更新客戶端軟體。

引用自:https://dba.stackexchange.com/questions/280709