文章目录

  • 创建新用户
    • 使用 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'

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

MySQL数据库创建用户_修改用户_删除用户_设置用户相关推荐

  1. MySQL视图——创建视图、修改视图、删除视图、查看视图和更新视图

    一.创建视图 语法:          create view 视图名          as          查询语句: 案例 1. 查询姓名中包含k字符的员工名.部门名和工种信息 ①创建视图my ...

  2. mysql 如何创建索引、修改索引、删除索引、查询索引

    一.创建索引 1.添加PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) ...

  3. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...

  4. 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  5. mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  6. mysql导出权限授权_本文实例讲述了mysql数据库创建账号、授权、数据导出、导入操作。分享给大家供大家参考,具体如下:1、账号创建及授权grant all privileg...

    本文实例讲述了mysql数据库创建账号.授权.数据导出.导入操作.分享给大家供大家参考,具体如下: 1.账号创建及授权 grant all privileges on *.* to 'yangxin' ...

  7. 如何在linux系统下修改mysql密码_如何在linux下修改mysql数据库密码?linux修改数据库密码的方法...

    本篇文章给大家带来的内容是介绍如何在linux下修改mysql数据库密码?linux修改数据库密码的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. Linux下修改Mysql的 ...

  8. MySQL数据库创建用户及授权

    MySQL数据库创建用户及授权 1.创建用户 命令 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明 username:你将创建的用 ...

  9. mysql 表名批量转大写_(转)mysql数据库表名批量修改大小写

    由于不用服务器对mysql的表名的大小写敏感要求不一致,经常在出现线上的数据库down到了本地不能运行的情况,贴出一段代码用来批量修改数据库表名大小写. DELIMITER // DROP PROCE ...

  10. jsp创建mysql数据库_使用 MySQL 数据库创建简单的 JSP 应用程序(1)

    使用 MySQL 数据库创建简单的 Web 应用程序 编写人:Troy Giunipero 本文档描述了如何创建用于连接 MySQL 数据库服务器的简单 Web 应用程序.还讲述了 Web 开发中的一 ...

最新文章

  1. ICCV 2019:谷歌获最佳论文!中国入选论文最多,中科院、清华领跑
  2. arx对正在操作的文件进行保存
  3. 如何让Android对话框全屏 Dialog 全屏
  4. c语言补全 subilme_Sublime Text3 C语言插件
  5. Flowable工作流总结_工作规范流程设计思路
  6. Mysql 5.7 的‘虚拟列’是做什么?
  7. 关于src和background
  8. C# 或Asp.Net 将excel表格导入数据库
  9. android 商品筛选_商品关联分析
  10. python socket tcp实战_Python socket.TCP_MAXSEG属性代码示例
  11. 获取2个集合ListT的共同元素
  12. 【校招】测试开发岗-高频面试题总结
  13. c# DevExpress Gridview 设置表格背景颜色
  14. dubbo配置timeout
  15. 蓝桥杯java历年真题及答案整理21~40
  16. 居于canvas的原生js抽奖小程序
  17. 顺丰java_JAVA接入顺丰快递
  18. mysql基础架构(一条update语句如何执行)
  19. UML类图以及常用集合
  20. 基于C语言的星宿网站框架设计

热门文章

  1. elk 日志管理_具有ELK的APIGEE API网关日志管理(弹性搜索,Logstash和Kibana)
  2. java ee架构_与Java EE和Spring的集成架构
  3. junit测试线程_一个在自己的线程中运行测试的JUnit规则
  4. Spring Data Pivotal Gemfire教程
  5. Java:使用SingletonStream获得性能
  6. 使用Spring开发Java RESTful Web服务的7个理由
  7. Spring Data对Cassandra 3的支持
  8. 语言工程中有趣的事情
  9. 为什么应始终将连接池与Oracle XE一起使用
  10. resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目