前两天项目数据库要移植到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. hdu3037 Saving Beans

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pro ...

  2. bookStore第二篇【图书模块、前台页面】

    图书模块 分析 在设计图书管理的时候,我们应该想到:图书和分类是有关系的.一个分类可以对应多本图书. 为什么要这样设计?这样更加人性化,用户在购买书籍的时候,用户能够查看相关分类后的图书,而不是全部图 ...

  3. virtualbox修改主机名

    virtualbox修改主机名 /etc/hostname /etc/hosts

  4. Dodobox一个基于所有平台的嵌入式操作系统(OS)

    DodoBox是为广大应用开始者提供的一个跨平台应用发布平台.它提供了客户端和服务器端的SDK及详细的开发者帮助文件,帮助开发者创建.移植软件应用或游戏应用. DodoBox基于OpenGL技术,提供 ...

  5. XML的序列化(Serializer)

    步骤: //1获取XmlSerializer 类的实例 通过Xml这个工具类去获取 XmlSerializer xmlSerializer = Xml.newSerializer(); try { / ...

  6. JAVA多线程---ThreadLocal<E>

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px ".SF NS Text" } tips: 1 当前ThreadLocal ...

  7. JS -- Variables As Properties

    Variables As Properties When you declare a global JavaScript variable, what you are actually doing i ...

  8. uva11806

    [题意] n行m列网格放k个石子.有多少种方法?要求第一行,第一列,最后一行,最后一列必须有石子. [题解] 利用容斥原理.可以转到求"第一行.第一列.最后一行.最后一列没有石子" ...

  9. C#获取本周第一天和最后一天

    DateTime nowTime = DateTime.Now; #region 获取本周第一天 //星期一为第一天 int weeknow = Convert.ToInt32(nowTime.Day ...

  10. webpack 的使用1

    进入指定文件夹  npm init 安装 npm install webapck --save-dev 根目录下新建hello.js 将文件打包到指定文件  Asset :打包成的文件名称 Chunk ...