mysql grant 用户权限总结

说明一下Mysql的权限匹配规则

当用户从客户端请求登陆时,MySQL将授权表中的条目与客户端所提供的条目进行比较,包括用户的用户名,密码和主机。授权表中的Host字段是可以使用通配符作为模式进行匹配的,如test.example.com, %.example.com, %.com和%都可以匹配test.example.com这个主机。授权表中的User字段不允许使用模式匹配,但是可以有一个空字符的用户名代表匿名用户,并且空字符串可以匹配所有的用户名,就像通配符一样。 当user表中的Host和User有多个值可以匹配客户端提供的主机和用户名时,MySQL将user表读入内存,并且按照一定规则排序,按照排序规则读取到的第一个匹配客户端用户名和主机名的条目对客户端进行身份验证。

排序规则:

1.对于Host字段,按照匹配的精确程度进行排序,越精确的排序越前,例如当匹配test.example.com这个主机时, %.example.com比%.com更精确,而test.example.com比%.example.com更精确。 2.对于User字段,非空的字符串用户名比空字符串匹配的用户名排序更靠前。 User和Host字段都有多个匹配值,MySQL使用主机名排序最前的条目,在主机名字段相同时再选取用户名排序更前的条目。因此,如果User和Host字段都有多个匹配值,主机名最精确匹配的条目被用户对用户进行认证。

用户权限管理主要有以下作用: \1. 可以限制用户访问哪些库、哪些表 \2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 \3. 可以限制用户登录的IP或域名 \4. 可以限制用户自己的权限是否可以授权给别的用户

一、用户授权

mysql> grant all privileges on . to 'yangxin'@'%' identified by 'yangxin123456' with grant option;

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

GRANT Insert ON your database.* TO user@host;

删除权限

REVOKE Delete ON your database.* FROM user@host;

 DELETE FROM table_name [WHERE Clause]

all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。 on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录 identified by:指定用户的登录密码 with grant option:表示允许用户将自己的权限授权给其它用户 可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

用户详情的权限列表请参考MySQL官网说明:http://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html

二、刷新权限

对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

mysql> flush privileges;

三、查看用户权限

mysql> grant select,create,drop,update,alter on . to 'yangxin'@'localhost' identified by 'yangxin0917' with grant option; mysql> show grants for 'yangxin'@'localhost';

四、回收权限

删除yangxin这个用户的create权限,该用户将不能创建数据库和表。

mysql> revoke create on . from 'yangxin@localhost'; mysql> flush privileges;

五、删除用户

mysql> select host,user from user; +---------------+---------+ | host | user | +---------------+---------+ | % | root | | % | test3 | | % | yx | | 192.168.0.% | root | | 192.168.0.% | test2 | | 192.168.0.109 | test | | ::1 | yangxin | | localhost | yangxin | +---------------+---------+ 8 rows in set (0.00 sec) mysql> drop user 'yangxin'@'localhost';

六、用户重命名 shell> rename user 'test3'@'%' to 'test1'@'%';

七、修改密码 1> 更新mysql.user表 mysql> use mysql; # mysql5.7之前 mysql> update user set password=password('123456') where user='root'; # mysql5.7之后 mysql> update user set authentication_string=password('123456') where user='root'; mysql> flush privileges;

2> 用set password命令 语法:set password for ‘用户名’@’登录地址’=password(‘密码’)

mysql> set password for 'root'@'localhost'=password('123456');

3> mysqladmin 语法:mysqladmin -u用户名 -p旧的密码 password 新密码

mysql> mysqladmin -uroot -p123456 password 1234abcd

注意:mysqladmin位于mysql安装目录的bin目录下

八、忘记密码 1> 添加登录跳过权限检查配置 修改my.cnf,在mysqld配置节点添加skip-grant-tables配置

[mysqld] skip-grant-tables

2> 重新启动mysql服务 shell> service mysqld restart

3> 修改密码 此时在终端用mysql命令登录时不需要用户密码,然后按照修改密码的第一种方式将密码修改即可。

