安全配置步骤指南 MariaDB初次登录密码设置

在CentOS 7上,在安装MySQL的时候,默认会安装MariaDB,安装完成后终端中直接键入MySQL即可进入数据库,但是此时的数据库是没有密码的,非常的不安全,而且完成不了一些其他软件对数据库的操作。

MariaDB 初次登录密码设置 + 安全配置完整指南(CentOS7)

⚠️ 和 MySQL 5.7 不一样:MariaDB 通过 yum 安装后,root@localhost 默认没有临时密码,而是通过 unix_socket 插件认证 —— 只要你是系统 root 用户执行 mysql -u root 就能直接进。 所以 “初次登录” 不是找临时密码,而是首次登录后必须立刻改密码 + 跑安全脚本。

一、安装与启动

# 安装MariaDB(CentOS7 base源自带)
yum install mariadb-server -y

# 启动并设开机自启
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb

二、首次登录(无密码直接进)

mysql -u root

注意:必须用系统 root 账号执行(sudo 或直接 root 登录),普通用户执行 mysql -u root 会报 Access denied,这是 unix_socket 认证机制,不是 bug。

三、方式 1:手动修改 root 密码

登录后执行:

-- MariaDB 10.4+ 推荐语法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrong@Pass2026';

-- 老版本或兼容写法
-- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YourStrong@Pass2026');

FLUSH PRIVILEGES;
EXIT;

改完后下次登录就要密码了:mysql -u root -p

如果你想让 root 用密码而不是 socket 认证(推荐)

默认改完密码后,root 仍然是 unix_socket 认证插件,系统 root 直接进、输密码反而报错。要切换成密码认证:

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('YourStrong@Pass2026');
FLUSH PRIVILEGES;

验证:退出后 mysql -u root -p 必须输密码才能进。

四、方式 2:官方安全脚本(强烈推荐,一键加固)

mysql_secure_installation

交互式问答逐行说明:

Enter current password for root (enter for none):
# 初次直接回车(没密码)

Set root password? [Y/n] y
New password:
Re-enter new password:
# 设置root强密码

Remove anonymous users? [Y/n] y
# 删除匿名用户,必选

Disallow root login remotely? [Y/n] y
# 禁止root远程登录,必选

Remove test database and access to it? [Y/n] y
# 删除test库,必选

Reload privilege tables now? [Y/n] y
# 刷新权限,必选

五、验证配置是否生效

# 1. 用密码登录
mysql -u root -p

登录后检查:

-- 查看当前用户
SELECT User, Host, plugin FROM mysql.user;

-- 应看到:
-- root  localhost  mysql_native_password(或 unix_socket,二选一)
-- 无匿名用户(空用户名)
-- 无 test 库
SHOW DATABASES;

六、生产环境推荐:新建管理账号,不开放 root 远程

-- 创建管理员,允许本机
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin@StrongPass2026';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

-- 如需远程,限定来源IP(不要用 %)
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'Admin@StrongPass2026';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

防火墙:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

云服务器:安全组只放行可信 IP 的 3306,不要对全网开放。

七、可选:密码复杂度插件(生产建议)

MariaDB 有 simple_password_check 或 cracklib_password_check 插件:

INSTALL SONAME 'simple_password_check';
-- 查看策略
SHOW VARIABLES LIKE 'password%';

八、忘记 root 密码重置

# 1. 停止服务
systemctl stop mariadb

# 2. 跳过权限启动
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 无密码登录
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('NewPass@2026');
EXIT;
# 4. 正常重启
systemctl restart mariadb

务必确认 skip-grant-tables 没留在配置文件里,否则任何人无密码都能登录。

九、安全检查清单

  • root 密码已设置,不是空密码
  • root 远程登录已禁用
  • 匿名用户已删除
  • test 库已删除
  • 应用使用最小权限的专用账号,不用 root
  • 3306 端口只对可信 IP 开放
  • 配置文件 /etc/my.cnf 不包含明文敏感信息
  • 定期备份 /var/lib/mysql

十、常见问题

  1. ERROR 1045 (28000): Access denied for user 'root'@'localhost' → 你不是用系统 root 执行的;或已改密码但用了旧密码。加 sudo 或输正确密码。
  2. 改了密码,但 mysql -u root 还是不用密码 → root 还是 unix_socket 插件认证,用第四节命令切成 mysql_native_password。
  3. mysql_secure_installation 提示 enter current password 进不去 → 用系统 root 直接跑脚本,不要加 sudo 到普通用户;或先手动 mysql -u root 进去 ALTER 一次。
  4. 远程连接拒绝 → 检查 GRANT 里 host 是否包含你来源 IP;防火墙 / 安全组;bind-address 是否绑了 127.0.0.1(生产应绑内网网卡或 0.0.0.0 并加防火墙限制)。
  5. MariaDB 版本不同语法差异 → MariaDB 10.4+ 默认 unix_socket;老版本用 SET PASSWORD ... = PASSWORD('xxx')。先 mysql -V 看版本。

十一、与 MySQL 5.7 对照

表格

项目MySQL 5.7MariaDB
初始密码日志里自动生成临时密码无密码,unix_socket 直登
找密码grep 'temporary password' /var/log/mysqld.log不需要
安全脚本mysql_secure_installation同名
改密码语法ALTER USER ... IDENTIFIED BY '...'相同,但注意 plugin
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像-次元社
欢迎您留下宝贵的见解!
提交
头像-次元社

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容