mysql安装完成后如何创建普通用户_mysql权限基础操作

1次阅读

创建普通用户前必须先用root登录,因mysql默认仅含root用户;需用create user和grant分步创建并授权,严禁直接操作mysql.user表,且须执行flush privileges生效权限。

mysql安装完成后如何创建普通用户_mysql权限基础操作

创建普通用户前必须先登录 root

MySQL 安装完默认只有 root 用户(且通常无密码或仅本地可连),必须用它登录才能创建其他用户。常见错误是直接用未授权的用户名尝试连接,报错 access denied for user 'xxx'@'localhost' —— 这说明还没建用户,不是密码错了。

用命令行登录:

mysql -u root -p

如果安装时没设 root 密码,可能直接回车;若提示拒绝,检查是否启用了 socket 认证(如 ubuntuauth_socket 插件),此时需先用 sudo mysql 进去再改。

用 CREATE USER + GRANT 分两步建用户最安全

别用过时的 INSERT INTO mysql.user 直接写表,权限逻辑复杂,容易漏刷新或配错 host。标准做法是:

  • CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'strong_pass123'; —— 指定只允许本机连接
  • GRANT select, INSERT ON myapp.* TO 'devuser'@'localhost'; —— 只给业务库 myapp 的读写,不给 mysql 系统库
  • FLUSH PRIVILEGES; —— 必须执行,否则权限不生效(尤其在修改系统表后)

注意 'devuser'@'localhost''devuser'@'%' 是两个不同用户,后者允许任意 IP 连接,生产环境慎用。

常见权限误配:ALL PRIVILEGES ≠ 安全

新手常写 GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';,这等于给了 DROP databaseSHUTDOWNFILE 等高危权限,一旦应用被注入或配置泄露,整个 MySQL 实例可能被清空或提权。

更合理的做法是按最小权限原则:

  • Web 应用一般只需 SELECT, INSERT, UPDATE, delete, CREATE TEMPORARY TABLES
  • 后台管理工具可能额外需要 SHOW VIEWEXECUTE(存过)
  • 绝对避免给 GRANT OPTION,除非你明确要让该用户转授权限

查当前用户权限用:SHOW GRANTS FOR 'devuser'@'localhost';

连接测试与 host 匹配问题

创建完用户后,立刻换账号测试:

mysql -u devuser -p -h 127.0.0.1

注意这里用 -h 127.0.0.1 而非 -h localhost —— 前者走 TCP/IP,后者在 linux 上默认走 socket,而 'user'@'localhost''user'@'127.0.0.1' 在 MySQL 权限系统里是两个独立条目。

如果报 Host 'xxx' is not allowed to connect,说明用户定义的 host 不匹配当前连接方式。解决方法要么补一个对应 host 的用户(如 CREATE USER 'devuser'@'127.0.0.1'),要么统一用通配符 'devuser'@'%'(仅限可信内网)。

host 匹配优先级很关键:MySQL 会从最具体的 host 开始匹配(如 'user'@'192.168.1.100' > 'user'@'192.168.1.%' > 'user'@'%'),但不会自动 fallback,写错就真连不上。

text=ZqhQzanResources