Mysql เพิ่มผู้ใช้สำหรับการเข้าถึงระยะไกล


148

ฉันสร้างผู้ใช้ด้วยuser@'%' password 'passwordแต่ฉันไม่สามารถเชื่อมต่อกับ:

mysql_connect('localhost:3306', 'user', 'password');

เมื่อฉันสร้างผู้ใช้user@'localhost'ฉันก็สามารถเชื่อมต่อได้ ทำไม? ไม่ได้หมายความว่า '%' จากโฮสต์ใด ๆ


โปรดทราบว่ารหัสผ่านสำหรับ user @ localhost และ user @% นั้นแตกต่างกันโดยทั่วไปเช่นเดียวกับสิทธิ์
Jose Manuel Gomez Alvarez

คำตอบ:


378

ในการเชื่อมต่อจากระยะไกลคุณต้องมี MySQL ผูกพอร์ต 3306 กับที่อยู่ IP ของเครื่องใน my.cnf แล้วคุณจะต้องมีการสร้างผู้ใช้ทั้งในและ localhost '%' สัญลักษณ์แทนและให้สิทธิ์ในทุก DB ของดังกล่าว ดูด้านล่าง:

my.cnf (my.ini บน windows)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

แล้วก็

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

แล้วก็

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
flush privileges;

ขึ้นอยู่กับระบบปฏิบัติการของคุณคุณอาจต้องเปิดพอร์ต 3306 เพื่ออนุญาตการเชื่อมต่อระยะไกล


1
สิ่งนี้ช่วยฉันในการใช้อินสแตนซ์ MySQL ส่วนตัวของ WebFaction ผมทำตามที่ผู้ใช้สร้างของคุณและขั้นตอนการ GRANT ALL ตั้งmysql.default_port = <private instance port>ใน php.ini ของฉันแล้วใช้127.0.0.1ตลอดสำหรับชื่อโฮสต์ฐานข้อมูลของฉัน
Spex

มีประโยชน์มาก. เพียงแสดงความคิดเห็น my.cnf อาจรวมไฟล์การกำหนดค่าอื่นไว้ดังนั้นบรรทัดที่เกี่ยวข้องอาจอยู่ที่อื่น ใน my.cnf ค้นหาบรรทัดที่ขึ้นต้นด้วย! include หาก bind-address ไม่อยู่ใน my.cnf อาจอยู่ในไฟล์ที่รวมอยู่
tru7

ไฟล์ my.cnf อยู่ที่ไหน
Vladimir Despotovic

7
อย่าลืมที่จะล้างสิทธิ;)
volkovmqx

4
ทำไมต้องเป็นทั้ง localhost และ%
คืน

21

ทำตามคำแนะนำ (ไม่จำเป็นต้องใช้ขั้นตอนที่ 1 ถึง 3 ใน windows):

  1. ค้นหาการกำหนดค่า mysql เพื่อแก้ไข:

    /etc/mysql/my.cnf (Mysql 5.5)

    /etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  2. ค้นหาbind-address=127.0.0.1ในการเปลี่ยนแปลงไฟล์bind-address=0.0.0.0กำหนดค่า (คุณสามารถตั้งค่าที่อยู่ผูกเป็นหนึ่งใน ips อินเตอร์เฟซของคุณหรือชอบฉันใช้ 0.0.0.0)

  3. เริ่มบริการ mysql ใหม่บนคอนโซล: service restart mysql

  4. สร้างผู้ใช้ด้วยรหัสผ่านที่ปลอดภัยสำหรับการเชื่อมต่อระยะไกล ในการทำสิ่งนี้ให้เรียกใช้คำสั่งต่อไปนี้ใน mysql (หากคุณเป็นผู้ใช้ linux ในการเข้าถึง mysql console run mysqlและหากคุณตั้งรหัสผ่านสำหรับ root run mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`
    

ตอนนี้คุณควรมีผู้ใช้ชื่อuserและรหัสผ่านsafe_passwordด้วยความสามารถในการเชื่อมต่อระยะไกล


2
เปลี่ยน bind-address = 0.0.0.0 ... ที่ได้ผลสำหรับฉัน และให้สิทธิ์พิเศษ
zwitterion

12

ผู้ใช้ DB คืออะไร? ดูตัวอย่างนี้

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

ดังนั้นหากต้องการกลับไปถามคำถามตัวดำเนินการ "%" หมายถึงคอมพิวเตอร์ทุกเครื่องในเครือข่ายของคุณ

เช่นเดียวกับที่ aspesa แสดงฉันยังมั่นใจว่าคุณต้องสร้างหรืออัปเดตผู้ใช้ มองหาผู้ใช้ mysql ทั้งหมดของคุณ:

SELECT user,password,host FROM user;

ทันทีที่คุณตั้งค่าผู้ใช้คุณควรจะสามารถเชื่อมต่อเช่นนี้:

mysql -h localhost -u gmeier -p

หวังว่ามันจะช่วย


โดยทั่วไปสำหรับฐานข้อมูลทั้งหมด ฉันต้องการเชื่อมต่อไม่ใช่เพื่อเลือก DB codemysql_connect ('localhost: 3306', 'user', 'password'); code
user2333586

คุณใช้ระบบปฏิบัติการอะไร Windows, Linux ??
apesa

หน้าต่าง เซิร์ฟเวอร์ wamp
user2333586

คุณจะต้องตรวจสอบให้แน่ใจว่าที่อยู่ IP ของคุณถูกผูกไว้กับพอร์ต 3306 ในหน้าต่างคุณอาจใช้ netstat -n เพื่อดูว่าพอร์ตใดที่ถูกผูกไว้กับ IP ของคุณ หากคุณเห็น 127.0.0.1:3306 คุณจะไม่สามารถเชื่อมต่อจากสิ่งอื่นใดนอกจาก localhost
apesa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.