MySQL数据库创建用户_修改用户_删除用户_设置用户

文章目录

  • 创建新用户
    • 使用 CREATE USER 语句创建用户
      • 创建新用户,并且使用哈希值设置密码
      • 创建一个只能在数据库所在主机访问数据库的用户
      • 创建一个只能从指定 IP 连接数据库的用户
      • 创建一个可以从任意 IP 连接数据库的用户
      • 创建一个没有密码的用户
    • 在 mysql.user 表中添加用户
    • 使用 GRANT 语句创建用户
      • 创建一个对所有数据库拥有查询权限的用户
      • 创建一个对某个数据库拥有全部权限的用户
      • 创建一个对某个数据库拥有部分权限的用户
      • 创建一个对某个数据库拥有部分权限的用户,但是该用户可以从任意 IP 登录数据库
      • 创建用户时,使用密文设置密码
      • 创建一个对某个数据表拥有部分权限的用户
  • 修改用户
    • 修改密码
    • 使用 rename 语句修改用户名和主机
    • 使用 update 语句修改主机名称
  • 删除用户

创建新用户

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

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

MySQL 提供了以下三种方法创建用户:

1.使用 CREATE USER 语句创建用户
2.使用 INSERT INTO 语句直接往 mysql.user 表中添加用户
3.使用 GRANT 语句创建用户

1.MySQL 的用户表示格式为:user_name@host,也就是说【用户名+主机名】必须唯一。关于 host 的详解请参见《MySQL的用户表(user)》。

2.如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。

3.新创建的用户默认拥有数据库 information_schema 只读权限;默认拥有数据库 test 全部的权限,而且还无法撤销这些权限。

使用 CREATE USER 语句创建用户

创建用户的命令语句格式如下:

mysql> CREATE USER 'user_name'@'host' IDENTIFIED BY 'password'; # 密码必须加引号
mysql> CREATE USER user_name IDENTIFIED BY 'password'; # host默认为%
mysql> CREATE USER user_name; # host默认为%,没有密码
mysql> CREATE USER user_name@localhost IDENTIFIED BY 'password'; # 用户名和主机名将引号省略掉
mysql> CREATE USER user_name@'%' IDENTIFIED BY 'password'; # 主机名含有%,必须加引号才可以;@'%'表示任意IP地址

说明:
1.user_name 指定要创建的用户名,用户名必须要有;用户名的引号可以省略
2.host 指定登录数据库的主机名,即指定该用户在哪个主机上可以登陆,通常是主机的 IP 地址。如果是本地用户可用 localhost;如果想让该用户可以从任意远程主机登陆,可以使用通配符 %
3.创建用户时,只指定了用户名,而没指定主机名,那么主机名默认为 %,表示对所有主机开放权限
4.创建用户时,主机名除非含有 %,否则可以省略引号
4.password 指定登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆数据库;密码必须加上引号

创建新用户,并且使用哈希值设置密码

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

在 MySQL 中,可以使用 password() 函数获取密码的哈希值。例如,查看 123456 哈希值的 SQL 语句如下:

mysql> select password('123456');
+-------------------------------------------+
| password('123456')                        |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 就是字符串“123456”的哈希值,接着创建用户时,使用哈希值作为密码:

mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
Query OK, 0 rows affected, 1 warning (0.00 sec)

用户创建成功后就可以使用密码“123456”登录了。

创建一个只能在数据库所在主机访问数据库的用户

例如,创建一个名为 linux 的用户,该用户只能在数据库服务器所在主机访问数据库,登录密码为:123456

mysql> CREATE USER 'linux'@'localhost' IDENTIFIED BY '123456';

注意:
1.127.0.0.1 表示只能通过该 IP 地址连接数据库服务器,不可以使用 localhost 连接,即使 localhost 指向 127.0.0.1 也不行
2.localhost 表示可以使用 localhost 连接数据库服务器,也可以使用 127.0.0.1 连接数据库服务器

创建一个只能从指定 IP 连接数据库的用户

mysql> CREATE USER 'pig'@'192.168.1.101' IDENTIFIED BY '123456'; 

创建一个可以从任意 IP 连接数据库的用户

