จะให้สิทธิ์การเข้าถึง MySQL จากระยะไกลสำหรับซับเน็ตทั้งหมดได้อย่างไร


94

ฉันสามารถให้สิทธิ์การเข้าถึง IP เดียวโดยใช้รหัสนี้:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

แต่ฉันต้องอนุญาตให้ซับเน็ตทั้งหมด 192.168.1. * เพื่อเข้าถึงฐานข้อมูลจากระยะไกล

ฉันจะทำเช่นนั้นได้อย่างไร?

คำตอบ:


101

แก้ไข: พิจารณาดูและยกระดับคำตอบของMalvineousในหน้านี้ Netmasks เป็นโซลูชันที่หรูหรากว่ามาก


เพียงใช้เครื่องหมายเปอร์เซ็นต์เป็นสัญลักษณ์แทนในที่อยู่ IP

จากhttp://dev.mysql.com/doc/refman/5.1/en/grant.html

คุณสามารถระบุสัญลักษณ์แทนในชื่อโฮสต์ ตัวอย่างเช่นuser_name@'%.example.com'ใช้กับuser_nameโฮสต์ใด ๆ ในexample.comโดเมนและuser_name@'192.168.1.%'ใช้กับuser_nameโฮสต์ใด ๆ ใน192.168.1ซับเน็ตคลาส C


6
ฉันเพิ่งทำแบบนี้ แต่พูดว่าอะไรทำให้มันใช้ไม่ได้กับ: user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? ตอนนี้ฉันจะเดินต่อไปเนื่องจากนี่คือ MySQL ฉันรู้สึกว่าฉันไม่ต้องการรู้คำตอบ
Florian Heigl

+ Florian ฉันคิดว่ามันเต้นง่ายๆโดยใช้ '%' เพราะมันเพิ่มชั้นความปลอดภัยที่ต้องเอาชนะ แต่ฉันคิดว่าคุณมีจุดที่ดีเกี่ยวกับจุดอ่อนของมัน ฉันเสริมการกำหนดค่านี้ด้วยวิธีการอื่นอย่างแน่นอนเช่นการล็อกเซิร์ฟเวอร์ฐานข้อมูลในเครือข่ายย่อยแยกต่างหากที่ฉันสามารถควบคุมการเข้าถึงผ่านไฟร์วอลล์เพื่อลบล้างข้อกังวลของคุณเหนือสิ่งอื่นใด
Josiah

22
ตัวอย่างเช่น '192.168.1.my-hacked-rnds.killing.mysql.com' 'ได้รับการแก้ไขโดยเฉพาะในdev.mysql.com/doc/refman/5.5/en/account-names.html : หากต้องการหลีกเลี่ยงความพยายามดังกล่าว MySQL ไม่อนุญาตให้จับคู่ชื่อโฮสต์ที่ขึ้นต้นด้วยตัวเลขและจุด ... ค่า IP wildcard สามารถจับคู่ได้เฉพาะที่อยู่ IP เท่านั้นไม่ใช่ชื่อโฮสต์
Stefan Lasiewski

119

มันดูเหมือนว่าคุณยังสามารถใช้ netmaskเช่น

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
นี่ควรเป็นคำตอบที่ยอมรับได้เนื่องจากเป็นคำตอบที่ถูกต้องทางเทคนิคเท่านั้น รองรับตั้งแต่อย่างน้อย 5.5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
อย่าพยายามใช้รูปแบบ CIDR เช่น "172.16.0.0/16" สิ่งนี้ไม่ได้ผล ใช้ netmask เต็มรูปแบบเสมอ
Oliver R.

ดูเหมือนว่าคุณต้องใช้ที่อยู่ IP แรกในช่วง การใช้ตัวอย่าง 192.168.0.34/255.255.255.0 จะล้มเหลว!
Sander

@SanderBackus: 192.160.0.34/255.255.255.0เหมือนกับ192.168.0.34/24ที่ไม่สมเหตุสมผลจริงๆ ( /24หมายถึงตัวเลขสุดท้ายอาจอยู่ระหว่าง 0 ถึง 255 โดยไม่สนใจค่าของคุณที่ 34) ใช้งานได้หรือไม่หากคุณใช้มาสก์ที่ถูกต้องสำหรับ IP เช่น192.168.0.34/255.255.255.252?
Malvineous

