นี่เป็นชุดสิทธิ์ MySQL ปกติหรือไม่


9

การใช้ phpmyadmin ในการตั้งค่าการทดสอบในเครื่องและมีชื่อผู้ใช้ 3 คนที่ทำเครื่องหมายว่าเป็นผู้ใช้ = ANY, รหัสผ่าน = NO เช่น:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

ไม่มีผู้ใช้ 3 คนที่มีสิทธิ์พิเศษสำหรับตารางใด ๆ ดังนั้นจึงดูเหมือนว่าพวกเขาไม่สามารถทำอะไรได้มากนัก นี่เป็นมาตรการรักษาความปลอดภัยทั่วไปบางประเภทหรือไม่ที่จะระบุอย่างชัดเจนว่าผู้ใช้ 'ใด ๆ ' ที่ไม่ตกอยู่ในกลุ่มผู้ใช้อื่นไม่มีสิทธิ์หรือไม่


นี่เป็นคำถามที่ดีมากเพราะ mysql มาพร้อมกับสิทธิ์เริ่มต้นที่ไม่ได้เผยแพร่ +1 !!!
RolandoMySQLDBA

คำตอบ:


6

ในความเป็นจริงบัญชีผู้ใช้ทั้งสามนั้นค่อนข้างอันตราย พวกเขาเป็นภัยคุกคามที่ดีมากในการทดสอบฐานข้อมูล

น่าเสียดายที่ mysql มาพร้อมกับการเข้าถึงฐานข้อมูลทดสอบอย่างเต็มรูปแบบ คุณจะหาพวกมันได้อย่างไร

เรียกใช้แบบสอบถามนี้:

 SELECT user,host,db from mysql.db;

เมื่อทำการติดตั้ง mysql คุณจะเห็นสองแถวที่ให้การเข้าถึงฐานข้อมูลใด ๆ ที่ชื่อว่า 'test' หรือตัวอักษร 5 ตัวแรกคือ 'test_'

ทำไมถึงเป็นปัญหา ???

ลองใช้คำสั่งนี้:

$ mysql -u'' -Dtest

คุณจะเชื่อมต่อฐานข้อมูลทดสอบโดยไม่ต้องใช้รหัสผ่าน

ตอนนี้สร้างตารางและโหลดด้วยแถว:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

ตกลงเรื่องใหญ่ คุณสามารถเพิ่มตารางนี้เป็นสองเท่าในขนาด 30 ครั้งได้ไหม

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

คุณได้อะไร ตารางที่มี 1,073,741,824 แถว อย่างง่ายดาย 4GB +

ลองนึกภาพการสร้างตารางขนาดใดก็ได้ วิธีการเกี่ยวกับการสร้างกลุ่มตารางในฐานข้อมูลการทดสอบและเข้าถึงพวกเขาได้อย่างอิสระที่จะ?

สิ่งที่ดีที่สุดที่คุณสามารถทำได้ภายใต้สถานการณ์เหล่านี้คือการเรียกใช้แบบสอบถามนี้:

DELETE FROM mysql.db;

และเริ่ม mysql ใหม่ จากนั้นทั้งสามบัญชีจะแสดงผลไม่ถูกต้อง

ให้มันลอง !!!

อัพเดท 2011-09-12 10:00 EDT

การลบนี้:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

เป็นเพียงสิ่งที่คุณต้องการสำหรับการติดตั้งครั้งแรก อย่างไรก็ตามหากคุณมีผู้ใช้งานอยู่แล้วคุณสามารถเปิดใช้งานได้แทน:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

สิ่งนี้จะลบการอนุญาต DB สองตัว

ตามที่ฉันกล่าวถึงในคำตอบของฉันสิทธิ์ทั้งสามมีอันตรายมากสำหรับฐานข้อมูลทดสอบ การเรียกใช้ DELETE นี้จะทำให้บัญชีเหล่านั้นเป็นกลางสำหรับการมีสิทธิ์ในการทดสอบฐานข้อมูล


ขอบคุณสำหรับคำอธิบาย แต่จะลบจาก mysql.db จะลบส่วนอื่นจากผู้ใช้ 3 คนหรือไม่ ฉันไม่ต้องการลบข้อมูล / สิทธิ์นอกเหนือจาก 3
Chris

@Chris - ฉันได้รับคำตอบเมื่อ 3 ชั่วโมงที่ผ่านมาเพื่อแก้ไขความคิดเห็นของคุณ
RolandoMySQLDBA

-1

ความเสี่ยงในการรักษาบัญชีที่ไม่ระบุชื่อเหล่านี้ได้รับการอธิบายอย่างดี

คู่มือมีรายการตรวจสอบที่ครอบคลุมของขั้นตอนในการ " รักษาความปลอดภัยบัญชี MySQL เริ่มต้น "

โดยเฉพาะอย่างยิ่งส่วน "การกำหนดรหัสผ่านของบัญชีที่ไม่ระบุชื่อ" แนะนำให้นำบัญชีเหล่านี้ออก

นอกจากนี้บท "ฐานข้อมูลการทดสอบการรักษาความปลอดภัย" ยังให้คำแนะนำ:

โดยค่าเริ่มต้นmysql.dbตารางมีแถวที่อนุญาตให้มีการเข้าถึงโดยผู้ใช้ใด ๆ ไปยังtestฐานข้อมูลและฐานข้อมูลอื่น ๆ test_ที่มีชื่อที่ขึ้นต้นด้วย (... ) ซึ่งหมายความว่าฐานข้อมูลดังกล่าวสามารถใช้งานได้แม้กับบัญชีที่ไม่มีสิทธิ์พิเศษ หากคุณต้องการลบการเข้าถึงฐานข้อมูลทดสอบของผู้ใช้ให้ทำดังนี้:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(... ) เมื่อมีการเปลี่ยนแปลงก่อนหน้านี้เฉพาะผู้ใช้ที่มีสิทธิ์ฐานข้อมูลส่วนกลางหรือสิทธิ์ที่ได้รับอย่างชัดเจนสำหรับฐานข้อมูลทดสอบสามารถใช้งานได้

โดยเฉพาะอย่างยิ่งในระบบที่ไม่ใช่ Windows ขอแนะนำให้เรียกใช้mysql_secure_installationสคริปต์ ฉันเชื่อว่าตัวติดตั้ง Windows มีโปรไฟล์การติดตั้งหลายตัว บางส่วนจะปิดใช้งานการตั้งค่าที่ไม่ปลอดภัยโดยอัตโนมัติ ถ้าไม่ทำรายการตรวจสอบจะต้องดำเนินการด้วยตนเอง

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


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