当前位置: 代码网 > it编程>数据库>Mysql > MySQL8.0 Root用户远程登录配置完整步骤记录

MySQL8.0 Root用户远程登录配置完整步骤记录

2026年08月02日 Mysql 我要评论
文档信息mysql 版本: 8.0+适用场景: 生产环境、开发环境、测试环境安全级别: 包含安全最佳实践建议更新日期: 2025-12-221. mysql 8.0 认证机制变化1.1 默认认证插件变

文档信息

  • mysql 版本: 8.0+
  • 适用场景: 生产环境、开发环境、测试环境
  • 安全级别: 包含安全最佳实践建议
  • 更新日期: 2025-12-22

1. mysql 8.0 认证机制变化

1.1 默认认证插件变更

mysql 5.7 vs 8.0 对比

特性mysql 5.7mysql 8.0
默认认证插件mysql_native_passwordcaching_sha2_password
密码加密强度sha1(较弱)sha256(强)
ssl/tls 要求可选首次连接必需
root 默认主机%localhostlocalhost
密码验证策略宽松严格(默认启用 validate_password)

新认证插件特点

caching_sha2_password

-- 查看认证插件
select user, host, plugin from mysql.user where user='root';

优势

  • ✅ sha-256 哈希算法,安全性更高
  • ✅ 支持密码缓存,提高性能
  • ✅ 支持多种认证方式

限制

  • ⚠️ 旧版客户端(< 5.7)不支持
  • ⚠️ 某些应用需要显式指定支持

1.2 密码验证策略(validate_password)

mysql 8.0 默认启用密码验证组件:

-- 查看密码策略配置
show variables like 'validate_password%';

输出示例

+--------------------------------------+--------+
| variable_name                        | value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | on     |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | medium |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

策略级别

  • low: 仅检查长度(最小 8 位)
  • medium: 长度 + 数字 + 大小写 + 特殊字符
  • strong: medium + 字典检查

2. 远程登录配置步骤

2.1 方案一:创建独立的远程 root 用户(推荐)

步骤 1:登录 mysql

# windows
cd "c:\program files\mysql\mysql server 8.0\bin"
mysql -uroot -p

# linux
mysql -uroot -p

步骤 2:创建远程用户

-- 方式 1:允许任意 ip 访问(开发环境)
create user 'root'@'%' identified by 'yourstrongpassword123!';

-- 方式 2:仅允许特定 ip(推荐)
create user 'root'@'192.168.1.100' identified by 'yourstrongpassword123!';

-- 方式 3:允许特定网段
create user 'root'@'192.168.1.%' identified by 'yourstrongpassword123!';

-- 方式 4:允许特定域名
create user 'root'@'app.example.com' identified by 'yourstrongpassword123!';

