前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql。

  公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂。。简单是因为网上关于mysql用户,权限管理的帖子很多,

按照上面的做,基本上能解决遇到的问题。复杂是因为如果考虑的特殊的场景,权限管理会让很多新手蛋疼的不要不要的。

  mysql权限的基础我在这里就不讲了,大家一艘一大把,我这里主要就我的理解在前人基础上做一些解读。公司用的是mysql5.5,所以我的解读仅限于这个版本。其他版本大家自行实验。

1. %和localhost

grant all on *.* to watf@'%';

grant all on *.* to watf@'localhost';

按照我开始的理解,%是代表所有的主机;localhost本地主机,也就是安装mysql的主机。but,这个理解是有问题的。

用第一种授权方式并没有获得本地主机的权限。所以localhost并不是%的子集, 远程主机和本地主机请分别授权。

2. grant all on *. *  to dbtest@'localhost' identified by 'dbtest';

解释:已有dbtest用户,这是在授权兼改密码 ,没有dbtest的情况下是创建带密码用户兼授权。所以还可以用grant命令建用户,改密码,尼玛又多了一项技能有没有。看见不少人授权时用的带密码的方式,我怀疑他们认为这个密码仅仅是用来验证的。假如这个密码输的和原来的不一致,尼玛后面登录不了恐怕他也不知道咋回事。

3.  set password for root=password('root') 是否等同于 update mysql.user set password=password('root') where user='root';

  看到不少帖子认为这两种改密码的方式是相同的。我想说No,

  set password for root=password('root')  等同于 set password for root@'%'=password('root') ,

  所以同样应该等同于 update mysql.user set password=password('root') where user='root' and host='%';如果root分别设置了'localhost'和'%'的密码,用第一种改密码方式只会修改远程登录root用户的密码,第二种方式远程和本地登录root用户的密码都会修改。

  另外,第一种是系统定义的修改密码的方式,可能会牵扯到多张表或者其他操作,而第二种只是修改了用户表而已,除非有明确的官方说明,修改密码只需要修改用户表,和其他表无关,没有其他多余操作,否则,我真的不建议用第二种方式。

4.  drop user aaa;

你以为这个会让aaa用户不能登录么?错,实际上这个只能让远程用户就不能登录,本地用户(如果有的话),照登不误。

原因其实和第一个问题一样,还是%和localhost的区别,因为drop user aaa; 等同于drop user aaa@'%';

另外,有人说可以用delete from mysql.user where user='aaa';这样做确实会让用户不能登录,可以简单的认为删除了用户,但是实际上用户的权限,数据库 都没有删除,这样只是自欺欺人。

Mysql 用户,权限管理的几点理解。的更多相关文章

  1. MYSQL用户权限管理学习笔记

    MYSQL 用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1)       超级管理员用户(root),拥有全部权限 (2)       普通用户,由roo ...

  2. Mysql 用户权限管理

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

  3. Mysql 用户权限管理--从 xxx command denied to user xxx

    今天遇到一个mysql 权限的问题,即标题所述  xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...

  4. MYSQL用户权限管理GRANT使用

    http://yanue.net/post-97.html GRANT语句的语法: mysql> grant 权限1,权限2,-权限n on 数据库名称.表名称 to 用户名@用户地址 iden ...

  5. mysql 用户权限管理详细

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  6. mysql用户权限管理

    参考文章:http://www.cnblogs.com/jackruicao/p/6068821.html?utm_source=itdadao&utm_medium=referral (1) ...

  7. MYSQL用户权限管理(Grant,Revoke)

    MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL指令Grant(分配权限)和Revoke(回收权限)来实现. Grant可以把指定的权限分配给特定的用户,如果这个用户不存在 ...

  8. mysql用户权限管理的问题

    为了保证数据库安全,建立了若干个只能select的用户,但在权限授权的时候出现了不能连接的问题, 一个个尝试了一下,需要将 :  管理 -> SUPER项勾选才行(使用phpmyadmin),上 ...

  9. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  10. Mysql数据库用户及用户权限管理,Navicat设置用户权限

    Mysql数据库用户及用户权限管理,Navicat设置用户权限 一.Mysql数据库的权限 1.1 mysql数据库用户权限级别 1.2 mysql数据库用户权限 1.3 存放用户权限表的说明 二.用 ...

随机推荐

  1. Java中的流程控制

    1.Java中有几种流程控制?分别是什么? 答:有三种流程控制,分别是顺序流程,分支流程和循环流程 2.分支语句if/else有哪三种形式?分别如何使用? 答:if/if-else-/if-else ...

  2. 在eclipse上使用github,向github中提交项目

    1.下载egit插件 打开Eclipse,git需要eclipse授权,通过网页是无法下载egit的安装包的.在菜单栏依次打开eclipse→help→install new software→add ...

  3. 【SQL】- 基础知识梳理(三) - SQL连接查询

    一.引言 有时为了得到一张报表的完整数据,需要从两个或更多的表中获取结果,这时就用到了"连接查询". 二.连接查询 连接查询的定义: 数据库中的表通过键将彼此联系起来,从而获取这些 ...

  4. Spring定时器的使用详解

    写个最简单的demo吧,反正睡前没什么事儿,来祸害一下园子~~虽然我菜,但是我不会承认啊,哈哈哈 明天详细补充点儿吧,很晚了,不睡觉的程序员不是好程序员,我总能给自己找借口~~~ //spring开启 ...

  5. js 递归函数的使用及常用函数

    1.递归函数的使用: 公园里有一堆桃子,猴子每天吃掉一半,挑出一个坏的扔掉,第6天的时候发现还剩1个桃子,问原来有多少个桃子 var peache;function peaches(n) { if ( ...

  6. Java线程池详解

    一.线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务.线程池的关键在于它为我们管理了多 ...

  7. Even Parity uva11464 模拟

    Even Parity Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   ...

  8. Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化

    一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...

  9. rem绝对自适应方案

    rem css3新增的rem是现在非常受欢迎的单位.看一下MDN上的说明: 这个单位代表根元素的 font-size 大小(例如 <html> 元素的font-size). 使用这个单位可 ...

  10. 从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境

    转载请注明出处! 说在前面的话: 1.为什么不使用现成的脚手架?脚手架配置的东西太多太重了,一股脑全塞给你,我只想先用一些我能懂的库和插件,然后慢慢的添加其他的.而且自己从零开始配置也能学到更多的东西 ...