Cách cho phép kết nối từ xa với MySQL

Nếu bạn đang làm việc với cơ sở dữ liệu MySQL(MySQL database) , thì bạn đã biết về những thách thức bạn phải đối mặt trong việc giữ an toàn cho cơ sở dữ liệu của mình. Từ những nỗ lực hack cơ sở dữ liệu bằng cách sử dụng SQL injection đến các cuộc tấn công bạo lực, thật khó để giữ cho dữ liệu của bạn an toàn, đặc biệt nếu bạn đang làm việc với cơ sở dữ liệu từ xa.

Có nhiều cách để cấu hình máy chủ SQL để cho phép kết nối từ xa, nhưng bạn cần phải cẩn thận, vì việc cho phép kết nối từ xa trên máy chủ MySQL có thể khiến cơ sở dữ liệu của bạn trở thành mục tiêu dễ dàng cho tin tặc. Nếu bạn muốn cho phép các kết nối từ xa, an toàn tới cơ sở dữ liệu MySQL , đây là những điều bạn cần biết.

Trước khi bắt đầu(Before You Begin)

Trước khi bạn thực hiện bất kỳ thay đổi nào đối với cơ sở dữ liệu MySQL của mình , điều quan trọng là bạn phải sao lưu cơ sở dữ liệu của mình(backup your database) , đặc biệt nếu bạn đang làm việc trên máy chủ sản xuất (máy chủ đang được sử dụng). Bất kỳ thay đổi nào bạn thực hiện đối với cơ sở dữ liệu của mình hoặc máy chủ lưu trữ nó, có thể dẫn đến mất dữ liệu nghiêm trọng nếu có sự cố.

Bạn cũng có thể thấy rằng những thay đổi đối với kết nối của máy chủ có thể khiến bạn không thể truy cập sau đó. Nếu điều này xảy ra, bạn có thể cần tham khảo ý kiến ​​của quản trị viên máy chủ để được hỗ trợ thêm. Một ý tưởng hay là thử bất kỳ thay đổi nào trên máy chủ MySQL(MySQL) chạy cục bộ để kiểm tra xem các thay đổi của bạn có hoạt động hay không trước khi thử từ xa.

Cũng có khả năng là nếu bạn đang thực hiện các thay đổi đối với một máy chủ từ xa, bạn sẽ cần một cách an toàn để kết nối và thực hiện các thay đổi. SSH (Secure Shell) thường là cách tốt nhất để làm điều này, vì nó cho phép bạn kết nối với máy chủ từ xa của mình. Bạn cũng có thể sử dụng SSH để kết nối với các máy chủ trên mạng cục bộ của mình, chẳng hạn như các máy chủ được lưu trữ trên Raspberry Pi(hosted on a Raspberry Pi) .

Hướng dẫn này sẽ hướng dẫn bạn qua các bước cấu hình MySQL để cho phép kết nối từ xa, nhưng trước tiên bạn cần đảm bảo bạn có quyền truy cập trực tiếp hoặc từ xa vào máy chủ lưu trữ máy chủ MySQL của bạn .

Giả sử(Suppose) bạn không có quyền truy cập từ xa vào máy chủ của mình thông qua SSH (ví dụ:). Trong trường hợp đó, bạn sẽ không thể định cấu hình cơ sở dữ liệu MySQL của mình để cho phép kết nối từ xa trực tiếp trừ khi tài khoản mySQL gốc của bạn đã cho phép kết nối từ xa. Vì vậy, bạn sẽ cần thiết lập kết nối này trước khi có thể tiếp tục.

Chỉnh sửa tệp cấu hình MySQL của bạn(Editing Your MySQL Configuration File)

Bước đầu tiên trong việc định cấu hình MySQL để cho phép các kết nối từ xa là chỉnh sửa tệp cấu hình MySQL của bạn. (MySQL)Đến giai đoạn này, hướng dẫn này sẽ giả sử bạn đã kết nối với máy chủ, PC hoặc Mac lưu trữ cơ sở dữ liệu mySQL của bạn từ xa và có quyền truy cập bảng điều khiển. 

Ngoài ra, bạn có thể định cấu hình máy chủ MySQL cục bộ bằng cách sử dụng thiết bị đầu cuối mở trên Mac hoặc Linux hoặc trình soạn thảo văn bản trên Windows .

  1. Để bắt đầu, hãy sử dụng trình soạn thảo văn bản bảng điều khiển ưa thích của bạn để chỉnh sửa tệp cơ sở dữ liệu MySQL của bạn . Trên Linux , nhập sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf vào cửa sổ đầu cuối hoặc SSH để chỉnh sửa tệp này bằng trình chỉnh sửa nano (giả sử cơ sở dữ liệu MySQL của bạn ở vị trí mặc định)

  1. Nếu bạn đang chạy Windows , hãy mở File Explorer và truy cập thư mục chứa cài đặt MySQL của bạn (ví dụ: C:/Program Files/MySQL/MySQL Server 8.0 ). Mở tệp my.ini bằng trình soạn thảo văn bản mặc định của bạn (ví dụ: Notepad ) bằng cách nhấp đúp vào mục nhập. Nếu nó không có ở đó, hãy tạo tệp trước(create the file first) .

  1. Trên Mac , mở cửa sổ dòng lệnh và nhập sudo nano /usr/local/etc/my.cnf . Đây là tệp cấu hình mặc định cho MySQL nếu bạn đã cài đặt MySQL bằng homebrew(using homebrew) .

Các vị trí được tham chiếu ở trên là vị trí mặc định cho các tệp cấu hình MySQL . Nếu các lệnh này không hoạt động, bạn sẽ cần phải tìm kiếm các tệp có liên quan ( my.cnf , mysqld.cnf hoặc my.ini ) theo cách thủ công để định vị đường dẫn tệp có liên quan.

Đặt Dải IP Địa chỉ Liên kết An toàn(Setting a Safe Bind-Address IP Range)

  1. Khi bạn đã mở tệp cấu hình MySQL cho máy chủ của mình, hãy sử dụng phím mũi tên trên bàn phím để đến phần địa chỉ liên kết(bind-address) của tệp. Dải IP này giới hạn các kết nối đến cơ sở dữ liệu của bạn, thường được đặt để chỉ cho phép các kết nối từ máy cục bộ hoặc máy chủ sử dụng 127.0.0.1 .

  1. Nếu bạn muốn định cấu hình cơ sở dữ liệu MySQL của mình để cho phép kết nối từ các thiết bị sử dụng kết nối internet hiện tại, trước tiên hãy tìm địa chỉ IP công cộng của bạn(find your public IP address) , sau đó thay thế 127.0.0.1 bằng địa chỉ IP đó. Ngoài ra, hãy thay thế nó bằng một địa chỉ IP cho thiết bị hoặc máy chủ mà bạn muốn cho phép kết nối.

  1. Trong một số trường hợp, bạn có thể muốn cho phép tất cả(all) các kết nối từ xa đến cơ sở dữ liệu MySQL . Điều này mang lại rủi ro cao(extreme risk) và không nên được sử dụng trên máy chủ sản xuất. Tuy nhiên, nếu bạn muốn cho phép điều này, hãy thay thế 127.0.0.1 bằng 0.0.0.0 .

  1. Ghi lại giá trị cổng(port ) trong phần Cài đặt Cơ bản(Basic Settings) . Điều này sẽ được yêu cầu trong phần tiếp theo. Nếu nó không hiển thị, giá trị mặc định sẽ được sử dụng, đó là cổng 3306 . Bạn có thể thêm cổng của riêng mình bằng cách nhập port = xxxx trên một dòng mới, thay thế xxxx bằng một giá trị cổng phù hợp.

  1. Khi bạn đã định cấu hình địa chỉ ràng buộc(bind-address ) trong tệp cấu hình MySQL của mình , hãy lưu tệp. Nếu bạn đang sử dụng Linux , hãy chọn Ctrl + O Ctrl + X để thực hiện việc này. Trên Mac, chọn Command + O và Command + Command + XNgười dùng Windows có thể lưu bằng cách chọn Tệp(File ) > Lưu(Save) .

  1. Tiếp theo, người dùng LinuxMac có thể khởi động lại MySQL bằng cách gõ mysql.server stop && mysql.server start hoặc mysql.server restart . Bạn có thể cần nâng cấp lệnh bằng cách sử dụng sudo(using sudo) (ví dụ: sudo mysql.server khởi động lại(sudo mysql.server restart) ) và sử dụng đường dẫn thích hợp đến tệp mysql.server (ví dụ: /usr/local/bin/mysql.server ).

  1.  Nếu lệnh trên không hoạt động, hãy thử khởi động lại dịch vụ sudo mysql(sudo service mysql restart ) thay thế.

  1. Để khởi động lại MySQL trên Windows , hãy mở cửa sổ PowerShell mới bằng cách nhấp chuột phải vào menu (PowerShell)Bắt đầu(Start) và chọn Windows PowerShell (Quản trị)(Windows PowerShell (Admin)) . Trong cửa sổ PowerShell, nhập net stop mysql80, sau đó nhập net start mysql80(net start mysql80) , thay thế mysql80 bằng tên dịch vụ chính xác trên PC của bạn.

