首页 > 编程笔记 > MySQL笔记 阅读:22

MySQL创建新用户的2种方式(附带实例)

MySQL 提供了许多语句来管理用户账号,包括登录和退出 MySQL 服务器、创建用户、删除用户、密码管理和权限管理等内容。MySQL 数据库的安全性需要通过账户管理来保证。

在MySQL数据库中,创建新用户必须有相应的权限来执行创建操作,有两种方式创建新用户:
下面分别介绍这两种创建新用户的方法。

使用CREATE USER语句创建新用户

执行 CREATE USER 或GRANT 语句时,服务器会修改相应的用户授权表,添加或者修改用户及其权限。

CREATE USER 语句的基本语法格式如下:
CREATE USER user_specification
   [, user_specification] ...

user_specification:
   user@host
   [
      IDENTIFIED BY [PASSWORD] 'password'
     | IDENTIFIED WITH auth_plugin [AS 'auth_string']
   ]

CREATE USER 语句会添加一个新的 MySQL 账户。使用 CREATE USER 语句的用户,必须有全局的 CREATE USER 权限或 mysql 数据库的 INSERT 权限。每添加一个用户,CREATE USER 语句会在 mysql.user 表中添加一条新记录,但是新创建的账户没有任何权限。如果添加的账户已经存在,CREATE USER 语句会返回一个错误。

【实例】使用 CREATE USER 创建一个用户,用户名是 jeffrey,密码是 mypass,主机名是 localhost,命令如下:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
如果只指定用户名部分 'jeffrey',主机名部分则默认为 '%'(对所有的主机开放权限)。

user_specification 告诉 MySQL 服务器当用户登录时怎么验证用户的登录授权。如果指定用户登录不需要密码,可以省略 IDENTIFIED BY 部分:
CREATE USER 'jeffrey'@'localhost';
此种情况,MySQL 服务端使用内建的身份验证机制,用户登录时不能指定密码。

如果要创建指定密码的用户,需要 IDENTIFIED BY 指定明文密码值:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
此种情况,MySQL 服务端使用内建的身份验证机制,用户登录时必须指定密码。

MySQL 的某些版本中会引入授权表的结构变化,添加新的特权或功能。每当更新 MySQL 到一个新的版本时,应该检查授权表,以确保它们有最新的结构,确认可以使用任何新功能。

直接操作MySQL用户表

通过前面的介绍,使用 CREATE USER 创建新用户时,实际上都是在 user 表中添加一条新的记录。因此,可以使用 INSERT 语句向 user 表中直接插入一条记录来创建一个新的用户。

使用 INSERT 语句,必须拥有对 mysql.user 表的 INSERT 权限。使用 INSERT 语句创建新用户的基本语法格式如下:
INSERT INTO MySQL.user(Host, User, authentication_string) VALUES('host', 'username', MD5('password'));
Host、User、authentication_string 分别为 user 表中的主机、用户名称和密码字段;MD5() 函数为密码加密函数。

【实例】使用 INSERT 创建一个新账户,其用户名称为 customer1,主机名称为 localhost,密码为 aa123456,INSERT 语句如下:
INSERT INTO user (Host,User, authentication_string) VALUES('localhost','customer1', MD5('aa123456'));
语句执行结果如下:
MySQL> use mysql;
MySQL> INSERT INTO user (Host,User, authentication_string) -> VALUES('localhost','customer1', MD5('aa123456'));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

语句执行失败,查看警告信息如下:
MySQL> SHOW WARNINGS;
+-------+------+---------------------------------------------------+
| Level | Code | Message                                           |
+-------+------+---------------------------------------------------+
| Error | 1364 | Field 'ssl_cipher' doesn't have a default value   |
| Error | 1364 | Field 'x509_issuer' doesn't have a default value  |
| Error | 1364 | Field 'x509_subject' doesn't have a default value |
+-------+------+---------------------------------------------------+
因为 ssl_cipher、x509_issuer 和 x509_subject 3 个字段在 user 表定义中没有设置默认值,所以在这里提示错误信息,影响 INSERT 语句的执行。

使用 SELECT 语句查看 user 表中的记录:
MySQL> SELECT host,user, authentication_string FROM user ;
+---------+----------------+---------------------------------------------+
| host    | user           |authentication_string                        |
+---------+----------------+---------------------------------------------+
|localhost|jeffrey         |*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4    |
|localhost|mysql.infoschema|$A$005$THISISACOMBINATIONOFIVALIDSALTANDP    |
|localhost|mysql.session   |$A$005$THISISACOMBINATIONOFINVALIDSALTANDPAS |
|localhost|mysql.sys       |$A$005$THISISACOMBINATIONOFINVAUSTNEVERREUSED|
|localhost|root            |*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9    |
+---------+----------------+---------------------------------------------+
可以看到新用户 customer1 并没有添加到 user 表中,说明添加新用户失败。

相关文章