Remote Access MySQL

Tác giả admin+, T.Ba 14, 2011, 10:00:22 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Remote Access MySQL


Theo mặc định, máy chủ cơ sở dữ liệu MySQL truy cập từ xa bị vô hiệu hóa vì lý do bảo mật. Tuy nhiên, đôi khi bạn cần cung cấp quyền truy cập từ xa vào máy chủ cơ sở dữ liệu từ nhà hoặc từ máy chủ web.


Truy cập từ xa MySQL

Bạn cần gõ các lệnh sau sẽ cho phép kết nối từ xa:

Bước 1: Đăng nhập qua ssh nếu máy chủ nằm ngoài IDC của bạn

Đầu tiên, đăng nhập qua ssh vào máy chủ cơ sở dữ liệu MySQL từ xa

Bước 2: Kích hoạt kết nối mạng

Sau khi kết nối, bạn cần chỉnh sửa tệp cấu hình mysql my.cfg bằng trình soạn thảo văn bản như vi.

    * Nếu bạn đang sử dụng tệp Debian Linux được đặt tại vị trí /etc/mysql/my.cnf
    * Nếu bạn đang sử dụng tệp Red Hat Linux / Fedora / Centos Linux được đặt tại vị trí /etc/my.cnf
    * Nếu bạn đang sử dụng FreeBSD, bạn cần tạo một tệp /var/db/mysql/my.cnf

Mã nguồn [Chọn]
# vi /etc/my.cnf
Bước 3: Sau khi mở tệp, xác định vị trí dòng đọc như sau

Đảm bảo bỏ skip-networking (hoặc xóa dòng) và thêm dòng sau:

Mã nguồn [Chọn]
bind-address=YOUR-SERVER-IP
Ví dụ: nếu IP máy chủ MySQL của bạn là 65.55.55.2 thì toàn bộ khối sẽ giống như sau:

Mã nguồn [Chọn]
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 65.55.55.2
# skip-networking
....

Trong đó

* bind-address: Địa chỉ IP để liên kết.
* skip-networking: Không nghe tất cả các kết nối TCP / IP. Tất cả các tương tác với mysqld phải được thực hiện thông qua các Unix sockets. Tùy chọn này rất được khuyến khích cho các hệ thống chỉ cho phép các yêu cầu cục bộ. Vì bạn cần cho phép kết nối từ xa, dòng này sẽ bị xóa khỏi tệp hoặc đặt nó ở trạng thái đã được comment #.

Bước 4: Lưu và đóng tệp

Khởi động lại dịch vụ mysql của bạn để thay đổi có hiệu lực:

Mã nguồn [Chọn]
# /etc/init.d/mysql restart
Bước 5 Cấp quyền truy cập vào địa chỉ IP từ xa

# mysql -u root -p mysql Grant truy cập vào cơ sở dữ liệu mới

Nếu bạn muốn thêm cơ sở dữ liệu mới gọi là foo cho thanh người dùng và IP từ xa 202.54.10.20 thì bạn cần phải nhập các lệnh sau tại mysql> prompt: mysql> CREATE DATABASE foo;

Mã nguồn [Chọn]
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';
Làm thế nào để tôi cấp quyền truy cập vào cơ sở dữ liệu hiện có?

Giả sử rằng bạn luôn tạo kết nối từ IP từ xa được gọi là 202.54.10.20 cho cơ sở dữ liệu được gọi là webdb cho người dùng webadmin, Để cấp quyền truy cập vào địa chỉ IP này, hãy nhập lệnh sau Tại mysql> prompt cho cơ sở dữ liệu hiện có:

Mã nguồn [Chọn]
mysql> update db set Host = '202.54.10.20' trong đó Db = 'webdb';
Mã nguồn [Chọn]
mysql> update user set Host='202.54.10.20' where user='webadmin';
Bước 5: Thoát khỏi MySQL

Gõ lệnh exit để đăng xuất mysql: mysql> exit

Bước 6: Mở cổng 3306

Bạn cần mở cổng 3306 bằng tường lửa iptables hoặc BSD pf.

Một quy tắc iptables mẫu để mở tường lửa iptables Linux

Mã nguồn [Chọn]
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
Hoặc chỉ cho phép kết nối từ xa từ máy chủ web của bạn tại 10.5.1.3:

Mã nguồn [Chọn]
/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT
Hoặc chỉ cho phép kết nối từ xa từ mạng con lan 192.168.1.0/24:

Mã nguồn [Chọn]
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT
Một quy tắc pf FreeBSD / OpenBSD mẫu (/etc/pf.conf)

Chuyển vào $ ext_if proto tcp từ bất kỳ đến bất kỳ cổng 3306 nào

Hoặc chỉ cho phép truy cập từ máy chủ web của bạn tại 10.5.1.3:

Chuyển vào $ ext_if proto tcp từ 10.5.1.3 đến bất kỳ cổng 3306 cờ S / SA trạng thái synproxy

Bước 7: Kiểm tra nó

Từ hệ thống từ xa hoặc máy tính để bàn của bạn gõ lệnh:

Mã nguồn [Chọn]
$ mysql -u webadmin anh 65.55.55.2.
Trong đó:
    * -u webadmin: webadmin là tên người dùng MySQL
    * -h IP hoặc tên máy chủ: 65.55.55.2 là địa chỉ IP của máy chủ MySQL hoặc tên máy chủ (FQDN)
    * -p: Nhắc mật khẩu

Bạn cũng có thể sử dụng telnet để kết nối với cổng 3306 cho mục đích thử nghiệm: $ telnet 65.55.55.2 3306