注意:mysql库的user表,5.7以下版本密码字段为password,5.7以上版本密码字段为authentication_string

4> 还原登录权限跳过检查配置 将my.cnf中mysqld节点的skip-grant-tables配置删除,然后重新启动服务即可。

Mysql 有多个个权限?经常记不住,今天总结一下,看后都能牢牢的记在心里啦!!

很明显总共28个权限:下面是具体的权限介绍:转载的,记录一下:

一.权限表

mysql数据库中的3个权限表:user 、db、 host

权限表的存取过程是:

1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;

2)通过权限验证,进行权限分配时,按照useràdbàtables_privàcolumns_priv的顺序进行分配。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

二.MySQL各种权限(共27个)

(以下操作都是以root身份登陆进行grant授权,以p1@localhost身份登陆执行各种命令。)

\1. usage

连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。

mysql> grant usage on . to ‘p1′@’localhost’ identified by ‘123′;

该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。

\2. select

必须有select的权限,才可以使用select table

mysql> grant select on pyt.* to ‘p1′@’localhost’;

mysql> select * from shop;

\3. create

必须有create的权限,才可以使用create table

mysql> grant create on pyt.* to ‘p1′@’localhost’;

\4. create routine

必须具有create routine的权限,才可以使用{create |alter|drop} {procedure|function}

mysql> grant create routine on pyt.* to ‘p1′@’localhost’;

当授予create routine时,自动授予EXECUTE, ALTER ROUTINE权限给它的创建者:

mysql> show grants for ‘p1′@’localhost’;

+—————————————————————————+

Grants for p1@localhost

+————————————————————————–+

| GRANT USAGE ON . TO ‘p1′@’localhost’ IDENTIFIED BY PASSWORD ‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′ |

| GRANT SELECT, CREATE, CREATE ROUTINE ON pyt.* TO ‘p1′@’localhost’|

| GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE pyt.pro_shop1 TO ‘p1′@’localhost’ |

+————————————————————————————-+

\5. create temporary tables(注意这里是tables,不是table)

必须有create temporary tables的权限,才可以使用create temporary tables.

mysql> grant create temporary tables on pyt.* to ‘p1′@’localhost’;

