Mysql thêm người dùng để truy cập từ xa


148

Tôi đã tạo người dùng user@'%'với password 'password. Nhưng tôi không thể kết nối với:

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

Khi tôi tạo người dùng user@'localhost', tôi đã có thể kết nối. Tại sao? Không '%' có nghĩa là từ BẤT K host máy chủ nào?


Lưu ý rằng mật khẩu cho người dùng @ localhost và người dùng @% nói chung khác nhau, cũng như các đặc quyền.
Jose Manuel Gomez Alvarez

Câu trả lời:


377

Để kết nối từ xa, bạn phải có cổng kết nối MySQL 3306 với địa chỉ IP của máy trong my.cnf. Sau đó, bạn phải tạo người dùng bằng cả ký tự cục bộ và '%' và cấp quyền cho tất cả các DB như vậy . Xem bên dưới:

my.cnf (my.ini trên windows)

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

sau đó

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

Sau đó

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

Tùy thuộc vào hệ điều hành của bạn, bạn có thể phải mở cổng 3306 để cho phép kết nối từ xa.


1
Điều này giúp tôi với việc sử dụng một cá thể MySQL riêng của WebFaction. Tôi đã làm theo các bước TẠO NGƯỜI DÙNG và CẤP TẤT CẢ của bạn, được đặt mysql.default_port = <private instance port>trong php.ini của tôi và sau đó được sử dụng 127.0.0.1xuyên suốt cho tên máy chủ db của tôi
spex

Rất hữu ích. Chỉ là một nhận xét. my.cnf có thể bao gồm một tệp cấu hình khác để dòng có liên quan có thể ở một nơi khác. Trong my.cnf, hãy tìm một dòng bắt đầu bằng! Bao gồm, nếu địa chỉ liên kết không có trong my.cnf, nó có thể nằm trong tệp được bao gồm.
tru7

Tập tin my.cnf ở đâu?
Vladimir Despotovic

7
đừng quên
FLIV

4
Tại sao cả localhost và%?
đêm

21

Làm theo hướng dẫn (bước 1 đến 3 không cần thiết trong windows):

  1. Tìm cấu hình mysql để chỉnh sửa:

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

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

  2. Tìm bind-address=127.0.0.1trong thay đổi tệp cấu hình bind-address=0.0.0.0(bạn có thể đặt địa chỉ liên kết thành một trong các giao diện ips của mình hoặc như tôi sử dụng 0.0.0.0)

  3. Khởi động lại dịch vụ mysql chạy trên bàn điều khiển: service restart mysql

  4. Tạo người dùng với mật khẩu an toàn cho kết nối từ xa. Để thực hiện việc này, hãy chạy lệnh sau trong mysql (nếu bạn là người dùng linux để chạy giao diện điều khiển mysql mysqlvà nếu bạn đặt mật khẩu cho root run mysql -p):

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

Bây giờ bạn nên có một người dùng có tên uservà mật khẩu safe_passwordcó khả năng kết nối từ xa.


2
thay đổi địa chỉ liên kết = 0.0.0.0 ... đã làm việc cho tôi. và cấp đặc quyền
zwitterion

12

DB là gì? nhìn vào ví dụ này

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)

Vì vậy, để trả về cho bạn câu hỏi toán tử "%" có nghĩa là tất cả các máy tính trong mạng của bạn.

như aspesa cho thấy tôi cũng chắc chắn rằng bạn phải tạo hoặc cập nhật người dùng. tìm kiếm tất cả người dùng mysql của bạn:

SELECT user,password,host FROM user;

Ngay sau khi bạn thiết lập người dùng của mình, bạn sẽ có thể kết nối như thế này:

mysql -h localhost -u gmeier -p

hy vọng nó giúp


nói chung, cho tất cả db. Tôi chỉ muốn kết nối, không chọn DB. codemysql_connect ('localhost: 3306', 'người dùng', 'mật khẩu'); code
dùng2333586

Bạn đang dùng hệ điều hành nào, Windows, Linux ??
apesa

các cửa sổ. máy chủ ướt.
user2333586

Bạn sẽ cần đảm bảo địa chỉ IP của bạn được liên kết với cổng 3306. Trong các cửa sổ, bạn có thể sử dụng netstat -n để xem cổng nào được liên kết với IP của bạn. Nếu bạn thấy 127.0.0.1:3306, bạn sẽ không thể kết nối từ bất cứ thứ gì ngoài localhost
apesa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.