下面我将以几种最常见的数据库为例,详细说明开启远程连接的步骤和至关重要的安全注意事项。
开启远程连接通常需要修改两个地方的配置:
1、数据库服务本身的配置:告诉数据库监听所有IP地址,而不仅仅是本地回环地址(127.0.0.1)。
2、操作系统的防火墙配置:允许外部IP访问数据库的监听端口(如3306, 5432等)。
第一部分:通用安全警告(务必先阅读!)
将数据库暴露在公网上极其危险,攻击者可能会尝试暴力破解、漏洞利用等,请遵循以下原则:
强密码为所有数据库用户,特别是远程连接用户,设置高强度、复杂的密码。
最小权限原则专门创建一个用于远程连接的用户,并只授予它最小必需的权限,绝对不要使用 root 或 sa 账号进行远程连接。
限制访问IP如果可能,将远程访问权限限制在特定的、可信的IP地址或IP段,这是最有效的安全措施之一。
使用非默认端口将数据库端口从默认的3306/5432/1433改为一个不常见的端口,可以减少自动化脚本的攻击。
防火墙必不可少必须通过防火墙严格控制访问来源。
考虑使用SSH隧道或VPN对于生产环境,更安全的方式是让客户端通过SSH隧道或VPN连接到服务器所在的内网,再访问数据库,这样数据库本身完全不用暴露在公网上。
1. MySQL / MariaDB
步骤 1:修改MySQL配置文件
1、 找到MySQL的配置文件,通常位于:
* Linux:/etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/my.cnf
或/etc/mysql/my.cnf
* Windows:C:\ProgramData\MySQL\MySQL Server X.X\my.ini
2、 打开文件,找到[mysqld]
节下的bind-address
配置项。
3、 将其修改为0.0.0.0
(表示监听所有网络接口)或者你的服务器公网IP。
[mysqld] bind-address = 0.0.0.0
4、 保存文件并重启MySQL服务。
* Linux:sudo systemctl restart mysql
或sudo systemctl restart mysqld
* Windows: 在“服务”管理器中重启 "MySQLXX" 服务。
步骤 2:创建远程用户并授权
使用root用户登录MySQL,执行以下命令:
-- 创建一个新用户(推荐),'username' 和 'password' 请替换为你的 CREATE USER 'your_remote_user'@'%' IDENTIFIED BY 'YourStrongPassword123!'; -- 或者修改已有用户的主机限制(不推荐对root操作) -- RENAME USER 'old_user'@'localhost' TO 'old_user'@'%'; -- 授予权限,这里授予所有数据库的所有权限,请按需缩小范围。 GRANT ALL PRIVILEGES ON *.* TO 'your_remote_user'@'%' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;
注意:'%'
表示允许从任何主机连接,为了安全,请尽量替换为特定的IP,如'192.168.1.100'
或网段'192.168.1.%'
。
步骤 3:配置防火墙
开放MySQL默认端口3306
。
Linux (ufw):sudo ufw allow 3306/tcp
Linux (firewalld):sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
Windows: 在“Windows Defender 防火墙”中添加入站规则,允许3306
端口的TCP连接。
步骤 1:修改pg_hba.conf
这个文件用于控制客户端认证。
1、 找到文件位置,通常在/etc/postgresql/XX/main/pg_hba.conf
或/var/lib/pgsql/data/pg_hba.conf
。
2、 在文件末尾添加一行,允许远程连接:
# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 md5
host
表示使用TCP/IP连接。
all
表示所有数据库和用户。
0.0.0.0/0
表示允许所有IPv4地址连接,为了安全,请改为192.168.1.0/24
等特定网段。
md5
表示需要密码认证。
步骤 2:修改postgresql.conf
这个文件是主配置文件。
1、 找到文件,通常和pg_hba.conf
在同一目录。
2、 找到listen_addresses
参数,将其修改为:
listen_addresses = '*' # 监听所有IP # 或者 listen_addresses = 'localhost,你的服务器内网IP'
3、 保存文件并重启PostgreSQL服务。
* Linux:sudo systemctl restart postgresql
步骤 3:配置防火墙
开放PostgreSQL默认端口5432
。
Linux (ufw):sudo ufw allow 5432/tcp
步骤 1:使用SQL Server配置管理器
1、 打开 "SQL Server Configuration Manager"。
2、 展开 "SQL Server Network Configuration",选择你要配置的实例(如 "Protocols for MSSQLSERVER")。
3、 在右侧右键点击 "TCP/IP",选择 "启用"。
4、 双击 "TCP/IP" 打开属性,切换到 "IP Addresses" 选项卡。
5、 滚动到最下方,在 "IPAll" 部分,确保 "TCP Dynamic Ports" 为空,并在 "TCP Port" 中设置你的端口(默认是1433)。
6、 在 "IP2" (Name 通常是你的服务器公网IP) 部分,将 "Active" 和 "Enabled" 设为 "Yes",并填写 "TCP Port"。
7、 点击 "确定",然后重启SQL Server服务。
步骤 2:在SQL Server中启用混合模式认证并创建用户
1、 使用SSMS(SQL Server Management Studio)以Windows身份验证登录。
2、 右键点击服务器实例 -> "属性" -> "安全性"。
3、 选择 "SQL Server and Windows Authentication mode"。
4、 点击 "确定"。
5、 展开 "安全性" -> "登录名",右键点击 "新建登录名..."。
6、 创建一个SQL Server身份验证的登录名,并设置强密码。
7、 在 "用户映射" 中,为此用户分配需要访问的数据库和权限(如db_owner
)。
步骤 3:配置防火墙
开放SQL Server的端口(默认1433
)。
Windows: 在“高级安全Windows Defender 防火墙”中创建入站规则,允许该端口的TCP连接。
在远程客户端机器上,使用数据库客户端工具(如 MySQL Workbench, pgAdmin, SSMS, Navicat等)或命令行进行测试。
连接信息通常包括:
主机/Host: 数据库服务器的公网IP地址
端口/Port: 你配置的数据库端口
用户名/Username: 你创建的远程用户
密码/Password: 该用户的密码
如果连接失败,请检查:
1、防火墙:确保服务器和云服务商(如AWS安全组、阿里云安全组)的防火墙都已放行对应端口。
2、配置是否正确:仔细检查配置文件的拼写和位置,确保没有语法错误。
3、服务是否重启:修改配置后,必须重启数据库服务才能生效。
4、用户权限:确认你为用户授予了从正确主机('%'
或 特定IP)连接的权限。
5、网络可达:确认客户端可以ping通服务器的公网IP。
希望这个详细的指南能帮助你安全地完成数据库远程连接的配置!
文章摘自:https://idc.huochengrm.cn/fwq/18519.html
评论