[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt

mysql> create temporary table tt1(id int);

\6. create view

必须有create view的权限,才可以使用create view

mysql> grant create view on pyt.* to ‘p1′@’localhost’;

mysql> create view v_shop as select price from shop;

\7. create user

要使用CREATE USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。

mysql> grant create user on . to ‘p1′@’localhost’;

或:mysql> grant insert on . to p1@localhost;

\8. insert

必须有insert的权限,才可以使用insert into ….. values….

\9. alter

必须有alter的权限,才可以使用alter table

alter table shop modify dealer char(15);

\10. alter routine

必须具有alter routine的权限,才可以使用{alter |drop} {procedure|function}

mysql>grant alter routine on pyt.* to ‘p1′@’ localhost ‘;

mysql> drop procedure pro_shop;

Query OK, 0 rows affected (0.00 sec)

mysql> revoke alter routine on pyt.* from ‘p1′@’localhost’;

[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt

mysql> drop procedure pro_shop;

ERROR 1370 (42000): alter routine command denied to user ‘p1′@’localhost’ for routine ‘pyt.pro_shop’

\11. update

必须有update的权限,才可以使用update table

mysql> update shop set price=3.5 where article=0001 and dealer=’A';

\12. delete

必须有delete的权限,才可以使用delete from ….where….(删除表中的记录)

\13. drop

必须有drop的权限,才可以使用drop database db_name; drop table tab_name;

drop view vi_name; drop index in_name;

\14. show database

通过show database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。

对于p1@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:

mysql> show databases;

+——————–+

| Database |

+——————–+

| information_schema|

| pyt |

| test |

+——————–+

\15. show view

必须拥有show view权限,才能执行show create view。

mysql> grant show view on pyt.* to p1@localhost;

mysql> show create view v_shop;

\16. index

必须拥有index权限,才能执行[create |drop] index

mysql> grant index on pyt.* to p1@localhost;

mysql> create index ix_shop on shop(article);

mysql> drop index ix_shop on shop;

\17. excute

执行存在的Functions,Procedures

mysql> call pro_shop1(0001,@a);

+———+

| article |

+———+

| 0001 |

| 0001 |

+———+

mysql> select @a;

+——+

| @a |

+——+

| 2 |

+——+

\18. lock tables

必须拥有lock tables权限,才可以使用lock tables

mysql> grant lock tables on pyt.* to p1@localhost;

mysql> lock tables a1 read;

mysql> unlock tables;

\19. references

有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。

\20. reload

必须拥有reload权限,才可以执行flush [tables | logs | privileges]

mysql> grant reload on pyt.* to p1@localhost;

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

mysql> grant reload on . to ‘p1′@’localhost’;

Query OK, 0 rows affected (0.00 sec)

mysql> flush tables;

\21. replication client

拥有此权限可以查询master server、slave server状态。

mysql> show master status;

ERROR 1227 (42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation

mysql> grant Replication client on . to p1@localhost;

或:mysql> grant super on . to p1@localhost;

mysql> show master status;

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000006 | 2111 | | |

+——————+———-+————–+——————+

mysql> show slave status;

\22. replication slave

拥有此权限可以查看从服务器,从主服务器读取二进制日志。

mysql> show slave hosts;

ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation

mysql> show binlog events;

ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation

mysql> grant replication slave on . to p1@localhost;

mysql> show slave hosts;

Empty set (0.00 sec)

mysql>show binlog events;

+—————+——-+—————-+———–+————-+————–+

| Log_name | Pos | Event_type | Server_id| End_log_pos|Info |

+—————+——-+————–+———–+————-+—————+

| mysql-bin.000005 | 4 | Format_desc | 1 | 98 | Server ver: 5.0.77-log, Binlog ver: 4 | |mysql-bin.000005|98|Query|1|197|use mysql; create table a1(i int)engine=myisam|

……………………………………

\23. Shutdown

关闭MySQL:

[mysql@mydev ~]$ mysqladmin shutdown

重新连接:

[mysql@mydev ~]$ mysql

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

[mysql@mydev ~]$ cd /u01/mysql/bin

[mysql@mydev bin]$ ./mysqld_safe &

[mysql@mydev bin]$ mysql

\24. grant option

拥有grant option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限)

mysql> grant Grant option on pyt.* to p1@localhost;

mysql> grant select on pyt.* to p2@localhost;

\25. file

拥有file权限才可以执行 select ..into outfile和load data infile…操作,但是不要把file, process, super权限授予管理员以外的账号,这样存在严重的安全隐患。

mysql> grant file on . to p1@localhost;

mysql> load data infile ‘/home/mysql/pet.txt’ into table pet;

\26. super

这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS。

mysql> grant super on . to p1@localhost;

mysql> purge master logs before ‘mysql-bin.000006′;

\27. process

通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。

mysql> show processlist;

+—-+——+———–+——+———+——+——-+——————+

| Id | User | Host | db | Command | Time | State | Info |

+—-+——+———–+——+———+——+——-+——————+

| 12 | p1 | localhost | pyt | Query | 0 | NULL | show processlist |

+—-+——+———–+——+———+——+——-+——————+

另外,

管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟.

mysql> grant super on pyt.* to p1@localhost;

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

mysql> grant super on . to p1@localhost;

Query OK, 0 rows affected (0.01 sec) --------------------- 作者:anzhen0429 来源:CSDN 原文:https://blog.csdn.net/anzhen0429/article/details/78296814 版权声明:本文为博主原创文章,转载请附上博文链接!

mysql grant 用户权限总结相关推荐

  1. Mysql Grant 用户权限总结(详细编)

    MySQL 具体有哪些权限呢?相信好多人已经不记得了,此文章将解决你的问题,请看下图: MySQL权限图: 很明显总共27个权限:下面是具体的权限介绍: 一.权限表 mysql数据库中的3个权限表:u ...

  2. 转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

    2019独角兽企业重金招聘Python工程师标准>>> ‍‍相关参考资料: MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.gr ...

  3. linux mysql更改用户权限

    mysql更改用户权限 This entry was posted by admin Monday, 26 April, 2010 1."grant all on *.* to root@' ...

  4. MySQL配置用户权限

    MySQL配置用户权限 一.步骤 1.查看MYSQL有哪些用户 2.查看当前登陆用户 3.创建用户 4.赋权 5.显示权限 6.回收其所有权限 7.刷新权限 8.删除用户 9.用户重命名 10.修改密 ...

  5. 【MySQL】 # MySQL对用户权限的简单操作:(1)创建新用户(2)赋权限

    MySQL对用户权限操作的详细内容:MySQL权限操作 1. 创建新用户 一般使用 Navicat 直接登录 MySQL,也可以使用命令行 mysql -u root -p,然后输入密码即可. 1.1 ...

  6. mysql查询权限show grants_[MySQL]查看用户权限与GRANT用法

    查看用户权限 show grants for 你的用户 比如: show grants for root@'localhost'; Grant 用法 GRANT USAGE ON *.* TO 'di ...

  7. mysql 赋予用户权限 grant all privileges on

    通过命令给mysql数据库不同的用户,数据库,ip赋予不同的权限,权限包括新增.修改.删除.查询.用于不同的生产环境,避免越权篡改数据. mysql> grant 权限1,权限2,-权限n on ...

  8. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享

    在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限.对于这个迁移我们可以从mysql.user表来获取用户的相关权限来生成相应的SQL语句,然后在目标服务器上来执行生成的SQL ...

  9. mysql 创建用户权限_10.创建 MySQL 用户及赋予用户权限

    10.1 使用语法: 通过在 mysql 中输入 help grant 得到如下帮助信息 CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass ...

  10. MySql的用户权限

    用户管理 MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据.可以使用GRANT和REVOKE命令.通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问 ...

最新文章

  1. H264编码之GOP含义
  2. 技术干货|如何在企业内部实现云信私有化?
  3. MySQL前缀索引与覆盖索引:前缀索引对于索引精简 覆盖索引对于查询数据索引化
  4. python tempfile模块用不了_Python tempfile:坏了还是我做错了?
  5. socket , 套接口还是套接字,傻傻分不清楚
  6. leetcode-136. 只出现一次的数字解法
  7. 步骤6 - WebSocket服务器把请求的响应结果推送给webshop
  8. 【Git】Git-常用命令备忘录(一)
  9. 给 EF Core 查询增加 With NoLock
  10. BZOJ3884上帝与集合的正确用法-欧拉函数
  11. 输入 vscode_【Python技术入门2】Python集成开发环境VSCode搭建
  12. java 重力脚本_Java中非常简单的脚本解析器
  13. 标准模块 queue
  14. 职场风云 | 导师的光亮
  15. IT项目管理的三个约束条件、五个实施步骤
  16. haswell主板linux驱动下载,Intel首版Haswell核芯显卡驱动下载
  17. Bandicam录制视频
  18. linux查看pbs报错日志,PBS 作业管理系统
  19. JAVA实现的飞机大战小游戏-Asteroids
  20. Centos7 lvm

热门文章

  1. 微信公众号怎么放html文件,微信公众号html缓存处理
  2. 理解和应用共线平面束
  3. Mac使用——MongoDB的下载和Compass可视化工具,以及安装过程
  4. [Win] 免登录百度网盘高速下载器 ENFI下载器 v1.3.1
  5. compute的c语言用法,词汇精选:compute的用法和辨析
  6. 切比雪夫不等式与马尔可夫不等式
  7. 135编辑器怎么复制html,135编辑器复制粘贴文字的方法
  8. Jquery实现确定取消对话框
  9. 计算机组成原理实验二八位寄存器,计算机组成原理课后参考答案
  10. 网络中的公网和内网 (ipv4)