MySQL 的 GRANT和REVOKE 命令

GRANT - 授权

将指定 操作对象 的指定 操作权限 授予指定的 用户; 发出该 GRANT语句的可以是数据库管理员,也可以是该数据库对象的创建者;

  1. 查询

    • 查看用户自己权限

      SHOW GRANTS;

    • 查看其他用户权限

      SHOW GRANTS FOR 'user'@'host';

    Tips: host 可以使用通配符 %;如 'user'@'%', 'user'@'192.168.0.%';

  2. 授权

    • 语法

      GRANT 权限 ON 数据库对象 TO 用户 [WITH GRANT OPTION];

    • 栗子

      • 授予 super用户所有权限

        GRANT ALL [PRIVILEGES] ON . TO 'user'@'%';

      • 授予用户 INSERT 权限

        CREATE INSERT ON db_name.* TO 'user'@'%' IDENTIFIED BY 'newpasswd';

      • 授予用户 SELECT, UPDATE, DELETE 权限

        GRANT SELECT, UPDATE, DELETE ON db_name.* TO 'user'@'localhost'

  3. 刷新

    FLUSH PRIVILEGES;

Tips:

  • WITH GRANT OPTION: 表示是否能传播其权限;(授权命令是由数据库管理员使用的)

    • 指定 WITH GRANT OPTION,则获得该权限的用户可以把这种权限授予其他用户;但不允许循环传授,即被授权者不能把权限在授回给授权者或祖先;
    • 未指定,则获得某种权限的用户只能自己使用该权限,不能传播该权限;
  • GRANT 关键字之后指定一个或多个特权。如果要授予用户多个权限,则每个权限都将以逗号分隔(见下表中的特权列表);
  • 指定确定特权应用级别的privilege_level;
    • MySQL支持全局(*.*),数据库(database.*),表(database.table)和列级别;
    • 如果您使用列权限级别,则必须在每个权限之后使用逗号分隔列的列表;
  • 如果授予权限的用户已经存在,则GRANT语句修改其特权; 如不存在,则GRANT语句将创建一个新用户; 可选的条件 IDENTIFIED BY 允许为用户设置新密码;

REVOKE - 回收授权

  • 语法

    REVOKE 权限 ON 数据库对象 FROM 用户 [CASCADE | RESTRICT];

  • 栗子

    • 回收全部权限

      REVOKE ALL [PRIVILEGES] ON . FROM 'user'@'%';

    • 回收 INSERT 权限

      REVOKE INSERT ON db_name.* FROM 'user'@'%';

Tips:

  • CASCADE | RESTRICT 当检测到关联的特权时,RESTRICT(默认值) 导致REVOKE失败;CASCADE 可以回收所有这些关联的特权;(如U1授权U2, U2授权U3,此时使用级联(CASCADE)收回了U2和U3的权限,否则系统将拒绝执行该命令)

GRANT允许的特权

  • 下表说明了可用于GRANT和REVOKE语句的所有可用权限:

    权限 含义 全局 数据库 过程 代理
    ALL [PRIVILEGES] 授予除了grant option之外的指定访问级别的所有权限
    ALTER 允许用户使用alter table语句 X X X
    ALTER ROUTINE 允许用户更改或删除存储程序, 可以使用{alter | drop} {procedure | unction} X X X
    CREATE 允许用户创建数据库和表 X X X
    CREATE ROUTINE 可以使用{create | alter | drop} {procedure | function} X
    CREATE TABLESPACE 允许用户创建,更改或删除表空间和日志文件组 X
    CREATE TEMPORARY TABLES 允许用户使用create temporary table创建临时表 X X
    CREATE USER 允许用户使用create user,drop user,rename user和revoke all privileges语句 X
    CREATE VIEW 允许用户创建或修改视图 X X X
    DELETE 允许用户使用delete X X X
    DROP 允许用户删除数据库,表和视图 X X X
    EVENT 能够使用事件计划的事件 X X
    EXECUTE 允许用户执行存储过程/存储函数 X X
    FILE 允许用户读取数据库目录中的任何文件 X
    GRANT OPTION 允许用户有权授予或撤销其他帐户的权限 X X X X X
    INDEX 允许用户创建或删除索引 X X X
    INSERT 允许用户使用insert语句 X X X X
    LOCK TABLES 允许用户在具有select权限的表上使用lock tables X X
    PROCESS 允许用户使用show processlist语句查看所有进程 X
    PROXY 启用用户代理
    REFERENCES 允许用户创建外键 X X X X
    RELOAD 允许用户使用flush操作 X
    REPLICATION CLIENT 允许用户查询主服务器或从服务器的位置 X
    REPLICATION SLAVE 允许用户使用复制从站从主机读取二进制日志事件 X
    SELECT 允许用户使用select语句 X X X X
    SHOW DATABASES 允许用户显示所有数据库 X
    SHOW VIEW 允许用户使用show create view语句 X X X
    SHUTDOWN 允许用户使用mysqladmin shutdown命令 X
    SUPER 允许用户使用其他管理操作,如change master to,kill,purge binary logs,set global和mysqladmin命令 X
    TRIGGER 允许用户使用trigger操作 X X X
    UPDATE 允许用户使用update语句 X X X X
    USAGE 连接(登陆)权限(默认授予且不能被回收)