@Malvineous นั่นคือประเด็นของฉัน หากคุณใช้ 192.160.0.34/255.255.255.0 mysql ไม่อนุญาตให้ 192.160.0.34 ฉันตั้งใจจะอนุญาตเต็ม / 24 (ใช่ฉันใช้ netmask เต็มรูปแบบตามที่บันทึกไว้) แต่เห็นได้ชัดว่าถ้าคุณต้องใช้ 192.160.0.0/255.255.255.0 เพื่ออนุญาตให้ใช้งานแบบเต็ม
Sander



5

เพียงแค่ทราบถึงความไม่ชอบมาพากลที่ฉันเผชิญ:
พิจารณา:

db server:  192.168.0.101
web server: 192.168.0.102

หากคุณมีผู้ใช้ที่กำหนดไว้ใน mysql.user เช่นเดียว'user'@'192.168.0.102'กับรหัสผ่าน 1 และอีกรายการที่'user'@'192.168.0.%'มีรหัสผ่าน 2

จากนั้น

หากคุณพยายามเชื่อมต่อกับเซิร์ฟเวอร์ db จากเว็บเซิร์ฟเวอร์ในฐานะ 'ผู้ใช้' ด้วยรหัสผ่าน 2

จะส่งผลให้เกิดข้อผิดพลาด 'การเข้าถึงถูกปฏิเสธ' เนื่องจากการ'user'@'192.168.0.102'ตรวจสอบความถูกต้องIP เดียว ถูกใช้ในการ'user'@'192.168.0.%'รับรองความถูกต้องโดยตัวแทน


2
ฉันไม่แน่ใจว่านี่เป็นคำตอบสำหรับคำถามนี้ หากไม่ได้ให้คำตอบโดยตรงสำหรับคำถามเดิมควรโพสต์เป็นความคิดเห็น
Kmeixner

13
Kmeixner คุณคาดหวังให้เขาเขียนความคิดเห็นมากขนาดนั้นเลยเหรอ? ใช้สามัญสำนึกและเลิกเป็นหุ่นยนต์ ชุมชนนี้มีไว้เพื่อช่วยเหลือนักพัฒนาไม่ให้ชีวิตลำบาก
user1735921

0

หลังจากที่คุณเชื่อมต่อเซิร์ฟเวอร์และคุณต้องการเชื่อมต่อบนโฮสต์ของคุณคุณควรทำตามขั้นตอนด้านล่าง:

  1. เขียนmysqlเพื่อเปิด mysql
  2. เขียน GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect' ;
  3. กด control และ X เพื่อออกจาก mysql
  4. เขียน nano /etc/mysql/my.cnf
  5. เขียน # ก่อนผูกที่อยู่ = 127.0.0.1ในโฟลเดอร์ my.cnf
  6. # bind-address = 127.0.0.1
  7. บันทึกโฟลเดอร์ my.cnf ด้วย control + X
  8. เขียน service mysql restart
  9. คุณสามารถเชื่อมต่อผ่าน navicat บนโฮสต์ของคุณ

0

ได้รับแรงบันดาลใจจากคำตอบของ @Malvineaus ฉันลองด้วยตัวเองและสังเกตว่ามันไม่ได้ผลสำหรับฉัน

คุณสามารถระบุซับเน็ตมาสก์ด้วย "192.168.1.%" หรือ "192.168.1.0/255.255.255.0" แต่ซับเน็ตจะต้องอยู่ในอ็อกเท็ตที่สมบูรณ์เสมอ ดูhttps://mariadb.com/kb/en/create-user/#host-name-component https://mariadb.com/kb/en/create-user/#host-name-componentเป็นผลให้ฟังก์ชันการทำงานระหว่างข้อกำหนดทางเดียวกับอีกทางหนึ่งเหมือนกัน

ตัวอย่างเช่น '192.168.1.0/255.255.255.128' จะไม่ทำงานเนื่องจากไม่อยู่ในขอบเขตออคเต็ตที่สมบูรณ์

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