当前位置: 首页 > news >正文

MySQL——数据库的高级操作(二)用户管理(2)创建普通用户

        在创建新用户之前,可以通过 SELECT 语句查看 mysql.user 表中有哪些用户,查询结果如下:

mysql> USE mysql;
Database changed
mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

        从上述结果可以看出,user 表中只有一个 root 用户信息。

        由于 MySQL中存储的数据较多,通常一个 root 用户是无法管理这些数据的,因此需要创建多个普通用户来管理不同的数据,创建普通用户有三种方式,接下来将针对这三种方式进行详细的讲解。

1、使用 GRANT 语句创建用户

        GRANT语句不仅可以创建新用户,还可以对用户进行授权,该语句会自动加载权限表,不需要手动刷新,而且安全、准确、错误少,因此,使用 GRANT 语句是创建用户最常用的方法。

        GRANT语句创建用户的语法格式如下:

GRANT privileges oN database.tableTo 'username'@'hostname'[IDENTIFIED BY [PASSWORD]'password'][, 'username'@'hostname [IDENTIFIED BY [PASSwORD]'password']]...

        上述语法格式中,privileges 参数表示该用户具有的权限信息,database.table 表示新用户的权限范围表,可以在指定的数据库、表上使用自己的权限,username参数是新用户的名称,hostname 参数是主机名,password 参数是新用户的密码。

        使用 GRANT 语句创建一个新用户,用户名为 user1、密码为 123,并授予该用户对chapter08.student 表有查询权限,GRANT 语句如下:

mysql> CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,可以通过 SELECT 语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
7 rows in set (0.00 sec)

        从执行结果可以看出,使用 GRANT语句成功地创建一个新用户 userl,但密码显示的并不是 123,而是一串字符,这是因为在创建用户时,MySQL会对用户的密码自动加密,以提高数据库的安全性。

        需要注意的是,用户使用 GRANT 语句创建新用户时,必须有 GRANT 权限。

2、使用 CREATE USER 语句创建用户

        使用 CREATE USER 语句创建新用户时,服务器会自动修改相应的授权表,但需要注意的是,该语句创建的新用户是没有任何权限的。CREATE USER语句创建用户的语法格式如下:

CREATE USER 'username'@'hostname'[IDENTIFIED BY [PASSWORD]'password'][,'username'@'hostname'[IDENTIFIED BY [PASSwORD]'password']]...

        上述语法格式中,username表示新创建的用户名,hostname 表示主机名,IDENTIFIED BY 关键字用于设置用户的密码,password 表示用户的密码,PASSWORD关键字表示使用哈希值设置密码,该参数是可选的,如果密码是一个普通的字符串,就不需要使用 PASSWORD 关键字。

        使用 CREATE USER 语句创建一个新用户,用户名为 user2、密码为 123,CREATEUSER 语句如下:

mysql> CREATE USER 'user2'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,可以通过 SELECT语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user2            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
6 rows in set (0.00 sec)

        从执行结果可以看出,CREATE USER语句成功地创建了一个 user2 用户。需要注意的是,如果添加的用户已经存在,那么在执行 CREATE USER 语句时会报错。

3、使用 INSERT 语句创建用户

        通过前面的讲解可知,不管是CREATE USER语句还是 GRANT 语句,在创建用户时,实际上都是在 user 表中添加一条新的记录,因此,也可以使用 INSERT 语句直接在该表中添加一个用户。

        INSERT 语句创建用户的语法格式如下:

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

        上述语法格式中,mysql.user 参数表示操作的表,Host、User、Password、ssl_cipher、x509_issuer、x509_subject 为相应字段,PASSWORD()是一个加密函数,用于给密码加密。

        需要注意的是,使用 INSERT 语句创建用户时,通常只需添加 Host、User 和Password 这三个字段即可,其他的字段取其默认值,但由于 ssl_cipher、x509 issuer、x509_subject 字段是没有默认值的,因此 INSERT 语句创建用户时,还需要为这几个字段设置初始值。

        使用 INSERT 语句直接在 mysql. user 表中创建一个新用户,用户名为 user3、密码为 123,INSERT 语句如下:

mysql> CREATE USER 'user3'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SELECT ON chapter08.student TO 'user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,就可以通过 SELECT 语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user2            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user3            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
7 rows in set (0.00 sec)

        从执行结果可以看出,使用 INSERT 语句成功地创建一个新用户 user3,但是由于INSERT 语句没有刷新权限表的功能,因此,user3 用户暂时是不能使用的,为了让当前用户生效,还需要手动刷新当前的权限表或重新启动 MySQL服务,刷新权限表的语句如下:

FLUSH PRIVILEGES;

        上述语句执行成功后,就可以使用 user3 用户登录 MySQL 数据库了。

http://www.lryc.cn/news/436196.html

相关文章:

  • VIT论文阅读
  • Python编程入门必备:def关键字与函数参数
  • LiveKit的agent介绍
  • 青龙面板 升级 及其 依赖更新修复 检测and日志删除等
  • 坐牢第三十七天(Qt)
  • Vidu 全球首发「主体参照」新功能,一键同步角色特征;GPT-4o 实时音频项目负责人离职创业丨 RTE 开发者日报
  • 电子地图的主要功能与应用
  • 基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站
  • 简单介绍 NVIDIA推出的图形处理单元(GPU)架构“安培架构“
  • Qiskit:量子计算的Python工具包
  • Python——贪吃蛇
  • WPF 依赖属性与附加属性(面试长问)
  • Python 中的各括号用法
  • 业务流程建模(BPM)的重要性及其应用
  • isxdigit函数讲解 <ctype.h>头文件函数
  • Linux中安装NextCloud
  • 【编程基础知识】什么是数据库事务
  • 移植案例与原理 - XTS子系统之应用兼容性测试用例开发
  • 关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf
  • 如何本地搭建Whisper语音识别模型
  • 微信小程序仿微信聊天界面
  • 文件用电脑生成的在线技巧,能够轻松将多种类型文件转二维码
  • QT实现TCP/UDP通信
  • 流程自动化变革:看低代码开发如何赋能企业创新转型
  • 可提示 3D 分割研究里程碑!SAM2Point:SAM2加持泛化任意3D场景、任意提示!
  • Rabbitmq中得RPC调用代码详解
  • ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】
  • split 分割字符串方法解析,substring 截取字符串方法解析;二者的作用和区别?使用时需要注意什么?附代码和运行图
  • HTTP 协议的基本格式
  • STM32-HAL库开发快速入门