mysql> CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; 
mysql> CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 无法执行
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 

创建一个没有密码的用户

mysql> CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
mysql> CREATE USER 'pig'@'%'; 

在 mysql.user 表中添加用户

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

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

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

mysql> INSERT INTO mysql.user(host, user,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('host', 'user_name', PASSWORD('password'), '', '', '');

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

下面使用 INSERT 语句创建名为 lwx 的用户,主机名是 localhost,密码也是 123456。SQL 语句如下:

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

结果显示,新建用户成功。但是这时如果通过该账户登录 MySQL 服务器,不会登录成功,因为 lwx 用户还没有生效。

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

mysql> FLUSH PRIVILEGES;

使用以上命令可以让 MySQL 刷新系统权限相关表。执行 FLUSH 命令需要 RELOAD 权限。

注意:
1.密码必须使用函数 password() 转换成哈希值,如果不是要这个函数,直接将密码字符串存储到字段 authentication_string 中,使用的时候根本无法使用,因为在登录数据库的时候 mysql 命令会自动将输入的密码串转换成哈希值再和 user 表中的 authentication_string 字段的值进行比较

2.user 字段值区分大小写,如果你设置的是大写字母,那么登录时输入的也必须是大写字母

3.host 字段值区分大小写,如果字段值含有大写字母,用户创建成功后,无法使用命令 drop user 语句删除;但是在登录时候,则没有大小写限制。

例如,添加用户时,你将 host 的值指定为 lOcalhost,如下所示:

mysql> INSERT INTO mysql.user(host, user, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('lOcalhost', 'lwx', PASSWORD('lwx'), '', '', '');

创建成功后,你可以正常登录数据库:

mysql> [root@htlwk0001host ~]# mysql -hlocalhost -ulwx -plwx;

但是无法使用 drop user 语句删除:

mysql> drop user 'lwx'@'lOcalhost';
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+--------------+-------------------------------------------+
| user          | host         | authentication_string                     |
+---------------+--------------+-------------------------------------------+
| root          | localhost    | *6969E01196B0CE74725D5CD9F8C58F1D7529C352 |
| root          | liaowenxiong | *6969E011096ECE74725D5CD9F8C58F1D7529C352 |
| root          | 127.0.0.1    | *6969E01196BECE74725D5CD9F8C58F1D7529C352 |
| root          | ::1          | *6969E01196BECE74725D5CD9F8C58F1D7529C352 |
| qppdd         | %            | *E076A4B08AE3A5232C8C9A2E8F66453026E6DDC4 |
| qsspw         | %            | *F252153EE4DB6A240EF45B402E625E901D052B38 |
| qsspw         | localhost    | *F252153EE4DB6A240EF45B402E625E901D052B38 |
| zentao        | 127.0.0.1    | *BB2C46D0478D229369733842BB14115A52D901C6 |
| root          | %            | *6969E01196BECE74725D5CD9F8C58F1D7529C352 |
| mysql.session | localhost    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| lwx           | lOcalhost    | *95A0014C845E6CF09BDE5EA63128614AF92E6C8F |
+---------------+--------------+-------------------------------------------+
12 rows in set (0.00 sec)

使用 GRANT 语句创建用户

虽然 create userinsert into mysql.user 语句都可以创建普通用户,但是这两种方式不便授予用户权限,而 grant 语句可以在创建新用户的同时给用户授权。

注:通过命令 grant 创建用户时必须加上 identified by 语句,而且密码必须加引号。

创建一个对所有数据库拥有查询权限的用户

下面使用 grant 语句创建名为 lwx 的用户,主机名为 localhost,密码为 lwx。该用户对所有数据库的所有表都有 select 权限。SQL 语句如下所示:

mysql> GRANT SELECT ON *.* TO 'lwx'@localhost IDENTIFIED BY 'lwx';
Query OK, 0 rows affected, 1 warning (0.01 sec)

创建一个对某个数据库拥有全部权限的用户

创建一个名为 lwx 的新用户,登录密码为 123456,该用户可以从 192.168.0.0 ~ 192.168.0.255 之间的网段访问数据库。该用户对数据库 test 拥有全部的权限:

mysql> grant all on test.* to lwx@'192.168.0.%' identified by "123456";

创建一个对某个数据库拥有部分权限的用户

mysql> grant select,insert,update on db_name.* to user_name@host_name identified by "password";

创建一个对某个数据库拥有部分权限的用户,但是该用户可以从任意 IP 登录数据库

mysql> grant select,insert,update,delete on test.* to lwx@'%' identified by "password";

表示创建一个新用户 lwx,登录密码是 password,该用户可以在任意 IP 地址登陆数据库系统,但是该用户只能对数据库 test 的数据进行查询操作、插入操作、更新操作、删除操作。

创建用户时,使用密文设置密码

在创建用户时也可以使用密文密码,你需要通过函数 password() 先获得密文密码,再使用关键词 PASSWORD 设置,例如,获取字符串 123 的密文:

mysql> select password('123');
+-------------------------------------------+
| password('123')                           |
+-------------------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

获取到密文密码后,通过关键词 PASSWORD 设置密码:

mysql> GRANT SELECT ON *.* TO 'lwx'@localhost IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257';

创建成功后,该用户就可以使用密码 123 登录数据库了

创建一个对某个数据表拥有部分权限的用户

mysql> grant update,delete on db_name.tbl_name to user_name@host_name identified by "password";

修改用户

修改密码

语法格式:

mysql> SET PASSWORD FOR 'user_name'@'host' = PASSWORD('newpassword');

修改当前登陆用户自己的密码的语法格式:

mysql> SET PASSWORD = PASSWORD("newpassword"); 

例如,将用户 pig@% 的密码改成 123456

mysql> SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456"); 

也可以直接通过用户表修改密码:

mysql> update mysql.user set password=password('new_password') where user="user_name" and host="host_name";

使用 rename 语句修改用户名和主机

语法格式:

rename user 'user_name'@'host' to 'newuser_name'@'new_host';

使用 update 语句修改主机名称

如果要对用户所用的登录终端(登录 IP 地址)进行限制,可以更新 user 表中相应用户的 host 字段:

update user set host='37.164.59.204' where user='lwx';

删除用户

mysql> DROP USER 'user_name'@'host'

上面的命令将删除用户帐户及其权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ide 日志 乱码_IDE日志分析方法pt。 2

ide 日志 乱码介绍 在第一部分中,我解释了测井分析的理论方法,我认为这对维持工程师是最好的。 该工程师不需要在日志出现时立即对其进行分析,而是专注于对复杂问题的深入分析。 在第二部分中,我将展示一个复杂的模板可以涵盖许多…

MySQL数据库的用户授权_查看权限

文章目录Mysql 的权限分类权限数据的存储每种权限的修改策略和作用范围刷新权限MySQL 提供的操作权限授权语法格式参考示例授予用户拥有某个数据库的全部权限授予用户拥有所有数据库的全部权限授予用户拥有某个数据库的部分权限授予用户拥有某个数据库中的某个表的部分权限授予…

系统微服务签发token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL创建用户报错 -- ERROR 1396 (HY000): Operation CREATE USER failed for ‘user_name‘@‘localhost‘

mysql> CREATE USER lwxlocalhost IDENTIFIED BY 123456; ERROR 1396 (HY000): Operation CREATE USER failed for lwxlocalhostmysql> drop user lwxlocalhost; # 使用drop user语句删除用户,可能是之前删除用户lwx的时候有问题,例如从user表删除…

jdk12源代码文件_JDK 11:轻松取出单文件Java源代码程序

jdk12源代码文件JDK 11 Early Access Builds包含与JEP 330相关的预览功能(“启动单个文件源代码程序”)。 我之前在“ Shebang即将来到Java? ”和“ 针对JDK 11提议的JEP 329和JEP 330 ”,由于JDK 11 Early Access Builds&#x…

网关过滤器验证token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL SHELL 缓存历史命令

在正常情况下,我们在 MySQL SHELL 中输入的历史命令语句,通过上下箭头键可以向前向后查看,但是如果输入的语句中含有密码字段,那么这条命令语句不会被缓存到历史记录中。

java掌握_掌握Java 11的Constantdynamic

java掌握为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中。 简而言之,通过使用invokedynamic ,可以将方法调用的绑定延迟到第…

Mybatis动态代理模式实现CRUD

项目实现的功能 查询所有用户信息 通过Id查询用户信息 添加用户&#xff08;回显主键&#xff09; 修改用户信息 删除用户信息 通过用户名字模糊查询 一、引入依赖和工程结构 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

MySQL撤销(revoke)用户权限

文章目录撤销用户对某个数据库的全部权限撤销用户对某个数据库的部分权限撤销用户对某个数据库的某张表的部分权限撤销用户对任何数据库的任何表的部分权限撤销 WITH GRANT OPTION 权限权限表撤销权限的巨坑撤销语句要和授权语句完全一致权限 USAGE 是无法撤销的数据库 test 的…

无服务器–仅仅是构建现代应用程序的一种方法?

如果搜索“无服务器”&#xff0c;则会发现无服务器是构建现代应用程序的一种新的流行方式。 无服务器真的是新的吗&#xff1f; 无服务器是指您无需担心服务器的概念–无需置备&#xff0c;部署和维护服务器。 显然有服务器&#xff0c;但是您不必考虑或担心它们&#xff0c;…

Mybatis核心配置文件xml详解

<!-- configuration:在dtd约束中? 代表一次或零次 代表一次或多次&#xff08;最少一次&#xff0c;可以多次&#xff09;* 代表零次或多次&#xff08;有没有都可以&#xff09;, :逗号 特定的顺序&#xff08;&#xff09;| :竖杠 任选其一能添加的标签和顺序properties?…

MySQL查询语句后面加上“\G”,提示 ERROR: No query specified

在查询语句后面以 \G 结尾&#xff0c;表示纵向显示每行记录&#xff0c;如下所示&#xff1a; mysql> select * from student\G; *************************** 1. row ***************************id: 00000000000000000001name: liaowenxiongage: 22score: NULLbirthday:…

c++ 嵌套私有类_嵌套类和私有方法

c 嵌套私有类当您在另一个类中有一个类时&#xff0c;他们可以看到彼此的private方法。 在Java开发人员中并不为人所知。 面试过程中的许多候选人说&#xff0c; private是一种可见性&#xff0c;它使代码可以查看成员是否属于同一班级。 这实际上是对的&#xff0c;但更准确地…

Mybatis多参数封装到一个类中模糊查询

1.创建QueryValueObject实体类 package com.william.domain;import org.omg.PortableInterceptor.USER_EXCEPTION;/*** author &#xff1a;lijunxuan* date &#xff1a;Created in 2019/7/12 12:09* description &#xff1a;* version: 1.0*/ public class QueryValueObje…

MySQL数据库的权限表

文章目录user 表db 表tables_priv 表columns_priv表MySQL 数据库中与权限相关的表&#xff1a;user、db、tables_priv、columns_priv。 user 表 mysql> select * from mysql.user\G *************************** 1. row ***************************Host: localhostUser: …

jakarta ee_MicroProfile在Jakarta EE时代的作用

jakarta ee自创建以来&#xff0c;MicroProfile赢得了广泛的关注&#xff0c;并制定了各种规格。 最初&#xff0c;它的创建是为了在多个供应商的推动下&#xff0c;以更快的速度推进微服务世界的企业Java。 现在&#xff0c;随着在Eclipse Foundation下将Java EE转换为Jakarta…

Linux系统下MySQL数据库的超级管理员root的密码忘记/忘记密码怎么办?

文章目录方法一方法二方法三方法一 1.添加登录跳过权限检查配置 修改 /etc/my.cnf 文件&#xff0c;在 [mysqld] 配置节点添加 skip-grant-tables 配置 [mysqld] skip-grant-tables2.重新启动mysql服务 service mysqld restart3.修改密码 添加登录跳过权限检查配置后&#x…

Mybatis多参数封装到map中,多条件查询

1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.william.domain.User;import java.util.List;public interface UserMapper {/*** 多参数封装到map中&#xff0c;多条件查询* param map* return*/List<User> findBy…

jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper

jax-rs配置当使用JAX-RS创建REST服务时&#xff0c;通常不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;或某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;因此HTTP 4xx或5xx&#xff09;…