Thứ Năm, 23 tháng 4, 2015

BẬT TÍNH NĂNG TRUY CẬP TỪ XA CỦA MYSQL SERVER


Mặc định tính năng truy cập từ xa bị cấm trên máy chủ cơ sở dữ liệu MySQL vì lý do bảo mật. Tuy nhiên, đôi khi bạn cần cung cấp tính năng truy cập từ xa tới máy chủ cơ sở dữ liệu từ nhà hoặc từ máy chủ web.


Truy cập MySQL từ xa

Bạn cần phải gõ các lệnh sau để bật tính năng truy cập từ xa.

Bước  # 1: Truy cập sử dụng SSH (nếu máy chủ bên ngoài trung tâm dữ liệu của bạn)

Đầu tiên, đăng nhập bằng SSH tới máy chủ MySQL:
ssh user@mysql.nixcraft.i

Bước # 2: Sửa tập tin my.cnf

Sau khi đã kết nối thành công bạn cần sửa tập tin cấu hình MySQL là  my.cnf bằng cách sử dụng một công cụ soạn thảo ví dụ vi.
  • Nếu bạn sử dụng Debian Linux thì tập tin cấu hình được lưu ở /etc/mysql/my.cnf
  • Nếu bạn sử dụng Red Hat Linux/Fedora/Centos Linux thì tập tin cấu hình được lưu ở /etc/my.cnf
  • Nếu bạn sử dụng FreeBSD thì tập tin cấu hình được lưu ở /var/db/mysql/my.cnf
Sửa /etc/my.cnf, bằng cách gõ lệnh:
# vi /etc/my.cnf

Bước # 3: Khi đã mở tập tin, tìm các dòng sau

[mysqld]
Chắc chắn là dòng skip-networking được đặt sau ký tự # hoặc bị xóa đi và thêm các dòng sau:
bind-address=YOUR-SERVER-IP
Ví dụ, nếu máy của MySQL của bạn có IP là 65.55.55.2 thì nội dung cấu hình sẽ đặt như sau:
[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 để gán vào.
  • skip-networking : Không lăng nghe bất kỳ kết nối TCP/IP nào hếtl.Tất cả các tương tác với mysqld phải thông qua Unix sockets. Tùy chọn này được khuyến cáo sử dụng ở những hệ thống mà chỉ chấp nhận yêu cầu cục bộ. Khi bạn cần dùng tính năng truy cập từ xa thì phải bỏ dòng này trong tập tin my.cnf hoặc thêm ký tự # vào trước dòng.

Bước # 4 Lưu và đóng tập tin

Khởi động lại máy chủ MySQL bằng cách gõ:
# /etc/init.d/mysql restart

Bước # 5 Gán quyển truy cập cho địa chỉ IP

Kết nối tới máy chủ MySQL:
$ mysql -u root -p mysql

Gán truy cập tới một cơ sở dữ liệu mới

Nếu bạn muốn thêm một cơ sở dữ liệu mới là foo cho người dùng bar và địa chỉ IP là 202.54.10.20 thì bạn cần gõ lệnh sau:
mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@’202.54.10.20′ IDENTIFIED BY ‘PASSWORD’;

Làm sao để gán truy cập tới một cơ sở dữ liệu đã có sẵn?

Giả sử bạn luôn tạo kết nối từ IP 202.54.10.20 cho cơ sở dữ liệu webdb của người dùng webadmin, Để gán truy cập cho IP này, bạn gõ dòng lệnh sau:
mysql> update db set Host=’202.54.10.20′ where Db=’webdb’;
mysql> update user set Host=’202.54.10.20′ where user=’webadmin’;

Bước # 5: Thoát khỏi MySQL

Gõ lệnh thoát để thoát khỏi mysql: mysql> exit

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

Bạn cần mở cổng 3306 bằng cách sử dụng iptables hoặc BSD pf firewall.

Ví dụ luật của iptables để mở iptables firewall

/sbin/iptables -A INPUT -i eth0 -p tcp –destination-port 3306 -j ACCEPT
hoặc chỉ cho phép truy cập từ xa từ máy chủ  web đặt ở 10.5.1.3:
/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp –destination-port 3306 -j ACCEPT
hoặc chỉ cho phép truy cập từ xa từ subnet của mạng LAN của bạn 192.168.1.0/24:
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp –destination-port 3306 -j ACCEPT
Cuối cùng lưu tất cả các luật:
# service iptables save

Ví dụ luật của FreeBSD / OpenBSD pf ( /etc/pf.conf)

pass in on $ext_if proto tcp from any to any port 3306
hoặc chỉ cho phép truy cập từ máy chủ web ở địa chỉ: 10.5.1.3:
pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306  flags S/SA synproxy state

Bước # 7: Kiểm tra

Từ máy hệ thống từ xa hoặc trên máy của bạn gõ lệnh sau:
$ mysql -u webadmin –h 65.55.55.2 –p
Trong đó,
  • -u webadmin: webadmin là tên truy cập vào MySQL
  • -h IP or hostname: 65.55.55.2 là địa chỉ IP máy chủ MySQL hoặc hostname (FQDN)
  • -p : Hỏi mật khẩu
Bạn có thể sử dụng để kết nối tới cổng 3306 để kiểm tra:
$ telnet 65.55.55.2 3306

Không có nhận xét nào:

Đăng nhận xét