MySQL 用户管理

MySQL 的用户账号信息存储在 mysql 数据库中。一般不推荐直接访问 mysql 数据库,因为对它们的任何毁坏都可能严重地伤害到 MySQL 服务器。需要直接访问它的时机之一是在需要获得所有用户账号列表时:

USE mysql;
SELECT user, password FROM user;

MySQL 为用户专门提供了账号管理相关的 SQL 语句,接下来我们来看看它们的使用方法。

用户账号管理

1. 创建用户账号

创建一个新的用户账号,可以使用 CREATE USER 语句。例如,在创建新用户账号时指定用户名、密码和允许连接的主机地址:

CREATE USER 'jochen'@'localhost' IDENTIFIED BY 'password';

主机地址 HOST 允许以下几种类型:

  • localhost:只允许该用户在本地登录,不能远程登录;
  • 192.168.1.1:具体的 IP 表示只允许该用户从特定 IP 登录;
  • %:允许在除本机之外的任何一台机器远程登录。
2. 用户重命名

为了重新命名一个用户账号,可以使用 RENAME USER 语句:

RENAME USER finley TO jochen;
3. 更改用户密码

为了更改用户密码,可以使用 SET PASSWORD 语句,同时密码必须使用 Password 函数进行加密:

SET PASSWORD FOR jochen = Password('$mysql$');
4. 更改主机地址
USE mysql;
UPDATE user SET host = '%' where user ='jochen';
FLUSH privileges;
5. 删除用户账号

为了删除一个用户账号以及相关的权限信息,可以使用 DROP USER 语句:

DROP USER jochen;

访问权限管理

1. 查看用户权限

在创建用户账号之后,必须给用户分配相应的访问权限。新创建的用户账号如果没有设置权限信息,该账号用户允许登录 MySQL 系统,但不能看到数据,不能执行任何数据库操作。查看用户账号的权限,可以使用 SHOW GRANTS 语句:

SHOW GRANTS FOR jochen;
2. 设置用户权限

为设置权限,使用 GRANT 语句,同时必须提供以下信息:

  • 要授予的权限;
  • 被授予访问权限的数据库或表;
  • 用户名。
// 允许用户在 bankaccount 数据库的所有表上使用 SELECT 语句
GRANT SELECT ON bankaccount.* TO jochen;

// 授予用户多个权限,同时可以修改允许连接的主机地址
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP
ON bankaccount.*
TO 'jochen'@'localhost';

// 授予用户对所有数据库和表的所有权限,同时允许用户修改权限(相当于 root 用户)
GRANT ALL PRIVILEGES 
ON *.*
TO 'jochen'@'localhost' WITH GRANT OPTION;
3. 撤销用户权限

使用 GRANT 语句来设置用户的访问权限,而 REVOKE 语句可以撤销特定的用户权限:

REVOKE SELECT ON bankaccount.* FROM jochen;
用户访问权限必须存在,否则 MySQL 会报错。
4. 常见权限说明
权限 说明
ALL GRANT OPTION 外的所有权限
ALTER 使用 ALTER TABLE 语句
CREATE 使用 CREATE TABLE 语句
CREATE USER 使用 CREATE USERDROP USERRENAME USERCREATE USERREVOKE ALL PRIVILEGES 语句
DELETE 使用 DELETE 语句
DROP 使用 DROP TABLE 语句
INSERT 使用 INSERT 语句
SELECT 使用 SELECT 语句
UPDATE 使用 UPDATE 语句
USAGE 无访问权限

PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。

Stay hungry, stay foolish.

846 声望
84 粉丝
0 条评论
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...

Jochen112阅读 14.2k评论 6

万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
所谓的权限,其实指的就是:用户是否能看到,以及是否允许其对数据进行增删改查的操作,因为现在开发项目的主流方式是前后端分离,所以整个项目的权限是后端权限控制搭配前端权限控制共同实现的

水冗水孚11阅读 1.5k

花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥11阅读 1.1k

封面图
一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...

骑牛上青山8阅读 2.2k评论 2

2023最新MySQL高频面试题汇总
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬3阅读 978

Mysql索引覆盖
通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个查询,而不仅仅是where条件部分,还应该关注查询所包含的列。索引确实是一种高效的查找数据方式,但...

京东云开发者2阅读 936

封面图
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go2阅读 407评论 1

封面图

Stay hungry, stay foolish.

846 声望
84 粉丝
宣传栏