Image

知识库 → 设置对 MariaDB 数据库的远程访问

[虚拟服务器]
出版日期: 17.10.2023

默认情况下,出于安全原因,禁用对 MariaDB 数据库服务的远程访问。 在本指南中,我们将了解如何通过 IP 地址设置对数据库的远程访问。

假设我们有 2 台服务器,其中一台有某个系统(站点/crm),另一台我们将通过指定服务器的登录名、密码和 IP 地址来存储数据库和请求数据。

1. 准备设置

1.1 我们来检查一下配置文件

让我们确保连接选项没有被注释掉,如下所示:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

...
bind-address = 0.0.0.0
...

要应用设置,请重新启动服务

systemctl restart mariadb

1.2 检查端口可用性

netstat -ant | grep 3306

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN

2. 设置

mysql -u root -p

2.1 创建数据库和用户

CREATE DATABASE base1;
CREATE USER  'user1'@'localhost' IDENTIFIED BY 'password';

2.2 让我们通过指定要连接的服务器的 IP 来允许连接

GRANT ALL ON base1.* to 'user1'@'xx.ip.xx.ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

这些详细信息可用于连接:

  • base1 - 数据库。
  • user1 - 用户。
  • password - 密码。
  • xx.ip.xx.ip - 我们将连接的服务器的 IP 地址。

2.3 其他示例

2.3.1 允许指定ip访问所有数据库

GRANT ALL ON *.* to 'user1'@'xx.ip.xx.ip' IDENTIFIED BY 'password' WITH GRANT OPTION;

2.3.2 允许任何IP地址连接到base1

GRANT ALL ON base1.* to 'user1'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

2.3.3 仅允许从特定子网到 base1 的连接

GRANT ALL ON base1.* to 'user1'@'xx.ip.xx.%' IDENTIFIED BY 'password' WITH GRANT OPTION;

3. 设置 iptables 防火墙

3.1 我们只允许特定的ip

iptables -A INPUT -p tcp -s xx.ip.xx.ip --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

3.2 让我们允许所有ip

iptables -A INPUT -p tcp -m tcp --dport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

3.3 允许特定子网

iptables -A INPUT -p tcp -s xx.ip.xx.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

4. 让我们检查服务器 1 的连接

4.1 安装mariadb客户端

apt install mariadb-client

4.2 连接到已配置的服务器

mysql -u wpuser -h ip.xx.ip.xx -p

Enter password:

MariaDB [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| base1              |
+--------------------+
2 rows in set (0.10 sec)

准备好。





暂时没有评论