实例

用户操作

  1. 创建用户

    CREATE USER 'user'@'%' IDENTIFIED BY 'newpasswd';

  2. 重命名用户

    CREATE USER 'old_user'@'%' TO 'new_user'@'%';

  3. 删除用户

    1. 查询用户

      SELECT user,host FROM mysql.user;

    2. 删除用户

      DROP USER 'user'@'host';

查看和刷新权限

  • 查看权限

    SHOW GRANTS [FOR 'user'@'host'];

  • 刷新权限

    FLUSH PRIVILEGES;

授权与取消授权

  1. 用法

    GRANT 权限 ON 数据库对象 TO 用户 [WITH GRANT OPTION];   -- 授权
    REVOKE 权限 ON 数据库对象 FROM 用户 [CASCADE | RESTRICT]; -- 取消授权

    Tips: REVOKE 跟 GRANT 的语法差不多,只需要把关键字 TO 换成 FROM 即可

  2. 栗子

    • 添加权限(和已有权限合并,不会覆盖已有权限)

      -- 添加普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利
      grant select, insert, update, delete on testdb.* to common_user@'%' -- 添加数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限
      grant create, alter, drop on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 外键权限
      grant references on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 临时表权限
      grant create temporary tables on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 索引权限
      grant index on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 视图、查看视图源代码 权限
      grant create, show view on testdb.* to developer@'192.168.0.%';
    • 删除授权

      -- 删除普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利
      revoke select, insert, update, delete on testdb.* from common_user@'%' -- 删除数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限
      revoke create, alter, drop on testdb.* from developer@'192.168.0.%'; -- 删除操作 MySQL 外键权限
      revoke references on testdb.* from developer@'192.168.0.%'; -- 删除操作 MySQL 临时表权限
      revoke create temporary tables on testdb.* from developer@'192.168.0.%'; -- 删除操作 MySQL 索引权限
      revoke index on testdb.* from developer@'192.168.0.%'; -- 删除操作 MySQL 视图、查看视图源代码 权限
      revoke create, show view on testdb.* from developer@'192.168.0.%';
    • DBA 权限管理

      -- 普通 DBA 管理某个 MySQL 数据库的权限
      grant all [privileges] on testdb to dba@'localhost' -- 高级 DBA 管理 MySQL 中所有数据库的权限。
      grant all on *.* to dba@'localhost'
    • 细密度授权

      -- 作用在整个 MySQL 服务器上
      grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表
      grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库 -- 作用在单个数据库上
      grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。 -- 作用在单个数据表上
      grant select, insert, update, delete on testdb.t_orders to dba@localhost; -- 作用在表中的列上
      grant select(id, username, sex) on testdb.t_user to dba@localhost;
    • 权限传播与收回

      -- 授权 dba 查询权限,并且可以将这些权限 grant 给其他用户
      grant select on testdb.* to dba@localhost with grant option; -- 收回 dba 和其传播用户的权限
      revoke select on testdb.* from dba@localhost cascade;

    Tips: 权限发生改变后, 需要重新加载一下权限,将权限信息从内存中写入数据库;

