ป้องกันการจำลองแบบไม่เขียนไปยัง MySQL ทาส?


13

เรามีเซิร์ฟเวอร์ฐานข้อมูล MySQL ตั้งค่าด้วยการจำลองแบบแถวเพื่อประสิทธิภาพ ซอฟต์แวร์เขียนไปยังต้นแบบและอ่านจากทั้งต้นแบบหรือทาส ทุกอย่างทำงานได้ดีส่วนใหญ่

ฉันเข้าใจว่า MySQL จะอนุญาตให้เขียนถึงทาสแม้ว่ามันจะรู้ว่ามันเป็นทาสของ MySQL ก็ตาม เป็นการดีที่ฉันจะปิดเช่นนี้ดังนั้นถ้ามีคนเขียนโค้ดที่ไม่ดีที่ได้รับการเชื่อมต่อแบบอ่านและทำUPDATEมันจะทำให้เกิดข้อผิดพลาดแทนที่จะใส่ข้อมูลลงบนทาส

มีวิธีทำใน MySQL หรือไม่ เห็นได้ชัดว่าเราต้องการทำให้สิ่งนี้เป็นไปไม่ได้จากซอฟต์แวร์ของเราเช่นกัน แต่เช่นเดียวกับไฟร์วอลล์บนเซิร์ฟเวอร์ของเราฉันต้องการจะป้องกันให้มากที่สุด

ขอบคุณ!

คำตอบ:


13

เปิดใช้งานread-onlyตัวเลือกใน my.cnf นอกจากนี้ยังสามารถระบุเป็นค่าสถานะในบรรทัดคำสั่งโดยใช้--read-onlyกับ mysqld


5
โปรดทราบว่าสิ่งนี้จะไม่ทำงานสำหรับผู้ใช้ระดับสูง (เช่น: ผู้ใช้รูทใน MySQL) เนื่องจากไม่เชื่อฟังแบบอ่านอย่างเดียว
vmfarms

5

เป็นทางเลือกแทนการตั้งค่าread_only=1(เช่นเมื่อมีฐานข้อมูล scratchpad / Reporting / development อื่น ๆ บนอินสแตนซ์สเลฟ) บางครั้งฉันจะตัดสิทธิ์ทั้งหมดนอกเหนือจาก SELECT จากผู้ใช้ทั้งหมดไปยังฐานข้อมูลที่ฉันกำลังทำซ้ำ

นั่นคือหลังจากรันคำสั่งGRANTบนต้นแบบฉันเรียกใช้คำสั่งถอนบนทาส


2

ในฐานะของMySQL 5.7.8ตอนนี้มีsuper_read_onlyตัวเลือกซึ่งจะป้องกันไม่ให้ผู้ใช้ SUPER ทำการอัปเดตไคลเอ็นต์ มันไม่ได้ขัดขวางกระบวนการจำลองแบบ เช่นเดียวกับการตั้งค่าอื่น ๆ ก็สามารถตั้งค่า:

  • ในรูปแบบบรรทัดคำสั่ง ( --super_read_only=ON)
  • เป็นตัวแปรใน my.cnf ( super_read_only=1) หรือ
  • จากพรอมต์ไคลเอนต์ ( SET GLOBAL super_read_only = 1;)

โปรดทราบว่า:

  • การเปิดใช้งานเปิดใช้งานsuper_read_onlyโดยนัยread_only
  • ปิดการใช้งานปิดการใช้งานread_onlyโดยปริยายsuper_read_only

คำเตือนบางอย่าง:

  • ทั้งread_onlyมิได้super_read_onlyจะป้องกันไม่ให้การดำเนินการบนตารางชั่วคราว
  • พวกเขาจะไม่ป้องกันการดำเนินการเมตาดาต้าเช่นวิเคราะห์ตารางและตารางเพิ่มประสิทธิภาพ
  • super_read_onlyมีการรายงานข้อบกพร่องบางอย่างสำหรับการค้นหาที่เปิดใช้งาน

การอ้างอิง: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/


1

ตามที่โพสต์แรกแนะนำให้คุณทำด้วยการอนุญาต ตัวเลือกแบบอ่านอย่างเดียวไม่ทำงานสำหรับผู้ใช้ขั้นสูงในฐานะ FYI และยังไม่ใช่วิธีแก้ปัญหาที่ใช้การได้จริงสำหรับทาสที่คุณต้องการป้องกันการเขียน คุณต้องป้องกันการเขียนด้วยสิทธิ์ผู้ใช้ / ฐานข้อมูล / ตาราง สำหรับหนึ่งผู้ใช้เรพลิเคชันยังคงต้องสามารถเขียนไปยังสลาฟเพื่อให้ซิงค์กับมาสเตอร์ วิธีที่ดีกว่าในการควบคุมการเขียนคือคุณต้องยกเลิกตัวเลือกที่อนุญาตให้มีการเขียน (เช่น - แทรก, สร้าง, ฯลฯ ) สำหรับผู้ใช้ที่สงสัยว่าควรจะอ่านเฉพาะบนทาสเท่านั้น


0

ให้สิทธิ์การจำลองแบบที่เกี่ยวข้องกับผู้ใช้บนทาสเท่านั้น คุณยังคงมีปัญหาของสิทธิ์ผู้ใช้รูท แต่คุณสามารถลบการเข้าถึงรูทระยะไกลไปยังเซิร์ฟเวอร์ฐานข้อมูลได้

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