写在开头
有些权限由于mysql版本不同 root用户本身可能没有某些权限
GRANT SYSTEM_USER ON *.* TO 'root'@'%'; (root用户 mysql8.0.27版本确实没有这个权限 可以一开始加上) 记得是 with grant option 权限给其他用户的时候碰到这个问题 如果按照这个文档测试的话 遇到了再把这个命令丢进去
1.用户管理
Mysql用户可以分为root用户和普通用户.root用户是超级管理员,拥有所有权限,包括创建,删除用户和修改用户密码等管理权限,普通用户只拥有被授予的各种权限.
这样可以保证Mysql数据库安全性
登录Mysql服务器
mysql -h hostname|hostIP -P port -u username -p password -e 'SQL语句'
-x后面的空格可加可不加 -p后面的password不要加空格加了默认为空格是密码一部分
mysql -u root -p xxxx 默认连接的本机3306
创建用户
官方推荐用CREATE USER语句来创建新用户.Mysql8移出了PASSWORD加密方式,因此不再推荐使用INSERT语句直接操作Mysql中的user表来新增用户.
使用CREATE USER创建用户需要有CREATE USER权限.新增用户没有任何权限.如果用户已存在会报错.
mysql库里有张user表
user表里字段比较多
select * from user\G 可以把字段显示清楚点
select host,user from user;
本来root用户的host默认也是localhost,就是只允许本机访问
阿里云ECS服务器Linux安装Mysql8-CSDN博客
在安装时候改了 修改语句 update user set Host='%' where User='root';
下面就是Mysql安装完之后 默认的4个用户 主要记住root是超级管理员就行了
创建用户:
CREATE USER '用户名' identified by '密码'
下面host 字段的 % 表示可以任何IP连接
如果用户已经存在 那么这样创建会报错
但是 可以这么干
CREATE USER 'zhangsan'@'localhost' identified by '新密码';
修改用户(一般很少用,为了改个登录名??????????)
UPDATE mysql.user set user='lisi' where user='zhangsan'
此时 我用navicat连接还是可以的 用原先的用户名 zhangsan也是可以登录的
刷新一下
flush privileges;
navicat就不能再连接了 zhangsan也就失效了
删除用户(员工离职了,删除用户)
注意:如果删除用户不成功 用这个
GRANT SYSTEM_USER ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
此操作不需要刷新
推荐用drop user的方式
drop user 'zhangsan'; 如果后面没有host字段 默认是host % 那个用户
如果有多个zhangsan host是localhost的
drop user 'zhangsan'@'localhost'; 如果host是localhost的话 需要指明@'localhost'
也可以一次删除多个
drop user 'xxx','xxx';
另外一种删除方式(不推荐原因:此种方式删除,系统内可能有残留,因为用户信息不光user表,还可能设计其他表)
delete from mysql.user where host='xxxx' and user='xxxxx';
这种方式删除需要刷新一下
flush privileges;
用户的密码设置和管理
涉及两种场景:
1.设置当前用户密码(适用于root用户修改自己的密码,以及普通用户登录后修改自己的密码)
2.修改其他用户的密码(需要有对应权限)
第一种:设置当前用户密码(适用于root用户修改自己的密码,以及普通用户登录后修改自己的密码)
mysql5.7版本
set password=password('新密码'); mysql8废除password函数
mysql8之后
推荐1.用ALTER USER
修改当前登录用户自己的密码
alter user user() identified by '新密码';
推荐2.使用SET语句来修改当前用户密码
set password='新密码';
在mysql.user表里 authentication_string字段 存的就是用户密码 5.7版本是password字段 改成了authentication_string
2.修改其他用户的密码(需要有对应权限)
root用户不仅可以修改自己密码,也可以修改其他用户密码 其他用户修改其他用户密码 需要对应权限 后面讲
1.使用ALTER语句来修改普通用户权限
ALTER USER '用户名'@'host名字' identidied by '新密码';
例如: alter user 'zhangsan'@'%' identified by '123456';
或者:alter user 'zhangsan'@'localhost' identified by '123456';
2.使用SET命令来修改普通用户的密码
例如:SET PASSWORD FOR 'zhangsan'@'localhost'='123456';
3.使用UPDATE语句修改普通用户密码(不推荐)
update mysql.user set authentication_string=PASSWORD('123456') WHERE user='xxx' and host='xxx'; 5.7这样可以 8的话查下 因为不推荐这么干 这里就不查了
密码还可以设置过期时间(自己了解)
注意:如果删除用户不成功 用这个
GRANT SYSTEM_USER ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
权限管理
就是mysql允许你做你权力以内的事情,不可以越界,比如只给你select权限 你就不能update
查看mysql中所有权限 总共62项
show privileges;
查看当前用户有哪些权限
授予权限有两种方式
1.直接授权
2.赋予角色,角色的对应权限给用户(后面讲角色时候讲)
这里就是用第一种方式直接授权
GRANT select,insert,delete,update on testdb.* to 'zhangsan'@'%';
权限可以叠加
赋予用户所有权限(和root用户的区别是 没有给别人授权的权限---->with grant option)
grant all privileges on *.* to 'zhangsan'@'%';
grant all privileges on *.* to 'zhangsan'@'%' with grant option; 这样就和root一样了
收回权限
例如
revoke delete on atguigudb.emps from 'zhangsan'@'%';
这个是收回全部权限
revoke all privileges on *.* from 'zhangsan'@'%';
登录zhangsan查看权限
关于权限表
下面说的mysql库是
角色管理 select host,user from user;角色和用户都是放在一张表中的
Mysql8引入的新功能 Oracle10就有了
角色引入目的就是为了方便管理拥有相同权限的用户
大概的流程是:
1.创建角色
2.给角色赋予权限
3.给用户赋予角色
4.激活角色
还可以设置强制角色(就是创建了用户默认就是某个角色)
创建角色
使用CREATE ROLE语句
例如 下面两个是有区别的
create role 'manager'@'%';
create role 'manager'@'localhost';
给角色赋予权限 如果有两个manager但是host不一样 需要再后面加@'%'或者@'host地址'
grant select on atguigudb.* to 'manager';
GRANT SELECT, INSERT, DELETE, UPDATE ON atguigudb.* TO 'manager';
GRANT ALL PRIVILEGES ON atguigudb.* TO 'manager';
可以一次创建多个角色
create role 'A','B','C';
查看角色权限命令
show grants for 'manager';
show grants for 'manager'@'%';
回收角色权限
revoke insert on atguigudb.* from 'manager';
show grants for 'manager';
删除角色
drop role 'boss'; 如果host是localhost的话 需要指明drop role 'boss'@'localhost';
show grants for 'boss';
show grants for 'manager';
角色和用户都是放在user表中 select host,user from user;可以查看
给用户赋予角色(这就好比授权了)
比如创建一个用户授予manager角色
CREATE USER 'xiaoming'@'localhost' identified by '123456'
grant 'manager'@'%' to 'xiaoming'@'localhost';
查看xiaoming是否有manager角色的授权
登录xiaoming
mysql -u xiaoming -p
密码 123456
show grants;
没有角色里的权限原因 没有激活角色
select current_role(); 查看角色有没有激活
xiaoming账号自己可以激活
set default role 'manager'@'%' to 'xiaoming'@'localhost';
但是激活后查询还是NONE 需要退出先再登录
xiaoming退出后再进入 select current_role(); 查看角色有没有激活
show grants;查询权限
激活角色第二种方式
撤销用户的角色(不能自己撤销自己)
登录root
revoke 'manager'@'%' from 'xiaoming'@'localhost';
强制角色
第一种方式是在配置文件里配置
vim /etc/my.cnf