密码要求(medium 策略):

  • ✅ 至少 8 个字符
  • ✅ 包含大写字母
  • ✅ 包含小写字母
  • ✅ 包含数字
  • ✅ 包含特殊字符(如 !@#$%)

步骤 3:授予完整权限

-- 授予所有权限(等同于 root)
grant all privileges on *.* to 'root'@'%' with grant option;

-- 刷新权限
flush privileges;

权限说明

  • all privileges: 所有权限
  • *.*: 所有数据库的所有表
  • with grant option: 允许该用户授权给其他用户

步骤 4:验证用户创建

-- 查看用户列表
select user, host, plugin, account_locked from mysql.user;

-- 查看权限
show grants for 'root'@'%';

预期输出

+-----------------------------------------------+
| grants for root@%                             |
+-----------------------------------------------+
| grant all privileges on *.* to `root`@`%`     |
| with grant option                             |
+-----------------------------------------------+

2.2 方案二:修改现有 root 用户主机(不推荐)

⚠️ 安全警告:此方法会修改 localhost 的 root 用户,可能导致本地管理权限问题。

-- 查看当前 root 用户
select user, host from mysql.user where user='root';

-- 修改主机为 %(允许任意 ip)
update mysql.user set host='%' where user='root' and host='localhost';

-- 刷新权限
flush privileges;

风险

  • ❌ 本地无法使用 root@localhost 登录
  • ❌ 违反最小权限原则
  • ❌ 不符合安全最佳实践

2.3 配置 mysql 服务器绑定地址

修改配置文件

windows: c:\programdata\mysql\mysql server 8.0\my.ini
linux: /etc/my.cnf/etc/mysql/my.cnf

[mysqld]
# 允许所有 ip 连接(默认为 127.0.0.1)
bind-address = 0.0.0.0

# 或绑定特定网卡 ip
# bind-address = 192.168.1.100

# 端口(默认 3306)
port = 3306

# 最大连接数
max_connections = 500

重启 mysql 服务

windows:

# 方法 1:服务管理器
sc stop mysql80
sc start mysql80

# 方法 2:管理工具
net stop mysql80
net start mysql80

linux:

# systemd
sudo systemctl restart mysql

# sysv
sudo service mysql restart

验证绑定地址

# windows
netstat -ano | findstr :3306

# linux
netstat -tuln | grep 3306
ss -tuln | grep 3306

预期输出

tcp    0.0.0.0:3306           0.0.0.0:0              listening
  • 0.0.0.0 表示监听所有网卡
  • 127.0.0.1 表示仅本地访问

2.4 配置防火墙规则

windows 防火墙

方法 1:图形界面

控制面板 → windows defender 防火墙 → 高级设置 → 入站规则 → 新建规则
规则类型:端口
协议:tcp
端口:3306
操作:允许连接
配置文件:根据需要选择(域、专用、公用)
名称:mysql 8.0 remote access

方法 2:命令行

# 允许 3306 端口入站
netsh advfirewall firewall add rule name="mysql 8.0" dir=in action=allow protocol=tcp localport=3306

# 查看规则
netsh advfirewall firewall show rule name="mysql 8.0"

# 删除规则(如需要)
netsh advfirewall firewall delete rule name="mysql 8.0"

linux 防火墙

firewalld (centos/rhel 7+):

# 永久开放 3306 端口
sudo firewall-cmd --permanent --add-port=3306/tcp

# 或添加 mysql 服务
sudo firewall-cmd --permanent --add-service=mysql

# 重载防火墙
sudo firewall-cmd --reload

# 查看规则
sudo firewall-cmd --list-all

iptables (传统方式):

# 允许 3306 端口
sudo iptables -a input -p tcp --dport 3306 -j accept

# 保存规则
sudo iptables-save > /etc/iptables/rules.v4

# 查看规则
sudo iptables -l -n

ufw (ubuntu/debian):

# 允许 3306 端口
sudo ufw allow 3306/tcp

# 或指定来源 ip
sudo ufw allow from 192.168.1.0/24 to any port 3306

# 启用防火墙
sudo ufw enable

# 查看状态
sudo ufw status

2.5 处理认证插件兼容性

问题场景

旧版客户端或应用连接 mysql 8.0 时报错:

authentication plugin 'caching_sha2_password' cannot be loaded

解决方案 1:使用兼容插件(临时方案)

-- 为远程用户设置旧版认证插件
alter user 'root'@'%' identified with mysql_native_password by 'yourpassword123!';

-- 刷新权限
flush privileges;

⚠️ 安全提示mysql_native_password 安全性较低,仅在必要时使用。

解决方案 2:升级客户端(推荐)

确保客户端库版本支持 caching_sha2_password

  • mysql connector/j: 8.0.9+
  • mysql-connector-python: 8.0.16+
  • php mysqli: php 7.4+
  • node.js mysql2: 2.0.0+

解决方案 3:修改默认认证插件

全局设置(my.ini/my.cnf):

[mysqld]
# 设置默认认证插件为兼容模式
default_authentication_plugin=mysql_native_password

重启 mysql 后,新建用户将默认使用 mysql_native_password

2.6 ssl/tls 配置(可选但推荐)

mysql 8.0 默认启用 ssl,但可能需要配置:

查看 ssl 状态

show variables like '%ssl%';

强制用户使用 ssl

-- 创建用户时强制 ssl
create user 'root'@'%' identified by 'password123!' require ssl;

-- 修改现有用户
alter user 'root'@'%' require ssl;

-- 取消 ssl 要求
alter user 'root'@'%' require none;

客户端连接示例

# 使用 ssl 连接
mysql -h 192.168.1.100 -u root -p --ssl-mode=required

# 不使用 ssl(如果服务器允许)
mysql -h 192.168.1.100 -u root -p --ssl-mode=disabled

3. 安全加固方案

3.1 最小权限原则(推荐生产环境)

不要直接开放 root@‘%’,而是创建特定用途的账户:

-- 应用程序专用账户(只读权限)
create user 'app_read'@'192.168.1.%' identified by 'appreadpass123!';
grant select on myapp_db.* to 'app_read'@'192.168.1.%';

-- 应用程序专用账户(读写权限)
create user 'app_write'@'192.168.1.%' identified by 'appwritepass123!';
grant select, insert, update, delete on myapp_db.* to 'app_write'@'192.168.1.%';

-- 备份专用账户
create user 'backup'@'192.168.1.10' identified by 'backuppass123!';
grant select, lock tables, show view, event, trigger on *.* to 'backup'@'192.168.1.10';

-- 监控专用账户
create user 'monitor'@'192.168.1.20' identified by 'monitorpass123!';
grant process, replication client on *.* to 'monitor'@'192.168.1.20';

-- 刷新权限
flush privileges;

3.2 ip 白名单机制

方式 1:数据库层面

-- 只允许特定 ip 段访问
create user 'admin'@'10.0.0.0/255.255.255.0' identified by 'password123!';

-- mysql 8.0.23+ 支持 cidr 表示法
create user 'admin'@'10.0.0.0/24' identified by 'password123!';

方式 2:防火墙层面

# linux iptables - 只允许特定 ip
sudo iptables -a input -p tcp -s 192.168.1.100 --dport 3306 -j accept
sudo iptables -a input -p tcp --dport 3306 -j drop

# firewalld - 创建富规则
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'

3.3 密码策略强化

-- 查看当前密码策略
show variables like 'validate_password%';

-- 设置为 strong 级别
set global validate_password.policy=strong;

-- 设置最小密码长度
set global validate_password.length=12;

-- 设置密码过期策略
alter user 'root'@'%' password expire interval 90 day;

-- 设置密码重用限制
set global password_history=5;          -- 不能重用最近 5 个密码
set global password_reuse_interval=365; -- 365 天内不能重用

配置文件持久化(my.ini/my.cnf):

[mysqld]
# 密码策略
validate_password.policy=strong
validate_password.length=12
validate_password.mixed_case_count=2
validate_password.number_count=2
validate_password.special_char_count=2

# 密码过期和重用
default_password_lifetime=90
password_history=5
password_reuse_interval=365

3.4 连接限制

-- 限制最大连接数
alter user 'root'@'%' with max_connections_per_hour 100;
alter user 'root'@'%' with max_queries_per_hour 10000;

-- 查看用户资源限制
select user, host, max_connections, max_user_connections
from mysql.user where user='root';

全局配置

[mysqld]
max_connections=500
max_user_connections=50
max_connect_errors=10

3.5 审计日志(enterprise)

mysql 企业版支持审计插件:

-- 安装审计插件
install plugin audit_log soname 'audit_log.so';

-- 配置审计规则
set global audit_log_policy='all';
set global audit_log_format='json';

社区版替代方案

  • 使用 general log(性能影响大)
  • 使用 proxysql 进行审计
  • 使用操作系统的审计功能(auditd)

4. 常见问题排查

4.1 连接被拒绝

错误信息

error 2003 (hy000): can't connect to mysql server on '192.168.1.100' (10061)

排查步骤

1. 检查 mysql 服务状态

# windows
sc query mysql80

# linux
sudo systemctl status mysql

2. 检查端口监听

# windows
netstat -ano | findstr :3306

# linux
ss -tuln | grep 3306

预期输出应包含 0.0.0.0:3306 而非 127.0.0.1:3306

3. 检查防火墙

# windows
netsh advfirewall firewall show rule name=all | findstr mysql

# linux
sudo firewall-cmd --list-all
sudo iptables -l -n | grep 3306

4. 检查 bind-address

show variables like 'bind_address';

应该是 0.0.0.0 或服务器 ip,而非 127.0.0.1

4.2 认证失败

错误信息

error 1045 (28000): access denied for user 'root'@'192.168.1.100' (using password: yes)

排查步骤

1. 验证用户存在

-- 在服务器本地登录
mysql -uroot -p

-- 查询用户
select user, host, plugin from mysql.user where user='root';

2. 检查主机匹配

-- 查看允许的主机
select user, host from mysql.user where user='root';

如果只有 root@localhost,需要创建 root@'%'root@'客户端ip'

3. 验证密码

-- 重置密码
alter user 'root'@'%' identified by 'newpassword123!';
flush privileges;

4. 检查账户锁定

select user, host, account_locked from mysql.user where user='root';

-- 如果被锁定,解锁
alter user 'root'@'%' account unlock;

4.3 认证插件不支持

错误信息

authentication plugin 'caching_sha2_password' cannot be loaded:
dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found

解决方案

方案 1:修改用户认证插件

alter user 'root'@'%' identified with mysql_native_password by 'password123!';
flush privileges;

方案 2:升级客户端

  • mysql workbench: 8.0+
  • navicat: 12.0+
  • phpmyadmin: 4.9+
  • mysql connector: 对应语言的 8.0+ 版本

方案 3:在连接字符串中指定

# jdbc
jdbc:mysql://192.168.1.100:3306/db?defaultauthenticationplugin=mysql_native_password

# python
mysql.connector.connect(
    host='192.168.1.100',
    user='root',
    password='password123!',
    auth_plugin='mysql_native_password'
)

4.4 ssl 连接问题

错误信息

error 2026 (hy000): ssl connection error: error:00000001:lib(0):func(0):reason(1)

解决方案

1. 检查 ssl 配置

show variables like '%ssl%';

2. 禁用 ssl 要求(临时)

alter user 'root'@'%' require none;

3. 客户端显式指定 ssl 模式

# 禁用 ssl
mysql -h 192.168.1.100 -u root -p --ssl-mode=disabled

# 可选 ssl
mysql -h 192.168.1.100 -u root -p --ssl-mode=preferred

# 必需 ssl
mysql -h 192.168.1.100 -u root -p --ssl-mode=required

4.5 密码验证策略限制

错误信息

error 1819 (hy000): your password does not satisfy the current policy requirements

解决方案

方案 1:使用符合策略的强密码

-- 检查策略要求
show variables like 'validate_password%';

-- 使用符合要求的密码
alter user 'root'@'%' identified by 'strongpass123!@#';

方案 2:临时降低策略级别(不推荐)

set global validate_password.policy=low;
set global validate_password.length=6;

-- 修改密码
alter user 'root'@'%' identified by 'simple1!';

-- 改回严格策略
set global validate_password.policy=medium;
set global validate_password.length=8;

5. 生产环境建议

5.1 安全清单

必须实施(critical)

  • 禁止使用 root@‘%’:创建专用管理账户
  • 强密码策略:启用 validate_password,medium 或 strong
  • ip 白名单:仅允许已知 ip 访问
  • 定期更新密码:设置密码过期策略
  • 防火墙规则:严格限制 3306 端口访问

推荐实施(high)

  • 启用 ssl/tls:加密传输数据
  • 最小权限原则:按需分配权限
  • 审计日志:记录所有管理操作
  • 定期备份:包括用户权限表
  • 监控连接:异常登录告警

可选实施(medium)

  • 📝 使用 vpn 或堡垒机访问
  • 📝 启用双因素认证(需要插件)
  • 📝 数据库连接池限制
  • 📝 定期安全审计

5.2 账户管理策略

-- 管理员账户(dba 使用)
create user 'dba_admin'@'10.0.1.%' identified by 'dbaadminpass123!';
grant all privileges on *.* to 'dba_admin'@'10.0.1.%' with grant option;

-- 应用只读账户
create user 'app_reader'@'10.0.2.%' identified by 'appreadpass123!';
grant select on production_db.* to 'app_reader'@'10.0.2.%';

-- 应用读写账户
create user 'app_writer'@'10.0.2.%' identified by 'appwritepass123!';
grant select, insert, update, delete on production_db.* to 'app_writer'@'10.0.2.%';

-- 备份账户
create user 'backup_user'@'10.0.3.10' identified by 'backuppass123!';
grant select, lock tables, reload, show view on *.* to 'backup_user'@'10.0.3.10';

-- 监控账户
create user 'monitor'@'10.0.4.%' identified by 'monitorpass123!';
grant process, replication client, select on *.* to 'monitor'@'10.0.4.%';

flush privileges;

5.3 连接配置最佳实践

my.ini/my.cnf 生产配置示例

[mysqld]
# 网络配置
bind-address=0.0.0.0
port=3306
max_connections=500
max_connect_errors=100

# 认证配置
default_authentication_plugin=caching_sha2_password

# ssl 配置
require_secure_transport=on  # 强制使用 ssl
ssl_ca=/etc/mysql/ssl/ca.pem
ssl_cert=/etc/mysql/ssl/server-cert.pem
ssl_key=/etc/mysql/ssl/server-key.pem

# 密码策略
validate_password.policy=strong
validate_password.length=12
validate_password.mixed_case_count=2
validate_password.number_count=2
validate_password.special_char_count=2
default_password_lifetime=90
password_history=5
password_reuse_interval=365

# 性能配置
max_allowed_packet=256m
wait_timeout=28800
interactive_timeout=28800

# 日志配置
log_error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

5.4 监控与告警

监控指标

连接监控

-- 当前连接数
show status like 'threads_connected';

-- 最大连接数
show variables like 'max_connections';

-- 连接错误
show status like 'connection_errors%';

-- 详细连接信息
select * from information_schema.processlist where user='root';

失败登录监控

-- 查看错误日志
select * from performance_schema.error_log
where error_code in (1045, 1130)  -- access denied, host blocked
order by logged desc limit 50;

告警脚本示例(linux)

#!/bin/bash
# mysql_monitor.sh

# 配置
mysql_user="monitor"
mysql_pass="monitorpass123!"
alert_email="admin@example.com"
max_connections_percent=80

# 获取当前连接数
current=$(mysql -u$mysql_user -p$mysql_pass -e "show status like 'threads_connected';" | awk 'nr==2 {print $2}')
max=$(mysql -u$mysql_user -p$mysql_pass -e "show variables like 'max_connections';" | awk 'nr==2 {print $2}')

# 计算百分比
percent=$((current * 100 / max))

# 告警
if [ $percent -gt $max_connections_percent ]; then
    echo "warning: mysql connections at ${percent}% (${current}/${max})" | \
    mail -s "mysql connection alert" $alert_email
fi

# 检查失败登录
failed=$(mysql -u$mysql_user -p$mysql_pass -e "show status like 'aborted_connects';" | awk 'nr==2 {print $2}')
if [ $failed -gt 100 ]; then
    echo "warning: $failed failed connection attempts" | \
    mail -s "mysql security alert" $alert_email
fi

添加到 crontab

# 每 5 分钟检查一次
*/5 * * * * /path/to/mysql_monitor.sh

5.5 定期维护任务

每日任务

-- 1. 检查异常连接
select user, host, count(*) as connections
from information_schema.processlist
group by user, host
having connections > 10;

-- 2. 检查锁定账户
select user, host, account_locked
from mysql.user
where account_locked='y';

-- 3. 检查过期密码
select user, host, password_expired
from mysql.user
where password_expired='y';

每周任务

-- 1. 审查用户权限
select user, host, group_concat(distinct db) as databases
from mysql.db
group by user, host;

-- 2. 检查未使用的账户(需要配合日志)
select user, host, password_last_changed
from mysql.user
where password_last_changed < date_sub(now(), interval 90 day);

每月任务

  • 密码轮换(关键账户)
  • 权限审计
  • 安全补丁更新
  • 访问日志分析

6. 应用程序连接示例

6.1 命令行连接

# 基本连接
mysql -h 192.168.1.100 -p 3306 -u root -p

# 指定数据库
mysql -h 192.168.1.100 -u root -p mydb

# 使用 ssl
mysql -h 192.168.1.100 -u root -p --ssl-mode=required

# 使用旧版认证插件
mysql -h 192.168.1.100 -u root -p --default-auth=mysql_native_password

# 执行 sql 文件
mysql -h 192.168.1.100 -u root -p < script.sql

6.2 编程语言连接

java (jdbc)

string url = "jdbc:mysql://192.168.1.100:3306/mydb" +
             "?usessl=true" +
             "&requiressl=true" +
             "&allowpublickeyretrieval=true";

connection conn = drivermanager.getconnection(
    url,
    "root",
    "password123!"
);

python (mysql-connector-python)

import mysql.connector

config = {
    'host': '192.168.1.100',
    'port': 3306,
    'user': 'root',
    'password': 'password123!',
    'database': 'mydb',
    'ssl_disabled': false,
    'auth_plugin': 'caching_sha2_password'
}

conn = mysql.connector.connect(**config)

php (mysqli)

<?php
$mysqli = new mysqli(
    '192.168.1.100',
    'root',
    'password123!',
    'mydb',
    3306
);

// 启用 ssl
$mysqli->ssl_set(null, null, '/path/to/ca.pem', null, null);
$mysqli->real_connect(
    '192.168.1.100',
    'root',
    'password123!',
    'mydb',
    3306,
    null,
    mysqli_client_ssl
);
?>

node.js (mysql2)

const mysql = require('mysql2');

const connection = mysql.createconnection({
  host: '192.168.1.100',
  port: 3306,
  user: 'root',
  password: 'password123!',
  database: 'mydb',
  ssl: {
    rejectunauthorized: true
  }
});

connection.connect();

.net (mysql.data)

string connstr = "server=192.168.1.100;port=3306;" +
                 "user=root;password=password123!;" +
                 "database=mydb;sslmode=required;";

mysqlconnection conn = new mysqlconnection(connstr);
conn.open();

7. 故障恢复指南

7.1 忘记 root 密码

windows 环境

1. 停止 mysql 服务

sc stop mysql80

2. 跳过权限验证启动

# 创建 init 文件
echo alter user 'root'@'localhost' identified by 'newpassword123!'; > c:\mysql-init.txt

# 使用 init 文件启动
"c:\program files\mysql\mysql server 8.0\bin\mysqld.exe" --defaults-file="c:\programdata\mysql\mysql server 8.0\my.ini" --init-file=c:\mysql-init.txt --console

3. 正常重启

# ctrl+c 停止上述进程
sc start mysql80

# 删除 init 文件
del c:\mysql-init.txt

linux 环境

1. 停止 mysql

sudo systemctl stop mysql

2. 跳过权限验证启动

# 创建 init 文件
sudo cat > /tmp/mysql-init.sql << eof
alter user 'root'@'localhost' identified by 'newpassword123!';
flush privileges;
eof

# 使用 init 文件启动
sudo mysqld --init-file=/tmp/mysql-init.sql &

# 等待几秒
sleep 5

3. 正常重启

# 停止临时进程
sudo killall mysqld

# 正常启动
sudo systemctl start mysql

# 删除 init 文件
sudo rm /tmp/mysql-init.sql

7.2 账户被锁定

-- 查看锁定状态
select user, host, account_locked from mysql.user where user='root';

-- 解锁账户
alter user 'root'@'%' account unlock;

-- 清除连接错误计数
flush hosts;

7.3 权限丢失

-- 重新授予完整权限
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

-- 验证权限
show grants for 'root'@'%';

8. 安全审计清单

8.1 配置审计

-- 1. 检查空密码账户(危险!)
select user, host from mysql.user where authentication_string='';

-- 2. 检查匿名用户(危险!)
select user, host from mysql.user where user='';

-- 3. 检查过于宽松的权限
select user, host from mysql.user where host='%' and user='root';

-- 4. 检查不安全的认证插件
select user, host, plugin from mysql.user
where plugin='mysql_old_password';

-- 5. 检查 ssl 配置
show variables like '%ssl%';

-- 6. 检查密码策略
show variables like 'validate_password%';

-- 7. 检查连接限制
show variables like 'max_connections';
show variables like 'max_connect_errors';

8.2 加固建议

-- 删除匿名用户
delete from mysql.user where user='';

-- 删除 test 数据库
drop database if exists test;

-- 删除远程 root(如果不需要)
delete from mysql.user where user='root' and host!='localhost';

-- 刷新权限
flush privileges;

9. 快速参考

9.1 常用命令速查

-- 用户管理
create user 'user'@'host' identified by 'password';
drop user 'user'@'host';
alter user 'user'@'host' identified by 'newpassword';
rename user 'old'@'host' to 'new'@'host';

-- 权限管理
grant all privileges on *.* to 'user'@'host';
grant select, insert on db.* to 'user'@'host';
revoke all privileges on *.* from 'user'@'host';
show grants for 'user'@'host';

-- 账户管理
alter user 'user'@'host' account lock;
alter user 'user'@'host' account unlock;
alter user 'user'@'host' password expire;
alter user 'user'@'host' require ssl;

-- 刷新权限
flush privileges;
flush hosts;

9.2 关键配置项

[mysqld]
# 网络
bind-address=0.0.0.0
port=3306

# 认证
default_authentication_plugin=caching_sha2_password

# 密码
validate_password.policy=medium
validate_password.length=8

# ssl
require_secure_transport=on

# 连接
max_connections=500
max_connect_errors=100

10. 总结

核心要点

  1. mysql 8.0 默认更安全:新认证插件、密码策略、localhost 限制
  2. 远程访问三要素:用户权限 + 服务器配置 + 防火墙规则
  3. 安全优先:生产环境避免使用 root@‘%’,采用最小权限原则
  4. 兼容性处理:旧客户端需要切换到 mysql_native_password
  5. 持续监控:审计日志、连接监控、异常告警

推荐配置流程

-- 1. 创建专用远程管理账户(而非 root)
create user 'db_admin'@'指定ip' identified by 'strongpassword123!';

-- 2. 授予必要权限
grant all privileges on *.* to 'db_admin'@'指定ip' with grant option;

-- 3. 设置安全选项
alter user 'db_admin'@'指定ip' require ssl;
alter user 'db_admin'@'指定ip' password expire interval 90 day;

-- 4. 刷新权限
flush privileges;

-- 5. 验证
show grants for 'db_admin'@'指定ip';

服务器配置

[mysqld]
bind-address=0.0.0.0
validate_password.policy=medium
require_secure_transport=on

防火墙:仅开放到特定 ip 的 3306 端口。

到此这篇关于mysql8.0 root用户远程登录配置完整步骤记录的文章就介绍到这了,更多相关mysql8.0 root用户远程登录配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com