Nếu bạn không chắc tên dịch vụ chính xác trên Windows , hãy nhập net start để tìm tên dịch vụ đó. Nếu bạn không thể tải lại cấu hình của mình, hãy khởi động lại máy chủ và tải lại MySQL theo cách thủ công (nếu cần).

Định cấu hình tường lửa của bạn(Configuring Your Firewalls)

Ở giai đoạn này, cơ sở dữ liệu MySQL của bạn sẽ cho phép kết nối từ xa từ các thiết bị sử dụng địa chỉ IP mà bạn đặt làm giá trị địa chỉ ràng buộc trong tệp cấu hình (bind-address)MySQL của bạn (hoặc từ tất cả các thiết bị nếu bạn đặt giá trị này thành 0.0.0.0 ). Tuy nhiên, các kết nối sẽ vẫn bị chặn bởi thiết bị hoặc tường lửa mạng(device or network firewall) của bạn .

Hầu hết các máy chủ và PC sử dụng tường lửa để chặn các kết nối trừ khi được cấp quyền truy cập vào một cổng cụ thể. Các bước để cấu hình điều này sẽ khác nhau, tùy thuộc vào việc bạn đang chạy MySQL trên Windows hay Linux . Tường lửa của Mac(Mac) bị tắt theo mặc định, vì vậy bạn không cần phải hoàn thành bất kỳ bước bổ sung nào tại đây.

Định cấu hình tường lửa Linux(Configure Linux Firewalls)

Nhiều máy chủ Linux sử dụng iptables làm tiện ích tường lửa mặc định. Bạn có thể cấu hình nó bằng cách làm theo các bước bên dưới.

  1. Mở một thiết bị đầu cuối hoặc kết nối SSH và nhập sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY -j ACCEPT . Thay thế XXXX bằng địa chỉ IP cho thiết bị mà bạn muốn cho phép kết(from) nối MySQL và thay thế YYYY bằng giá trị cổng phù hợp từ tệp cấu hình MySQL của bạn (ví dụ: (MySQL)3306 ).

  1. Điều này sẽ cấu hình tường lửa tạm thời. Nếu bạn đang sử dụng máy chủ Linux(Linux) dựa trên Debian hoặc Ubuntu , hãy thực hiện thay đổi này vĩnh viễn bằng cách nhập sudo netfilter-dai dẳng lưu(sudo netfilter-persistent save)tải lại sudo netfilter-dai dẳng(sudo netfilter-persistent reload ) vào cửa sổ đầu cuối hoặc SSH.

Nếu iptables không phải là công cụ tường lửa mặc định cho bản phân phối Linux của bạn , bạn sẽ cần tham khảo hướng dẫn sử dụng của bản phân phối để biết thêm thông tin. Nếu một số gói nhất định (chẳng hạn như netfilter-dai dẳng(netfilter-persistent) ) không khả dụng, hãy sử dụng công cụ lưu trữ phần mềm của nhà phân phối của bạn để cài đặt nó (ví dụ: sudo apt install netfilter-dai dẳng(sudo apt install netfilter-persistent) ).

Định cấu hình Tường lửa của Windows(Configure Windows Firewalls)

Nếu bạn đang sử dụng PC hoặc máy chủ Windows để lưu trữ cơ sở dữ liệu của mình, bạn có thể định cấu hình tường lửa của mình bằng các bước sau:

  1. Bấm chuột phải vào(Right-click) menu Bắt đầu(Start) và chọn Chạy(Run) .

  1. Trong hộp Run , nhập wf.msc và chọn OK .

  1. Trong cửa sổ Bộ bảo vệ Windows(Windows Defender) , chọn Quy tắc(Inbound Rules ) đến > Quy tắc mới(New Rule) .

  1. Trong cửa sổ Trình hướng dẫn quy tắc gửi đến mới(New Inbound Rule Wizard) , chọn Cổng(Port ) > Tiếp theo(Next) .

  1. Tại menu tiếp theo, chọn TCP từ các tùy chọn, nhập 3306 (hoặc bất kỳ giá trị cổng nào được liệt kê trong tệp cấu hình MySQL của bạn ), sau đó chọn Tiếp theo(Next) .

  1. Tại menu Hành động(Action) , để tùy chọn mặc định là Cho phép kích hoạt kết nối(Allow the connection) , sau đó chọn Tiếp theo(Next) .

  1. Xác nhận rằng bạn muốn áp dụng quy tắc cho tất cả các loại mạng, sau đó chọn Tiếp theo(Next)

  1. Nhập tên mô tả cho quy tắc (ví dụ: MySQL ) vào cổng được cung cấp, sau đó chọn Kết thúc(Finish) để thêm nó vào danh sách các quy tắc tường lửa của bạn.

Nếu bạn gặp sự cố khi kết nối, hãy lặp lại các bước này ở trên, đảm bảo tạo quy tắc gửi đi(outbound rule ) mới trong cài đặt tường lửa của bạn bằng cách sử dụng các chi tiết tương tự (cổng 3306, v.v.). Bạn cũng có thể cần phải định cấu hình bộ định tuyến mạng cục bộ của mình để mở các cổng bị chặn cần thiết(open the necessary blocked ports) để cho phép các kết nối đến và đi đến cơ sở dữ liệu của bạn. 

Kết nối với máy chủ từ xa bằng MySQL(Connecting to a Remote Server Using MySQL)

Sau khi định cấu hình cơ sở dữ liệu MySQL của bạn để cho phép các kết nối từ xa, bạn sẽ cần thực sự thiết lập kết nối với nó. Bạn có thể thực hiện việc này bằng lệnh mysql ( mysql.exe trên Windows ) từ một thiết bị đầu cuối hoặc cửa sổ PowerShell .

Nếu đang chạy Windows , bạn cần đảm bảo rằng MySQL đã được cài đặt cục bộ(MySQL is installed locally) trước khi bắt đầu. Người dùng Mac(Mac) có thể cài đặt MySQL bằng homebrew(using homebrew) từ thiết bị đầu cuối ( brew install mysql ), trong khi người dùng Linux có thể sử dụng kho ứng dụng cục bộ của họ (ví dụ: sudo apt install mysql ) để cài đặt các gói cần thiết.

Kết nối với MySQL trên Linux hoặc Mac(Connecting to MySQL on Linux or Mac)

  1. Để kết nối với máy chủ MySQL từ xa của bạn trên Mac hoặc Linux , hãy mở một cửa sổ đầu cuối mới và nhập tên người dùng mysql -u -h XXXX: XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) . Thay thế XXXX: XXXX bằng địa chỉ IP máy chủ từ xa và số cổng (ví dụ: 100.200.100.200:3306 ) và tên người dùng(username) bằng tên người dùng MySQL của bạn.

  1. Khi được nhắc, hãy xác nhận mật khẩu của bạn. Nếu kết nối thành công, một thông báo thành công sẽ xuất hiện trong thiết bị đầu cuối.

Kết nối với MySQL trên Windows(Connecting to MySQL on Windows)

  1. Để kết nối với máy chủ MySQL từ xa trên Windows , hãy mở cửa sổ PowerShell mới bằng cách nhấp chuột phải vào menu (PowerShell)Bắt đầu(Start) và chọn Windows PowerShell (Quản trị)(Windows PowerShell (Admin)) .

  1. Trong cửa sổ PowerShell mới, nhập cd “C:\Program Files\MySQL\MySQL Workbench 8.0\ ” để nhập đúng thư mục, thay thế thư mục này bằng thư mục cài đặt chính xác trên PC của bạn. Ví dụ: nếu phiên bản MySQL của bạn là 8.0.1, hãy sử dụng thư mục MySQL Workbench 8.0.1 để thay thế.

  1. Từ đó, nhập .\mysql.exe -u username -h X.X.X.X:XXXX -p . Thay thế XXXX: XXXX bằng địa chỉ IP máy chủ từ xa và số cổng (ví dụ: 100.200.100.200:3306 ) và tên người dùng(username) bằng tên người dùng MySQL cho phép truy cập từ xa (chẳng hạn như root ). Làm theo(Follow) bất kỳ hướng dẫn bổ sung nào trên màn hình.
  2. Cung cấp mật khẩu của bạn, khi được nhắc, để hoàn tất quá trình đăng nhập và truy cập cơ sở dữ liệu MySQL của bạn từ xa.

