MySQL用户管理(创建、修改、删除用户)-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

MySQL 在安装时会默认创建一个名为 root 的用户该用户拥有超级权限可以控制整个 MySQL 服务器。

在对 MySQL 的日常管理和操作中为了避免有人恶意使用 root 用户控制数据库我们通常创建一些具有适当权限的用户尽可能地不用或少用 root 用户登录系统以此来确保数据的安全访问。

MySQL 提供了以下 3 种方法创建用户。

1. 使用CREATE USER语句创建用户

可以使用 CREATE USER 语句来创建 MySQL 用户并设置相应的密码。其基本语法格式如下 

CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]

参数说明如下

1) 用户

指定创建用户账号格式为 user_name'@'host_name。这里的user_name是用户名host_name为主机名即用户连接 MySQL 时所用主机的名字。如果在创建的过程中只给出了用户名而没指定主机名那么主机名默认为“%”表示一组主机即对所有主机开放权限。

3) IDENTIFIED BY子句
用于指定用户密码。新用户可以没有初始密码若该用户不设密码可省略此子句。
2) PASSWORD 'password'

PASSWORD 表示使用哈希值设置密码该参数可选。如果密码是一个普通的字符串则不需要使用 PASSWORD 关键字。'password' 表示用户登录时使用的密码需要用单引号括起来。

使用 CREATE USER 语句时应注意以下几点

  • CREATE USER 语句可以不指定初始密码。但是从安全的角度来说不推荐这种做法。
  • 使用 CREATE USER 语句必须拥有 mysql 数据库的 INSERT 权限或全局 CREATE USER 权限。
  • 使用 CREATE USER 语句创建一个用户后MySQL 会在 mysql 数据库的 user 表中添加一条新记录。
  • CREATE USER 语句可以同时创建多个用户多个用户用逗号隔开。

新创建的用户拥有的权限很少它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。如果两个用户的用户名相同但主机名不同MySQL 会将它们视为两个用户并允许为这两个用户分配不同的权限集合。

例 1

使用 CREATE USER 创建一个用户用户名是 test1密码是 test1主机名是 localhost。SQL 语句和执行过程如下。

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

在实际应用中我们应避免明文指定密码可以通过 PASSWORD 关键字使用密码的哈希值设置密码。 

在 MySQL 中可以使用 password() 函数获取密码的哈希值查看 test1 哈希值的 SQL 语句和执行过程如下

mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1')                         |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

2. 使用 INSERT 语句新建用户

可以使用 INSERT 语句将用户的信息添加到 mysql.user 表中但必须拥有对 mysql.user 表的 INSERT 权限。通常 INSERT 语句只添加 Host、User 和 authentication_string 这 3 个字段的值。

MySQL 5.7 的 user 表中的密码字段从 Password 变成了 authentication_string如果你使用的是 MySQL 5.7 之前的版本将 authentication_string 字段替换成 Password 即可。

 使用 INSERT 语句创建用户的代码如下

INSERT INTO mysql.user(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');

由于 mysql 数据库的 user 表中ssl_cipher、x509_issuer 和 x509_subject 这 3 个字段没有默认值所以向 user 表插入新记录时一定要设置这 3 个字段的值否则 INSERT 语句将不能执行。

示例下面使用 INSERT 语句创建名为 test2 的用户主机名是 localhost密码也是 test2。SQL 语句和执行过程如下

mysql> INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('localhost', 'test2', PASSWORD('test2'), '', '', '');
Query OK, 1 row affected, 1 warning (0.02 sec)

可以使用 FLUSH 命令让用户生效命令如下

FLUSH PRIVILEGES;

使用以上命令可以让 MySQL 刷新系统权限相关表。执行 FLUSH 命令需要 RELOAD 权限。
注意user 表中的 User 和 Host 字段区分大小写创建用户时要指定正确的用户名称或主机名。

3. 使用GRANT语句新建用户

虽然 CREATE USER 和 INSERT INTO 语句都可以创建普通用户但是这两种方式不便授予用户权限。于是 MySQL 提供了 GRANT 语句。

使用 GRANT 语句创建用户的基本语法形式如下:

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']

  • priv_type 参数表示新用户的权限
  • database.table 参数表示新用户的权限范围即只能在指定的数据库和表上使用自己的权限
  • user 参数指定新用户的账号由用户名和主机名构成
  • IDENTIFIED BY 关键字用来设置密码
  • password 参数表示新用户的密码。

示例使用 GRANT 语句创建名为 test3 的用户主机名为 localhost密码为 test3。该用户对所有数据库的所有表都有 SELECT 权限。SQL 语句和执行过程如下

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

其中“*.*” 表示所有数据库下的所有表。结果显示创建用户成功且 test3 用户对所有表都有查询SELECT权限。

技巧GRANT 语句是 MySQL 中一个非常重要的语句它可以用来创建用户、修改用户密码和设置用户权限。教程后面会详细介绍如何使用 GRANT 语句修改密码、更改权限。

修改用户RENAME USER

可以使用 RENAME USER 语句修改一个或多个已经存在的用户账号。语法格式如下

RENAME USER <旧用户> TO <新用户> 

  • <旧用户>系统中已经存在的 MySQL 用户账号。
  • <新用户>新的 MySQL 用户账号。

 使用 RENAME USER 语句时应注意以下几点

  • RENAME USER 语句用于对原有的 MySQL 用户进行重命名。
  • 若系统中旧账户不存在或者新账户已存在该语句执行时会出现错误。
  • 使用 RENAME USER 语句必须拥有 mysql 数据库的 UPDATE 权限或全局 CREATE USER 权限。

 示例使用 RENAME USER 语句将用户名 test1 修改为 testUser1主机是 localhost。SQL 语句和执行过程如下。

mysql> RENAME USER 'test1'@'localhost' -> TO 'testUser1'@'localhost';

Query OK, 0 rows affected (0.03 sec)

删除用户DROP/DELETE USER 

1. 使用 DROP USER 语句删除普通用户

使用 DROP USER 语句删除用户的语法格式如下

 DROP USER <用户1> [ , <用户2> ]…

其中用户用来指定需要删除的用户账号。
使用 DROP USER 语句应注意以下几点

  • DROP USER 语句可用于删除一个或多个用户并撤销其权限。
  • 使用 DROP USER 语句必须拥有 mysql 数据库的 DELETE 权限或全局 CREATE USER 权限。
  • 在 DROP USER 语句的使用中若没有明确地给出账户的主机名则该主机名默认为“%”。

注意用户的删除不会影响他们之前所创建的表、索引或其他数据库对象因为 MySQL 并不会记录是谁创建了这些对象。

 示例使用 DROP USER 语句删除用户'test1@'localhost'。SQL 语句和执行过程如下

mysql> DROP USER 'test1'@'localhost';

2. 使用DELETE语句删除普通用户

可以使用 DELETE 语句直接删除 mysql.user 表中相应的用户信息但必须拥有 mysql.user 表的 DELETE 权限。其基本语法格式如下

DELETE FROM mysql.user WHERE Host='hostname' AND User='username';

 Host 和 User 这两个字段都是 mysql.user 表的主键。因此需要两个字段的值才能确定一条记录。

示例

DELETE FROM mysql.user WHERE Host='localhost'AND User='test2';

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql