mysql安装完成后如何配置权限_mysql安全管理设置

4次阅读

是的。mysql 5.7+ 默认仅创建 root@localhost 和 root@127.0.0.1,无 root@’%’,远程连接会报 access denied;需显式创建用户并授权,且必须执行 FLUSH PRIVILEGES 生效。

mysql安装完成后如何配置权限_mysql安全管理设置

安装完 MySQL 后,root 用户默认只能本地登录?

是的。MySQL 5.7+ 安装向导默认只创建 root@localhost(或 root@127.0.0.1),这意味着你用 mysql -uroot -p 在本机能连上,但远程客户端(比如 navicatpython 脚本从另一台机器连)会直接报错 Access denied for user 'root'@'xxx.xxx.xxx.xxx' —— 因为 user 表里根本没这条记录。

别急着 GRANT ALL ON *.*,先确认当前有哪些 root 用户:

select user, host FROM mysql.user WHERE user = 'root';

常见结果是两行:root@localhostroot@127.0.0.1,但没有 root@'%'。想开远程?不是改密码,而是加用户:

  • CREATE USER 'root'@'%' IDENTifIED BY '你的强密码';
  • GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  • FLUSH PRIVILEGES;

⚠️ 注意:WITH GRANT OPTION 允许该用户再授予权限,生产环境慎用;如果只是开发测试,可以去掉它。

为什么刚建的用户连不上数据库,show databases 只看到 information_schema?

新建用户(比如 CREATE USER 'appuser'@'%' IDENTIFIED BY 'pwd';)默认没有任何库表权限,SHOW DATABASES 也只会列出系统库,因为普通用户看不到其他数据库名 —— 这是 MySQL 的默认安全策略,不是 bug

要让 appuser 访问 myapp 库,必须显式授权:

  • CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • GRANT SELECT, INSERT, UPDATE, delete ON myapp.* TO 'appuser'@'%';
  • FLUSH PRIVILEGES;

别漏掉 FLUSH PRIVILEGES; —— 权限变更不会自动生效,必须刷新内存中的权限缓存。否则你会反复重试却始终没效果。

哪些高危权限必须禁用?非管理员账号绝不能有

MySQL 的 FILEPROCESSSUPERSHUTDOWNCREATE USER 这几类权限,等同于把服务器的「后门钥匙」交出去。黑客一旦拿下一个低权限账号,就能靠它们提权、读取任意文件(如 /etc/passwd)、杀掉服务、甚至创建新管理员。

检查有没有越权账号:

SELECT user, host FROM mysql.user WHERE File_priv = 'Y' OR Process_priv = 'Y' OR Super_priv = 'Y' OR Shutdown_priv = 'Y' OR Create_user_priv = 'Y';

如果返回了非 root 账号,立刻回收:

  • REVOKE FILE ON *.* FROM 'appuser'@'%';
  • REVOKE PROCESS, SUPER, SHUTDOWN, CREATE USER ON *.* FROM 'appuser'@'%';
  • FLUSH PRIVILEGES;

特别注意:REVOKE 不会删除用户,只清权限;而 DROP USER 才是彻底删账号。别混淆。

配置完权限,远程还是连不上?别忘了防火墙和 bind-address

即使 MySQL 内部已授权 'user'@'%',外部仍连不上,大概率卡在两个地方:

  • windows 防火墙 / linux ufwiptables 拦截了 3306 端口 —— 开放端口或临时关防火墙验证
  • MySQL 配置文件(my.cnfmy.ini)里 bind-address = 127.0.0.1(默认值),导致只监听本地回环,不接受外部连接。改成 bind-address = 0.0.0.0 或注释掉该行

改完配置必须重启 MySQL 服务:sudo systemctl restart mysql(Linux)或 windows 服务管理器里重启 MySQL80 服务。改完不重启,等于白改。

最后提醒一句:权限最小化不是教条,而是成本核算——每个额外权限都意味着一次潜在的逃逸路径。宁可多跑几遍 GRANT,也不要图省事给 ALL PRIVILEGES

text=ZqhQzanResources