MySQL 创建用户的三种方法

MySQL 创建用户的三种方法

为了数据库安全,应避免频繁使用 root 用户,而是为不同应用和人员创建具有适当权限的专属用户。

方法对比速览

特性 `CREATE USER` (推荐) `GRANT` (推荐) `INSERT INTO` (不推荐)

易用性 高,语法简单直观 高,创建和授权一步到位 低,需手动处理字段和权限刷新

安全性 高 高 中,容易因遗漏字段或忘记刷新导致错误

功能 只创建用户,不授权 创建用户并同时授权 只创建用户,不授权

方法详解与示例

1. 使用 `CREATE USER` 语句 (最标准的方法)

基本语法:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';参数说明:

`'username'@'host'`:用户标识。

`host` 指定允许连接的主机,是实现安全的关键。

`'localhost'`:只能从数据库服务器本机连接。

`'192.168.1.%'`:允许从 `192.168.1.0/24` 网段连接。

`'%'`:允许从任何主机连接(生产环境慎用)。

`IDENTIFIED BY 'password'`:设置明文密码。MySQL 会自动将其加密后存入 `authentication_string` 字段。

示例 1:创建本地用户

创建用户 test1,只能从本机登录,密码为 test1

CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';

特点:

新创建的用户权限极少,只有 `USAGE` 权限,意味着能登录但几乎不能做任何操作。

创建后需要使用 `GRANT` 语句单独授权。

这是 MySQL 官方推荐的创建用户的标准方式。

2. 使用 `GRANT` 语句 (最常用的方法)

基本语法:

GRANT privilege_type ON database.table TO 'username'@'host' IDENTIFIED BY 'password';参数说明:

`privilege_type`:要授予的权限(如 `SELECT`, `INSERT`, `ALL PRIVILEGES`)。

`ON database.table`:权限作用范围(如 `*.*` 代表所有库所有表,`mydb.*` 代表 `mydb` 库下的所有表)。

其他参数与 `CREATE USER` 相同。

示例 2:创建用户并直接授权

创建用户 test3,允许从本地登录,密码 test3,并授予对所有数据库的查询权限

GRANT SELECT ON *.* TO 'test3'@'localhost' IDENTIFIED BY 'test3';

创建应用用户,允许从内网网段连接,并授予对特定数据库的全部操作权限

GRANT ALL PRIVILEGES ON `app_db`.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPassword!123';

特点:

创建用户和授权一步完成,是最实用、最高效的方法。

如果 `'username'@'host'` 不存在,会自动创建该用户。

在 MySQL 5.7 及以后版本中,此语法已被标记为弃用,但仍然广泛支持。更标准的做法是先 `CREATE USER`,再 `GRANT`。

3. 使用 `INSERT INTO` 语句 (不推荐的方法)

基本语法:

INSERT INTO mysql.user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)

VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');

必须执行以下命令使更改生效

FLUSH PRIVILEGES;

示例 3:直接向 user 表插入用户

向系统权限表直接插入用户记录

INSERT INTO mysql.user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)

VALUES ('localhost', 'test2', PASSWORD('test2'), '', '', '');

刷新权限,使新用户生效

FLUSH PRIVILEGES;

最佳实践总结

1. 首选方法:使用 `GRANT` 语句,因为它简洁、安全且高效。

2. 标准流程:在要求严格的环境,可采用标准流程:先 `CREATE USER` 创建用户,再用 `GRANT` 授予特定权限。

CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';

GRANT SELECT, INSERT, UPDATE ON `mydb`.* TO 'myuser'@'%';

3. 避免操作系统表:永远不要使用 `INSERT INTO mysql.user` 的方法创建用户,除非你非常清楚你在做什么。

4. 密码安全:

使用强密码。

在命令行中设置密码时,可以考虑先使用 `SELECT PASSWORD('your_plain_password');` 获取哈希值,然后在语句中使用 `IDENTIFIED BY PASSWORD '*hash_value*'`,以避免在历史记录中留下明文密码。

5. 主机限制:始终指定 `host` 部分,遵循最小权限原则,不要随意使用 `'%'`。

相关推荐

汽车之家
365bet在线体育投注

汽车之家

⌛ 01-25 👁️ 6695
宜宾会所哪里好玩
365bet育在线网址

宜宾会所哪里好玩

⌛ 02-03 👁️ 3243
德国7:1巴西6500倍赔率 估计今后不会再出现了
365bet在线体育投注

德国7:1巴西6500倍赔率 估计今后不会再出现了

⌛ 07-21 👁️ 4755
南非世界杯——哪三支球队锋线最为豪华?(按照官方...
365体育平台靠谱吗

南非世界杯——哪三支球队锋线最为豪华?(按照官方...

⌛ 01-27 👁️ 5631
博悅娛樂城活動、儲值與出金條款解析,拒絕違規保障玩家權益!
魔兽盗贼选哪个盟约
365体育平台靠谱吗

魔兽盗贼选哪个盟约

⌛ 11-04 👁️ 8833
苹果手机颜色反转功能:如何开启和使用,提升视觉体验
365体育平台靠谱吗

苹果手机颜色反转功能:如何开启和使用,提升视觉体验

⌛ 01-29 👁️ 7703
翡翠山水牌佩戴寓意详解:文化内涵、风水作用及挑选指南
2020.09探索蓝染——传统靛蓝染色工艺的起源
365bet在线体育投注

2020.09探索蓝染——传统靛蓝染色工艺的起源

⌛ 01-05 👁️ 822