用户权限管理:在不同的项目组给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全
通常:一个用户的密码不会长期不变,所以需要经常变更数据库用户密码来确保用户本身(mysql客户端用户)安全
mysql需要客户端进行连接认证才能进行服务器操作:需要用户信息。
MySQL中所有的用户信息都保存在MySQL数据库下user表中
默认,在安装MySQL的时候,如果不选择创建匿名用户,那么意味着所有的用户只有一个:root超级用户
在MySQL中,对应的用户管理中,是由host和user共同组成主键来区分用户
user:代表用户的用户名
host:代表的是允许访问的客户端(IP或者主机地址)。如果host使用%,代表所有用户(客户端)都可以访问
理论上讲可以采用两种方式创建
1、直接使用root用户在mysql.user表中插入记录(不推荐)
2、专门创建用户的SQL指令
基本语法:create user 用户名 identified by ’密码(明文)‘;
主机地址:' ' 或者 '%'
create user 'user1'@'%' identified by '123456';
简化版:(谁都可以访问,而且不需要密码)
create user user2;
注意:MySQL中user是带着host本身的(具有唯一性)
基本语法:drop user 用户名@host;
MySQL中提供了多种修改的方式:基本上都必须使用一个系统函数:password()
需要靠该函数对密码进行加密处理。
1、使用专门的修改密码的指令
基本语法:set password for 用户 = password('新的明文密码')
2、使用更新语句update来修改表
基本语法:update mysql.user set password = password('新的明文密码') where user = ' ' and host = '';
在MySQL中将权限管理分为三类:
1、数据权限:增删查改(select\update\delete\insert)
2、结构权限:结构操作(create\drop)
3、管理权限:权限管理(create user\grant\revoke) //通常只给管理员这个权限
将权限分配给指定用户
基本语法:grant 权限列表 on 数据库/*. 表名/* to 用户;
权限列表:使用逗号分隔,可以使用 all privileges 代表全部权限
数据库.表名:可以是单表,可以是具体某个数据库(数据库.*),也可以是整库(*.*)
用户被授予权限后,不需要退出就可以看到效果
权限回收:将权限从用户手中收回
基本语法:revoke 权限列表/all privileges on 数据库/* . 表/* from 用户;
用户被收回权限后,不需要刷新,马上就能生效
刷新:将当前对用户的权限操作,进行刷新:将操作的具体内容同步到表中
基本语法:flush privileges;
如果忘记了root用户密码,就需要去找回或者重置root用户密码
1、停止服务
cmd中:net stop mysql
2、重新启动服务:mysqld.exe --skip-grant-tables //启动服务器,但是跳过权限管理
3、当前启动的服务器没有权限概念,非常危险,任何客户端不需要任何用户信息都可以直接登陆,而且是root权限
4、在MySQL中修改root用户的密码:指定 用户名@host
5、关闭服务器(任务管理器),重启服务(net start mysql)