Nếu cách này không hiệu quả, hãy kết nối với máy chủ hoặc PC lưu trữ máy chủ MySQL của bạn bằng SSH (hoặc truy cập trực tiếp) bằng các bước sau và sử dụng đối số -h localhost . Sau đó, bạn có thể tạo một tài khoản người dùng phù hợp bằng cách làm theo các bước bên dưới.

Cho phép người dùng từ xa truy cập vào cơ sở dữ liệu MySQL(Allowing Remote User Access to a MySQL Database)

Đến thời điểm này, bạn sẽ có thể kết nối từ xa với máy chủ MySQL của mình bằng tài khoản người dùng gốc của máy chủ hoặc tài khoản người dùng khác có đặc quyền nâng cao. Vì mức độ truy cập này không an toàn, bạn có thể muốn tạo một tài khoản hạn chế hơn để truy cập vào cơ sở dữ liệu MySQL của mình .

Tài khoản này sẽ có quyền truy cập hạn chế vào máy chủ MySQL của bạn , cho phép nó chỉ tương tác với các cơ sở dữ liệu được chọn. Nó sẽ không thể thực hiện các thay đổi nghiêm trọng hơn, chẳng hạn như truy cập dữ liệu cơ sở dữ liệu khác, tạo tài khoản người dùng mới, v.v. 

Bạn sẽ cần có khả năng đăng nhập vào máy chủ MySQL của mình từ xa. Nếu bạn không thể sử dụng tài khoản gốc của mình từ xa, bạn sẽ cần truy cập trình bao của máy chủ bằng lệnh mysql thông qua kết nối (mysql)SSH từ xa hoặc bằng cách truy cập trực tiếp vào PC hoặc máy chủ lưu trữ máy chủ.

  1. Trong trình bao MySQL(MySQL) từ xa của bạn (sử dụng công cụ mysql ), nhập CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; và chọn Enter . Thay thế tên người dùng(username ) bằng tên người dùng bạn muốn tạo, xxxx bằng địa chỉ IP bạn muốn kết nối và mật khẩu(password) bằng mật khẩu phù hợp.

  1. Bạn sẽ cần cấp cho tài khoản mới của mình các quyền cần thiết. Để thực hiện việc này, hãy nhập GRANT ALL ON databasename.* TO username@”x.x.x.x”; và thay thế tên cơ sở dữ liệu, tên người dùng(databasename, username, )xxxx  bằng các chi tiết chính xác. Nếu bạn muốn, hãy thay thế tên cơ sở dữ liệu(databasename) bằng * để cấp cho nó quyền truy cập vào tất cả các cơ sở dữ liệu. 

Khi được cấp quyền truy cập, hãy sử dụng các bước trong phần trên để kết nối từ xa với máy chủ của bạn bằng tài khoản mới (ví dụ: tên người dùng mysql -u -h XXXX: XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) ).

Bảo mật dữ liệu cơ sở dữ liệu của bạn(Securing Your Database Data)

Cho dù bạn đang làm việc với MySQL hay một loại cơ sở dữ liệu SQL khác , điều quan trọng là phải giữ an toàn cho các kết nối của bạn để duy trì bảo mật dữ liệu của bạn. Một cách tốt để làm điều này là tạo khóa SSH để truy cập từ xa vào(generate SSH keys for remote access) máy chủ của bạn, thay vì dựa vào mật khẩu lỗi thời (và dễ đoán).

Nếu lo lắng về việc mất dữ liệu, bạn có thể dễ dàng sao lưu cơ sở dữ liệu của mình(back up your database) trực tuyến. Hầu hết các cơ sở dữ liệu được chạy bằng máy chủ Linux — bạn có thể tự động hóa một bản sao lưu tệp Linux một cách dễ dàng(automate a Linux file backup easily) . Nếu đang chạy MySQL trên Windows , bạn có thể thiết lập một hệ thống sao lưu tự động tương tự cho Windows(automatic backup system for Windows) , cho phép bạn khôi phục dữ liệu của mình trong trường hợp khẩn cấp.



About the author

Tôi là một lập trình viên máy tính và đã có hơn 15 năm. Kỹ năng của tôi nằm ở việc phát triển và duy trì các ứng dụng phần mềm, cũng như cung cấp hỗ trợ kỹ thuật cho các ứng dụng đó. Tôi cũng đã dạy lập trình máy tính cho học sinh trung học và hiện đang là một giảng viên chuyên nghiệp.



Related posts