权限管理

新增用户

先使用 root 账号登陆 MySQL Server:

mysql -u root -p

登录后,提示符变为 mysql>

mysql> CREATE USER 'starry'@'localhost' IDENTIFIED BY 'password';
# 创建成功会返回
Query OK, 0 rows afffected (0.03 sec)

说明:

  • starry:可替换为你想创建的用户名,本教程使用 starry 作为示例用户名
  • passwrod:为此新建账号对应的密码

这里要注意,如果你的 MySQL 密码强度设置为最高,但你设置的密码过于简单,会出现 ERROR 1819 错误。

MySQL 强密码由 数字+大写字母+小写字母+符号 四个部分组成大于 8 位的密码

特别提示:本教程创建的用户名的 host 设置为 localhost ,如果想要远程访问 MySQL 数据库,需要将这里改为发起访问的 服务器 IP 或者使用 % 通配符 IP 地址。

具体可查看 如何远程连接 MySQL 数据库,阿里云腾讯云外网连接教程 这篇教程,教程中会详细讲解通过 TCP/IP 远程访问 MySQL 数据库的几种形式及可能碰到的问题。

修改用户

账号重命名:

RENAME USER 'starry'@'localhost' TO 'starry-new'@'%';

删除用户

删除账号:

DROP USER 'starry'@'localhost';

授权

授予全部权限

给账号 starry 授予全部权限:

GRANT ALL PRIVILEGES ON * . * TO 'starry'@'localhost';
-- 运行以下命令,刷新 MySQL 的系统权限相关表,更新缓存
FLUSH PRIVILEGES;

在实际生产环境中,我们处于安全考虑,很少这样配置账号权限。

授予特定权限

以下是常见的可授权账号使用的权限。

  • ALL PRIVILEGES:允许 MySQL 用户完全访问指定的数据库(或者如果没有选择数据库,则可以跨系统进行全局访问)
  • CREATE:允许创建新表或数据库
  • DROP:允许删除表或数据库
  • DELETE:允许从表中删除行
  • INSERT:允许向表中插入行
  • SELECT:允许使用 SELECT 命令来读取数据库
  • UPDATE:允许更新表行
  • GRANT OPTION:允许授予或删除其他用户的权限

向特定用户授权特定数据库和表的权限,代码模版:

GRANT <type_of_permission> ON <database_name.table_name> TO 'starry'@'localhost';

说明:

  • 'starry'@'localhost':需要被授权的账号
  • type_of_permission:这里写权限类型,权限之间使用逗号(,)分隔
  • database_name.table_name:指定特定的数据库(database_name)和其中的表(table_name)的权限范围

如果你想使账号可访问任何数据库或任何表,可用 * 代替。

记得每次更改权限后,要执行 FLUSH PRIVILEGES; 刷新 MySQL 的系统权限相关表,更新缓存。

权限权限级别说明
CREATE数据库、表或索引创建数据库、表或索引权限
DROP数据库或表删除数据库或表权限
GRANT OPTION数据库、表或保存的程序赋予权限选项
REFERENCES数据库或表
ALTER更改表,比如添加字段、索引等
DELETE删除数据权限
INDEX索引权限
INSERT插入权限
SELECT查询权限
UPDATE更新权限
CREATE VIEW视图创建视图权限
SHOW VIEW视图查看视图权限
ALTER ROUTINE存储过程更改存储过程权限
CREATE ROUTINE存储过程创建存储过程权限
EXECUTE存储过程执行存储过程权限
FILE访问服务器中的文件文件访问权限
CREATE TEMPORARY TABLES服务器管理创建临时表权限
LOCK TABLES服务器管理锁表权限
CREATE USER服务器管理创建用户权限
PROCESS服务器管理查看进程权限
RELOAD服务器管理执行 flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload 等命令的权限
REPLICATION CLIENT服务器管理复制权限
REPLICATION SLAVE服务器管理复制权限
SHOW DATABASES服务器管理查看数据库权限
SHUTDOWN服务器管理关闭数据库权限
SUPER服务器管理执行 kill 线程权限

取消授权

撤销账号某些权限,执行的语句与授权几乎相同:

REVOKE <type_of_permission> ON <database_name.table_name> FROM 'starry'@'localhost';

注意:在撤销权限时,语法要用 FROM ,而不是授权时使用的 TO

查看用户的当前权限:

SHOW GRANTS FOR 'starry'@'localhost';