เป็นวิธีที่ดีในการเข้ารหัสฐานข้อมูล mysql และมันคุ้มค่าหรือไม่


20

ฉันรู้ว่าฉันสามารถเข้ารหัสฟิลด์เฉพาะของฐานข้อมูลได้ แต่ฉันสนใจที่จะเข้ารหัสทุกฟิลด์ของฐานข้อมูล ฉันต้องการตรวจสอบให้แน่ใจว่าไม่มีใครที่เข้าถึงเปลือก mysql แต่ผู้ที่ไม่สามารถเข้าถึงคีย์ถอดรหัสไม่สามารถอ่านอะไรจากฐานข้อมูลเลย

ฉันต้องการตรวจสอบให้แน่ใจว่าถ้าใครบางคนเข้าถึงรูทเครื่อง แต่ไม่มีคีย์ถอดรหัสพวกเขาไม่สามารถอ่านข้อมูลได้

ฉันจะทำสิ่งนี้ได้อย่างไร มันสมเหตุสมผลไหมที่จะทำ? ฉันกังวลว่ามีใครบางคนสามารถเข้าถึงฐานข้อมูล mysql ได้อย่างหลีกเลี่ยงไม่ได้ที่จะสามารถเข้าถึงคีย์ดังนั้นจึงไม่มีเหตุผล ฉันพลาดอะไรไปรึเปล่า?


5
คุณได้พิจารณาจัดเก็บฐานข้อมูลบนไดรฟ์ข้อมูลเฉพาะและเข้ารหัสด้วย dm-crypt และ LUKS หรือไม่ แน่นอนไม่ใช่สิ่งที่คุณถาม แต่ทุกอย่างจะถูกเข้ารหัส คุณสามารถเข้ารหัส keyfile ด้วย GPG
dsljanus

คำตอบ:


10

มีการเข้ารหัส AES และ DES ระดับต่ำสุดพร้อมใช้งาน: https://dev.mysql.com/doc/refman/5.5/en/encrypt-functions.html#function_encrypt

ไม่มีใครสามารถอ่านข้อมูลโดยไม่ต้องระบุคีย์สำหรับทุกแบบสอบถาม (หรือไม่มีการเพิ่มลงในทริกเกอร์ / ขั้นตอน)

ตัวอย่าง:

INSERT:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

และเลือก:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

นอกจากนี้ต้องมีการเชื่อมต่อ SSL กับฐานข้อมูล

และในระดับต่ำกว่า - คุณสามารถเข้ารหัสระบบไฟล์ได้เช่นกัน


2
หมายเหตุ: นอกจากฐานข้อมูลเป็นแบบโลคัลคุณต้องเข้ารหัสการเชื่อมต่อมิฉะนั้นรหัสผ่านและรหัสจะถูกส่งเป็นข้อความธรรมดาผ่านเครือข่าย ดูsecurity.stackexchange.com/questions/45838/…
Aaron Digulla

AES, MD5 เก่าและมีช่องโหว่ การเข้ารหัสใหม่คืออะไร?
YumYumYum

ฉันรู้ว่านี่เป็นเพียงตัวอย่างของวิธีการเข้ารหัส / ถอดรหัสฟิลด์ แต่การใช้รหัสผ่านเป็นตัวอย่างเป็นความคิดที่ไม่ดี คุณไม่ควรมีรหัสผ่านที่ไม่มีการแฮชในฐานข้อมูลของคุณไม่ว่าจะมีหรือไม่มีการเข้ารหัส
Caedmon

คำตอบนี้เป็นเรื่องเกี่ยวกับการถอดรหัสระดับฟิลด์ แต่คำถามไม่เกี่ยวกับที่: "วิธีที่ดีในการเข้ารหัสฐานข้อมูล mysql" ... "ฉันรู้ว่าฉันสามารถเข้ารหัสเขตข้อมูลเฉพาะของฐานข้อมูล แต่ฉันสนใจที่จะเข้ารหัสทุก ฟิลด์ของฐานข้อมูล "
LarsH


2

ขั้นแรก: คุณเก็บคีย์ของคุณด้วยแอปพลิเคชันและจัดการการเข้ารหัสทั้งหมดที่ชั้นแอปพลิเคชัน

ถัดไป: คุณมั่นใจได้ว่าอินสแตนซ์ MySQL และแอปพลิเคชัน [เซิร์ฟเวอร์] อยู่ในเครื่องที่แยกต่างหากเพื่อให้รูทเครื่องประนีประนอมบนเซิร์ฟเวอร์ MySQL ไม่อนุญาตให้ผู้โจมตีอ่านคีย์จากแอปพลิเคชันแหล่งที่มา

วิธีนี้ดูเหมือนจะมากเกินไป จัดการกับข้อมูลที่ละเอียดอ่อนได้อย่างถูกต้อง (รหัสผ่านบัตรเครดิตและอื่น ๆ ) แต่การเข้ารหัสทุกอย่างนั้นเกินความจำเป็น (และมีแนวโน้มที่จะต่อต้านการผลิตในโลกของคีย์หลัก)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.