【MySql】mysql 的权限体系介绍

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
mysql 的权限体系大致分为5个层级:
全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
这些权限信息存储在下面的系统表中:
mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv
当用户连接进来,mysqld会通过上面的这些表对用户权限进行验证!
注意:
当后续目标是一个表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表。请
我们可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。
MySQL 赋予用户权限命令语法为:
grant 权限 on 数据库对象 to 用户;
grant 权限 on 数据库对象 to 用户 identified by "密码";
grant 权限 on 数据库对象 to 用户@"ip" identified by "密码"
GRANT 语法:
GRANT privileges (columns)
  ON what
  TO user IDENTIFIED BY "password"
  WITH GRANT OPTION;
  
privileges 列表:
* ALTER: 修改表和索引。
* CREATE: 创建数据库和表。
* DELETE: 删除表中已有的记录。
* DROP: 抛弃(删除)数据库和表。
* INDEX: 创建或抛弃索引。
* INSERT: 向表中插入新行。
* REFERENCE:未使用。
* SELECT: 检索表中的记录。
* UPDATE: 修改现存表记录。
* FILE: 读或写服务器上的文件。
* PROCESS: 查看服务器中执行的线程信息或杀死线程。
* RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
* SHUTDOWN: 关闭服务器。
* ALL: 所有权限,ALL PRIVILEGES同义词。
* USAGE: 特殊的 "无权限" 权限。
user 账户包括 "username" 和 "host" 两部分 即是username@host,后者表示该用户被允许从何地接入。user@'%' 表示用户user可以从任何地址访问本地的数据库,默认可以省略。还可以是 "user@10.250.7.%"、"user1@%.abc.com" 等。数据库格式为 db.table,可以是 "test.*" 或 "*.*",前者表示 test 数据库的所有表,后者表示所有数据库的所有表。
子句 "WITH GRANT OPTION" 表示该用户可以为其他用户分配权限。使用grant 命令创建用户或者进行授权之后,需要使用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,或者重新启动mysql服务器,来使新设置生效。当然后者并不是一种好想法!
比如:
一 grant普通数据用户yangql402查询、插入、更新、删除 数据库(test)中所有表数据的权利。
grant select, insert, update, delete on test.* to yangql402@'%';

二 grant数据库开发人员(yangql402),创建表、索引、视图、存储过程、函数。。。等权限。 
grant创建、修改、删除 MySQL 数据表结构权限。
grant create on test.* to yangql402@'10.250.7.225';
grant alter  on test.* to yangql402@'10.250.7.225';
grant drop   on test.* to yangql402@'10.250.7.225';
 
grant 操作 MySQL 外键权限,官方文档上说未使用!
grant references on test.* to yangql402@'10.250.7.225';
 
grant 操作 MySQL 临时表权限。
grant create temporary tables on test.* to yangql402@'10.250.7.225';
 
grant 操作 MySQL 索引权限。
grant index on test.* to yangql402@'10.250.7.225';
 
grant 操作 MySQL 视图、查看视图源代码 权限。
grant create view on test.* to yangql402@'10.250.7.225';
grant show   view on test.* to yangql402@'10.250.7.225';
 
grant 操作 MySQL 存储过程、函数 权限。
grant create routine on test.* to yangql402@'10.250.7.225';
grant alter routine on test.* to yangql402@'10.250.7.225';
grant execute        on test.* to yangql402@'10.250.7.225';
 
三 grant 普通DBA管理某个MySQL数据库(test)的权限。
grant all privileges on test to dba@'localhost'
其中,关键字 “privileges” 可以省略。

四 grant 高级 DBA 管理 MySQL 中所有数据库的权限。
grant all on *.* to dba@'localhost'
 
五 MySQL grant 权限,分别可以作用在多个层次上。
a. grant 作用在整个 MySQL 服务器上:
grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。
grant all    on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库
b. grant 作用在单个数据库上:
grant select on test.* to dba@localhost; -- dba 可以查询 test 中的表。
c. grant 作用在单个数据表上:
grant select, insert, update, delete on test.yql8 to dba@localhost;
d. grant 作用在表中的列上:
grant select(id, se, rank) on test.yql8 to dba@localhost;
e. grant 作用在存储过程、函数上:
grant execute on procedure test.yql8 to 'dba'@'localhost';
grant execute on function test.yql8 to 'dba'@'localhost';

六 查看用户权限
查看当前用户自己的权限:
show grants;
查看其他 MySQL 用户权限:
show grants for dba@localhost;
七 撤销用户权限
使用revoke 命令来注销用户的权限,具体语法:
要撤销所有权限,需使用以下语法。此语法用于取消对于已命名的用户的所有全局层级、数据库层级、表层级和列层级的权限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
也可以指定具体的权限比如:
REVOKE SELECT FROM yangql402@"10.250.7.249";
注意:
1 使用GRANT或REVOKE,操作者必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。
2 使用REVOKE撤销全部权限,操作者必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。
八 删除用户:
DROP USER user;
其中user 账户包括 "username" 和 "host" 两部分 即是username@host;如果创建的时候为 yangql@"10.250.7.225",则删除的时候必须使用
drop user yangql@"10.250.7.225",否则会报错!
mysql> drop user yangql402;
ERROR 1396 (HY000): Operation DROP USER failed for 'yangql402'@'10.250.7.225'
mysql> drop user yangql402@'10.250.7.225';
Query OK, 0 rows affected (0.01 sec)

参考; MYSQL 官方文档
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
安全 关系型数据库 MySQL
mysql权限
mysql权限
9 2
|
14天前
|
关系型数据库 MySQL 数据库
MySQL技能完整学习列表9、用户管理和权限控制——1、创建和管理用户——2、权限授予和撤销
MySQL技能完整学习列表9、用户管理和权限控制——1、创建和管理用户——2、权限授予和撤销
30 0
|
1月前
|
关系型数据库 MySQL
MySQL错误 -.--secure-file-priv 无导出权限
MySQL错误 -.--secure-file-priv 无导出权限
25 0
|
1月前
|
SQL 关系型数据库 MySQL
|
2月前
|
安全 关系型数据库 MySQL
Flink CDC中MySQL 进行cdc的用户需要什么权限?
Flink CDC中MySQL 进行cdc的用户需要什么权限?
163 1
|
3月前
|
关系型数据库 MySQL API
如何为RAM子账号授予单一RDS实例的访问权限?
在阿里云中,如何为RAM子账号进行精准授权,授予单一RDS实例的访问权限?这篇文档帮到你
61846 0
|
6月前
|
存储 关系型数据库 MySQL
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
161 0
|
8月前
|
存储 安全 关系型数据库
MySQL-用户与权限
MySQL-用户与权限
|
8月前
|
关系型数据库 MySQL
mysql 表权限更改语句
添加字段: alter table 表名 add 列名 类型 删除表字段 alter table 表名 drop 列名; 修改表字段 alter table 表名 change 列名 新列名 类型 ; 修改列属性类型 alter table 表名 modify 列名 类型; 增加主键 alter table 表名 add primary key(字段); 删除主键 alter table 表名 drop primary key; 增加不为空 alter table 表名 modify 字段 类型 约束; 增加一个唯一约束或联合约束 alter table 表名 add unique(列名
73 0
|
8月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL管理用户与权限(详细教程)
MySQL管理用户与权限(详细教程)
200 0