這個問題主要防止內部技術人員對資料庫直接操作,大家有什麼實現的方法嗎?
主管要求的功能是這樣描述的:
對資料庫中的每一行敏感性資料設有專屬的數位簽章,每一次修改資料庫我們都在底層進行簽名校正。未經授權的資料庫修改無法通過校正,程式進行終止操作並凍結賬戶並彈出警示。此安全模組防範駭客或內部技術人員繞過後台管理模組,直接修改底層資料庫的非法行為。
使用的是PHP+MYSQL,我現在想到是思路是用資料庫觸發器。但觸發器如何傳參數呢?
感謝幾個人的回答,但現在為止還沒有答案,peixinchen的回答
peixinchen 52 6小時前 回答 · 6小時前 更新
規章制度的問題就用規章制度的方式解決,不要想用技術手段來防,性價比太低。
當然基本的制度要做到:
1. 資料庫許可權分級管理,root許可權別濫用;
2. 營運系統分級,root許可權別濫用。
但這些都防不住管理員進行資料更改,這種時候還是“懲罰措施”最有效。
PS:如果是內部有人惡意破壞,如何進行定位追查,那就是另外的問題了。
我考慮的是,假如是銀行的資料系統,一個資料庫管理員能直接修改資料庫的嗎?你能靠制度來管?
現在我就是想看有沒有技術的方法實現只能通過程式來寫入修改資料。
進過各位的討論,好像明白了一些,綜合沙渺與peixinchen所說,重新思考中……
回複內容:
這個問題主要防止內部技術人員對資料庫直接操作,大家有什麼實現的方法嗎?
主管要求的功能是這樣描述的:
對資料庫中的每一行敏感性資料設有專屬的數位簽章,每一次修改資料庫我們都在底層進行簽名校正。未經授權的資料庫修改無法通過校正,程式進行終止操作並凍結賬戶並彈出警示。此安全模組防範駭客或內部技術人員繞過後台管理模組,直接修改底層資料庫的非法行為。
使用的是PHP+MYSQL,我現在想到是思路是用資料庫觸發器。但觸發器如何傳參數呢?
感謝幾個人的回答,但現在為止還沒有答案,peixinchen的回答
peixinchen 52 6小時前 回答 · 6小時前 更新
規章制度的問題就用規章制度的方式解決,不要想用技術手段來防,性價比太低。
當然基本的制度要做到:
1. 資料庫許可權分級管理,root許可權別濫用;
2. 營運系統分級,root許可權別濫用。
但這些都防不住管理員進行資料更改,這種時候還是“懲罰措施”最有效。
PS:如果是內部有人惡意破壞,如何進行定位追查,那就是另外的問題了。
我考慮的是,假如是銀行的資料系統,一個資料庫管理員能直接修改資料庫的嗎?你能靠制度來管?
現在我就是想看有沒有技術的方法實現只能通過程式來寫入修改資料。
進過各位的討論,好像明白了一些,綜合沙渺與peixinchen所說,重新思考中……
我們現在的做法
- 程式員和DBA是分開的各盡其責,程式員是沒有訪問資料庫的許可權的。
- 若涉及到資料庫修改,走內部的事務系統審批次程序,DBA接到任務會按照
你的事務要求執行,每步都有記錄。
不要踩嘛。在特定的需求下,研究內控怎麼做是個好問題。
只要把MySQL的使用者名稱和密碼開放給PHP層,那麼程式員就必然可以直接操作MySQL資料庫。因為PHP本質也只是執行原始的SQL語句,從這一點上看“PHP操作MySQL”和“直接操作資料庫執行SQL語句”沒有本質區別。
我可以提一個有趣的問題:用phpMyAdmin讀寫資料庫,這應該算通過PHP操作MySQL,還是直接操作MySQL?:D
只有把PHP一層直接存取MySQL的許可權收回,才有希望限制程式員只能以規定的行為讀寫資料庫。題主的核心需求是模組封裝。這個手段就很多了:
- 在資料庫伺服器的前邊擋一個前級伺服器,接收讀寫請求並翻譯為SQL語句
- 用Zend Guard一類的工具,封裝不可分析原始碼的資料庫讀寫類
- 用PHP擴充封裝資料庫讀寫(這個開發成本太高)
內控是一個有重大代價的行為——控了別人的許可權,就意味著扛下了別人的責任。控制者的疏失和錯誤,極易引發交流成本和開發時間的增加,甚至會引發受控開發方的反彈、怠工、士氣下降等後果。
請動用任何手段之前清楚地知道自己在做什麼,三思而行。
直接把敏感的檔案加密吧。
規章制度的問題就用規章制度的方式解決,不要想用技術手段來防,性價比太低。
當然基本的制度要做到:
1. 資料庫許可權分級管理,root許可權別濫用;
2. 營運系統分級,root許可權別濫用。
但這些都防不住管理員進行資料更改,這種時候還是“懲罰措施”最有效。
PS:如果是內部有人惡意破壞,如何進行定位追查,那就是另外的問題了。
這種需求還是不要技術上來實現了。。。太複雜。
DB_SERVER和WEB_SERVER使用內網串連,若果程式員想看資料資料,那麼phpmyadmin的mysql帳號授權唯讀,如果根本不想讓程式員看到資料庫的串連資訊可以使用php_screw加密php程式,這些都是建立在程式員不能上線上伺服器的大前提下!
觸發器有什麼用,把觸發器關了,把資料庫檔案直接替換,哈哈
資料庫管理員和後端程式員分開,各自賦予許可權。另外定期備份資料庫。
這個需求有點籠統,看著像抄的。
對資料簽名是可行的。但是,追責是個問題。比如:A改了欄位,而B讀取資料的時候通過校正探索資料不對,那麼是B的責任嗎?
另外,你說觸發器實現,那麼直接修改資料庫也可以使觸發器生效啊~
資料簽名的話可以這樣:每個欄位拼接起來,然後加個密,密文作為這行記錄的一個欄位儲存就行了。密鑰保管就是社交工程學了
這樣就沒法弄,我覺得這樣技術上沒法實現吧,PHP 的程式要去查資料庫肯定已經有庫的許可權,那程式員肯定也可以去操作資料庫啊。銀行資料庫的營運人員肯定是有 root 許可權的,你要這樣說的話,那個人當然是可以去操作相關記錄,關鍵是這樣做屬於違法行為,且代價很大。對,他可以做,能做到,但是他不敢做。就像我有能力去殺人,但是我不會去殺。
另外一種是程式員開發的時候使用的是內部環境,資料庫也是內部資料庫,線上的資料和相關許可權不需要對程式員開放,營運去部署就好了。
資料庫審查模式也只能是時候審查,還是想做事前的技術防控,我考慮的是,假如是銀行的資料系統,一個資料庫管理員能直接修改資料庫的嗎?你能靠制度來管?
現在我就是想看有沒有技術的方法實現只能通過程式來寫入修改資料。
這就不是說信不信任技術員的問題
不是說不給技術查詢和修改資料庫,查詢修改要通過我的PHP程式來實現,我好進行許可權控制和寫記錄檔。比如說資料庫有沒有這樣的一個功能,觸發寫入的時候,需要一個密鑰才會執行,這個密鑰是從程式傳參進來的,有密鑰則執行。