2011-03-28 15 views
3

我有一個表格,其中包含一些敏感數據,我希望比已採取的措施更安全。如果入侵導致攻擊者獲得我們的PHP源代碼,我想進一步保護數據庫中的一些數據。限制在特定表格中使用Select * *

數據已經在數據庫中加密,並且加密密鑰安全地存儲在源代碼之外,但不幸的是,這些只是延遲,有希望讓我們有時間發現入侵併關閉系統。但是,對代碼進行逆向工程在技術上是可行的。

作爲失敗安全我想限制對特定表的選擇語句。我們的代碼永遠不需要從表格中一次檢索多個記錄。有沒有辦法限制從MySQL管理端的表中返回的行數,以便查詢如SELECT * FROM secure_data_table;不可能?

回答

5

有限制的行數的方式從表中返回從MySQL

的行政方面要做到這一點是拒絕訪問表中的常用方法。

創建一個存儲過程,從表中選擇一個項目,例如,通過ID,並授予訪問權限,只有該過程。

+0

+1,這是一個很好的解決方法。 – 2011-03-28 21:22:33

+0

謝謝,這應該適合我的願望。 – InvisibleFrisbee 2011-03-28 21:58:12

0

從文檔(http://dev.mysql.com/doc/refman/5.0/en/grant.html):

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] 
    ON {tbl_name | * | *.* | db_name.*} 
    TO user_name [IDENTIFIED BY 'password'] 
     [, user_name [IDENTIFIED BY 'password'] ...] 
    [REQUIRE 
      [{SSL| X509}] 
    [CIPHER cipher [AND]] 
    [ISSUER issuer [AND]] 
    [SUBJECT subject]] 
    [WITH GRANT OPTION] 

你可以指定一列中的唯一priv_type值(即當 您使用column_list條款)是SELECTINSERTUPDATE

+0

您的鏈接似乎不起作用。 – 2011-03-28 21:16:42

+2

把有效的鏈接放在你的答案是你最好的朋友。 – 2011-03-28 21:21:05

+0

啊,我忘了謝謝你指出無效鏈接。再次感謝@Abe – sehe 2011-03-28 22:14:53

0

據我所知,在表級別無法做到這一點。顯然,你可以限制在查詢中返回的記錄數量,而不是在表級別。

如果惡意用戶訪問您的管理員帳戶,那麼他們可能會反過來這樣的限制(如果有的話)。

0

爲什麼不將查詢移動到數據庫中(參數化的存儲過程,沒有表級訪問)?

您預期會達到何種程度的妥協?在那個級別,是否有可能繞過架構級別的任何事情,由用戶授予他們自己需要的任何權限。在那個級別,加密是否重要?加密意味着文件或備份是安全的,但通常,數據庫可以隨意解密。如果您有權訪問PHP並且在那裏進行加密,那麼您很可能也可以訪問該密鑰。

+0

只是想放入幾層安全。試圖通過規劃意外情況來實現安全。如果注入風格攻擊或php shell成功,這意味着源代碼可能會暴露,但不一定是源代碼中指定的用戶以外的數據庫訪問。分離或至少減緩敏感信息丟失的能力非常重要。使用將select語句限制爲一個返回行的存儲過程將使得難以輕鬆獲取信息。 – InvisibleFrisbee 2011-03-30 04:45:28

+0

@InvisibleFrisbee這就是我所倡導的。應用程序應該使用只能執行存儲過程的登錄訪問數據庫,而不能使用表權限。 – 2011-03-30 12:38:30