มันจะโอเคที่จะทำซ้ำฐานข้อมูล `mysql 'หรือไม่?


15

เมื่อฉันเริ่มตั้งค่าการจำลองแบบต้นแบบถึงต้นแบบฉันใช้:

binlog-ignore-db=mysql

และได้รับการซิงค์บัญชีผู้ใช้และมอบด้วยตนเอง นี่เป็นเพียงวิธีการทำในวิธีการที่ฉันใช้ในขณะนั้น แต่มีเหตุผลใดที่ฉันไม่ควรลบบรรทัดนี้และอนุญาตให้mysqlฐานข้อมูลตัวเองทำซ้ำเช่นกัน?

ถ้าเป็นเช่นนั้น: ก่อนที่ฉันจะทำการเปลี่ยนแปลงนอกจากให้แน่ใจว่าทุนทั้งหมดเหมือนกันทั้งสอง (หรือระบุไว้ดีกว่าว่าฐานข้อมูล mysql ทั้งหมดเหมือนกัน) มีอะไรอีกบ้างที่ฉันควรตรวจสอบอีกครั้งหรือระวัง?


ตลอดระยะเวลา 4.5 ปีที่ผ่านมาฉันพยายามต่อสู้กับปัญหาการจำลองแบบตลอดเวลาเมื่อทำการอัพเกรด mysql แม้จะเป็นการอัพเกรดเล็กน้อยก็ตาม เหตุผลก็คือapt-get upgrade(จริง ๆ แล้ว mysql-server .deb postinst script) จะเรียกใช้งานALTER TABLE userคำสั่งที่ไม่สามารถทำซ้ำได้ ฉันโพสต์วิธีแก้ปัญหาการทำงานที่serverfault.com/questions/686025/…
dlo

คำตอบ:


12

มันเป็นไปได้ทั้งหมดเพื่อให้ตัวเองสิทธิ์ MySQL โดยไม่ทราบว่าคำสั่ง SQL GRANT

ตัวอย่าง: นี่คือการสร้างผู้ใช้ของคุณเองด้วยสิทธิ์เต็มรูปแบบโดยใช้ SQL GRANT จากทุกที่ที่เรียกว่า superdba ด้วยรหัสผ่านของ ClarkKent:

GRANT ALL PRIVILEGES ON *.* TO superdba@'%' IDENTIFIED BY 'ClarkKent' WITH GRANT OPTION; 

นี่คือวิธีที่คุณสามารถทำได้โดยไม่ต้องใช้คำสั่ง GRANT:

ก่อนอื่นนี่คือ mysql.user สำหรับ MySQL 5.1.51

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

เพียงรันคำสั่ง SQL เหล่านี้:

INSERT INTO mysql.user SET
Host='%',User='superdba',Password=PASSWORD('ClarkKent'),
Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',
Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',
Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',
Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',
Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',
Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',
Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',
Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y';
FLUSH PRIVILEGES;

INSERT นั้นเป็นคำสั่ง SQL ทางกฎหมายที่สามารถลงจอดในบันทึกไบนารี คุณต้องการให้ใครบางคนทำงานนี้และมีรหัสผ่านที่มองเห็นได้เดินทางข้ามเครือข่ายหรือไม่? นั่งในบันทึกไบนารีบนต้นแบบหรือไม่ นั่งในบันทึกการถ่ายทอดบนทาส?

มีคำสั่งนี้

binlog-ignore-db=mysql       

ป้องกันการมอบสิทธิ์ mysql โดยใช้ SQL เช่นนั้น อย่างไรก็ตาม GRANT ไม่สามารถหยุดได้ด้วยวิธีนี้ ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ให้สิทธิ์เช่นนี้:

SET SQL_LOG_BIN=0;
GRANT ...

เพื่อป้องกันไม่ให้ GRANTs เคลื่อนที่จากต้นแบบไปเป็นทาส


โอ้เดี๋ยวก่อน ... ฉันสับสน: คุณกำลังบอกว่าข้อความ GRANT ทำซ้ำไม่ว่า binlog-ละเว้น-db conf จะบอกว่าอย่างไร? ฉันรู้ว่าถ้าฉันสร้างผู้ใช้ใหม่บนเซิร์ฟเวอร์หนึ่งผู้ใช้นั้นไม่ปรากฏบนอีกเซิร์ฟเวอร์หนึ่ง ดังนั้นคุณอาจหมายถึงว่า GRANT ได้รับการส่งและจัดเก็บ แต่ไม่ได้ใช้กับทาส?
dlo

GRANTS ถูกนำไปใช้โดยไม่มีสิ่งกีดขวางบนถนน นั่นคือสาเหตุที่คุณต้องรัน SET SQL_LOG_BIN = 0; ในเซสชัน mysql เพื่อป้องกันคำสั่ง GRANT จากการป้อนไบนารีบันทึก
RolandoMySQLDBA

เงินช่วยเหลือถูกนำไปใช้โดยไม่มีการปิดกั้นบนเจ้านายและทาส นั่นคือสาเหตุที่คุณต้องรัน SET SQL_LOG_BIN = 0; ในเซสชั่น mysql เพื่อป้องกันไม่ให้คำสั่ง GRANT จากการป้อนไบนารีบันทึกและเข้าไปในบันทึกการถ่ายทอดของทาส
RolandoMySQLDBA

1
ตกลง. เพื่อให้ชัดเจนสำหรับผู้อื่นฉันเชื่อว่าคุณเตือนฉันเกี่ยวกับ GRANTS เปิดเผยรหัสผ่านในการขนส่ง (ซึ่งสามารถแก้ไขได้ด้วยคำแนะนำ SSL โดย Scott) และถูกเก็บไว้ในข้อความที่แยกต่างหากใน binlog คุณกำลังแนะนำว่าถ้าสิ่งเหล่านี้เป็นปัญหาสำหรับฉันฉันควรใช้ทั้งbinlog-ละเว้น-db = mysql และ SET SQL_LOG_BIN = 0; แต่ถ้าฉันตกลงกับเงื่อนไขเหล่านั้นก็ไม่มีปัญหาใด ๆ กับการจำลองแบบ GRANTs โดยลบบรรทัด binlog-ละเว้น-db แก้ไขฉันหากนี่เป็นข้อสรุปที่ไม่ถูกต้อง
dlo

@dlo - ยืนยันแล้ว !!!
RolandoMySQLDBA

4

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

หากคุณกังวลมากเกินไปกับคนที่อยู่ตรงกลางเซพชั่นมีตัวเลือกในการส่งการเรพลิเคทข้าม SSLเสมอ

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