Reference

MySQL 的 GRANT和REVOKE 命令的更多相关文章

  1. MySQL的grant,revoke使用

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...

  2. MySQL的Grant命令[转]

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  3. mysql grant ,User,revoke

    mysql的权限一直都都是很关心的重点,我知道的也只是很少的一部分,对于每个数据库我习惯创建一个一个用户,该用户只对自己从属的数据库产生进行操作,在一部分的程度上可以保护自己的数据库, 比如我有一个数 ...

  4. [MySQL] - MySQL的Grant命令

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  5. MySQL的Grant命令

    来源:http://yingxiong.javaeye.com/blog/451208   本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: gra ...

  6. (转)MySQL的Grant命令

    [MySQL] - MySQL的Grant命令 来源:http://yingxiong.javaeye.com/blog/451208 本文实例,运行于 MySQL 5.0 及以上版本. MySQL ...

  7. MySQL的GRANT命令(创建用户)

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 (删除用户与删除权限:drop user '用户名 ...

  8. MySQL数据库grant授权命令

    MySQL数据库grant授权命令 制作人:全心全意 grant授权命令的使用 grant授权命令使用语法: grant 权限 on 数据库对象 to 用户 grant 权限 on 数据库对象 to ...

  9. mysql数据库备份与还原命令

    还原一个数据库:mysql -h localhost -u root -p123456 www 备份一个数据库:mysqldump -h localhost -u root -p123456 www ...

随机推荐

  1. 74CMS 3.0 CSRF漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  2. 实习项目1-串口IP升级调试

    设计目标:设计一个串口IP,要求1:输入时钟频率任意,如0-400M时钟频率:要求2:波特率超过常见的115200,要求达到4M. 设计核心思路:波特率计算公式,divp10x = (10 * fsy ...

  3. [AT2306]Rearranging(拓扑序)

    [AT2306]Rearranging(拓扑序) 只有luogu 题面(luogu): 有一个$n$个数组成的序列$a_{i}$. 高桥君会把整个序列任意排列,然后青木君可以选择两个相邻的互质的数交换 ...

  4. ubuntu16.04启动ssh服务

    1 查看ssh服务是否开启 ps -e | grep ssh* 2如果没有则安装ssh apt-get install openssh-server openssh-client 3再看服务就有ssh ...

  5. 深度学习训练过程中的学习率衰减策略及pytorch实现

    学习率是深度学习中的一个重要超参数,选择合适的学习率能够帮助模型更好地收敛. 本文主要介绍深度学习训练过程中的6种学习率衰减策略以及相应的Pytorch实现. 1. StepLR 按固定的训练epoc ...

  6. Docker提交镜像-数据卷-可视化

    在熟悉完Docker的安装及基本命令使用之后,我们开始学习下Docker的进阶操作:包括但不限于新建Docker镜像,数据卷的挂载,以及Docker的可视化等. Docker提交镜像 启动镜像 我们先 ...

  7. 什么是 Netflix Feign?它的优点是什么?

    Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序. Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其 ...

  8. ArrayList分别与LinkedList、Vector、Array的区别

    ArrayList与LinkedList的区别 ArrayList底层是一个动态数组,LinkedList底层是双向链表 当随机访问List时(get和set操作),ArrayList比LinkedL ...

  9. Spark学习摘记 —— RDD转化操作API归纳

    本文参考 在阅读了<Spark快速大数据分析>动物书后,大概了解到了spark常用的api,不过书中并没有给予所有api具体的示例,而且现在spark的最新版本已经上升到了2.4.5,动物 ...

  10. 探讨:微信小程序应该如何设计

    微信小程序公测后,开发者非常热情,都有很高的期待,都想抓住这一波红利.但是热情背后需要冷静,我们需要搞清楚两个问题: 微信想要我们做什么?微信小程序可以做什么? 微信想要我们做什么? 首先来弄清楚微信 ...