U
USDT 云服务器
🏠 首页 / 📚 USDT服务器资讯中心 / 📄 数据库安全配置指南:MySQL 与 PostgreSQL 的守护之道

数据库安全配置指南:MySQL 与 PostgreSQL 的守护之道

📅 2026-05-20 👁 223 📁 常见问题
数据库安全配置指南:MySQL 与 PostgreSQL 的守护之道

在数字化时代,数据库就像企业和个人数据的宝库,一旦出现安全问题,后果不堪设想。对于在 VPS 上运行的 MySQL 和 PostgreSQL 数据库而言,进行恰当的安全配置至关重要。接下来,咱们就从防止 SQL 注入、远程访问限制以及权限管理这几个关键方面展开聊聊。


防止 SQL 注入


SQL 注入是一种常见且危险的数据库攻击方式,黑客通过在输入字段中插入恶意 SQL 语句,试图获取或篡改数据库中的数据。


对于 MySQL,使用预处理语句是防止 SQL 注入的有效手段。以 PHP 为例,在连接 MySQL 数据库后,假设要执行一条查询语句,传统方式可能像这样:

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);


这种方式很容易遭受 SQL 注入攻击,如果用户在username或password字段中输入恶意语句,就可能导致数据泄露。而使用预处理语句则安全得多:

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username =? AND password =?";
$stmt = mysqli_prepare($conn, $query);
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);


这里的?是占位符,输入的数据会被正确处理,避免了 SQL 注入风险。
PostgreSQL 同样可以利用预处理语句来防范 SQL 注入。在 Python 中使用psycopg2库连接 PostgreSQL 时,示例代码如下:

import psycopg2
username = input("请输入用户名: ")
password = input("请输入密码: ")
conn = psycopg2.connect(database="your_database", user="your_user", password="your_password", host="your_host", port="your_port")
cur = conn.cursor()
query = "SELECT * FROM users WHERE username = %s AND password = %s"
cur.execute(query, (username, password))
rows = cur.fetchall()


通过这种方式,将用户输入作为参数传递,而不是直接嵌入 SQL 语句,有效防止了 SQL 注入。


远程访问限制


限制数据库的远程访问,可以降低遭受外部攻击的风险。
在 MySQL 中,默认情况下,MySQL 允许本地访问,但可能对远程访问设置得不够严格。首先,要确保只允许必要的 IP 地址进行远程连接。打开 MySQL 的配置文件my.cnf(通常在/etc/mysql/目录下),找到bind - address这一行,如果它被注释掉了,添加bind - address = 127.0.0.1,这样就只允许本地访问。如果确实需要某些特定的远程 IP 访问,可以将其替换为相应的 IP 地址,比如bind - address = 192.168.1.100 。修改完成后,重启 MySQL 服务使配置生效。


对于 PostgreSQL,配置文件postgresql.conf(一般在/var/lib/pgsql/data/目录下)中有个listen_addresses参数。默认可能是listen_addresses = '*',这意味着允许所有 IP 访问,风险较大。将其改为listen_addresses = '127.0.0.1',只允许本地连接。若要允许特定远程 IP 访问,可写成listen_addresses = '127.0.0.1,192.168.1.100' 。同时,还需要在pg_hba.conf文件中配置相应的访问权限,例如:

host all all 192.168.1.100/32 md5
表示允许192.168.1.100这个 IP 地址通过 MD5 加密认证方式访问所有数据库。


权限管理

合理的权限管理是数据库安全的重要保障,确保不同用户只能执行其工作所需的操作。
在 MySQL 中,创建用户时要谨慎分配权限。例如,若要创建一个只具有查询特定数据库权限的用户,可以这样操作:

CREATE USER 'query_user'@'localhost' IDENTIFIED BY 'password';GRANT SELECT ON your_database.* TO 'query_user'@'localhost';FLUSH PRIVILEGES;


这里创建了一个名为query_user的用户,只能在本地通过指定密码连接,并且仅对your_database数据库有查询权限。
PostgreSQL 同样如此,创建用户并分配权限的示例如下:

CREATE USER read_only_user WITH PASSWORD 'password';
GRANT CONNECT ON DATABASE your_database TO read_only_user;
GRANT USAGE ON SCHEMA public TO read_only_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user;


此操作创建了一个read_only_user用户,对your_database数据库有连接、使用公共模式以及查询所有表的权限。


无论是 MySQL 还是 PostgreSQL,通过有效防止 SQL 注入、合理限制远程访问以及精细的权限管理,能显著提升数据库在VPS环境中的安全性,让你的数据得到更好的保护。大家一定要重视这些配置,为数据库安全保驾护航。

📖 服务器文章说明

本文内容围绕云服务器、VPS、建站环境配置等技术展开, 适用于开发者、跨境电商及网站搭建用户参考学习。

我们会持续更新USDT服务器选择、网络优化及建站实战经验,帮助用户快速上手云计算环境。