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 USER 、DROP USER 、RENAME USER 、CREATE USER 、REVOKE ALL PRIVILEGES 语句 |
DELETE |
使用 DELETE 语句 |
DROP |
使用 DROP TABLE 语句 |
INSERT |
使用 INSERT 语句 |
SELECT |
使用 SELECT 语句 |
UPDATE |
使用 UPDATE 语句 |
USAGE |
无访问权限 |
PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...
Jochen赞 112阅读 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个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 2阅读 407评论 1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。