MySql教程

mysql 数据库用户管理与用户授权

本文主要是介绍mysql 数据库用户管理与用户授权,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql 数据库用户管理与授权

目录
  • 一 : mysql 用户管理与恢复root 密码
    • 1 新建用户
    • 2 查看用户信息与显示登录用户
    • 3 重命名用户
    • 4 删除用户
    • 5 修改密码
    • 6 恢复root 密码
      • 6.1 修改配置文件,设置跳过密码项
      • 6.2 重启mysql 服务,匿名进入mysql ,修改root 密码
      • 6.3 删除配置文件中跳过授权表设置, 重启服务,使用root 用户登录数据库
  • 二: mysql 授权管理
    • 1 授予权限
      • 1.1 普通授权
      • 1.2 让被授权的用户可以将权限授予他人
    • 2 查看用户权限
    • 3 撤销用户权限

一 : mysql 用户管理与恢复root 密码

1 新建用户

create user '用户名'@‘登录地址' [ identitified by '密码' ];


select password('密码');

create user ’用户名'@‘登录地址’ identified by '加密密文';


用户名:指定将创建的用户名

登录地址指新创建的用户可以从哪里登录数据库。可以适应 ip 地址,网段,主机名,本地用户为localhost,任意主机都可以登录为’%‘

密码:

(1)若使用明文面,则直接输入。如果要使用加密密码则下使用select password('密码') ;获取密文,再在语句中添加password '密文';

(2) 如果省略 'identified by' 部分,则用户的密码将为空


#显示当前登录用户与登录地点
select user();

#明文创建本地登录用户test ,并设置密码abc123
create user 'test'@'localhost' identified by 'abc123';

#密文创建用户
#先查看密码  abc123 的加密密码
select password('abc123');
#在使用加密后的密码,创建本地登录用户test2
create user 'test2'@'localhost' identified by password '*6691484EA6B50DDDE1926A220DA01FA9E575C18A';

image-20210829201048017

image-20210829110342491




2 查看用户信息与显示登录用户

select * from mysql.user \G

select User,Host,authentication_string from mysql.user;

mysql 数据库用户信息保存在mysql 库 的user表中,包括了用户名,用户登录地点,用户权限,用户密码加密密文等。其中 User 项保存了用户名,Host 项保存了用户登录地点,autentication_string 保存了用户密码加密密文

select user,host,authentication_string from mysql.user;

image-20210829111447399




3 重命名用户

rename user '用户名'@‘登录地点’ to '新用户名'@'新登录地点';

'用户名'@'登录地点' 必须时存在的。

#将本地登录的用户test2 该文任意地点都可以登录的用户test
rename  user 'test2'@'localhost' to 'test'@'%';

image-20210829112325398




4 删除用户

drop user '用户名'@'客户端登录地址';

删除用户必须要有管理员权限才可以。

如果不加 @'客户端登录地址', 相当于删除 '用户名'@'%'\

并且,用户名和登录地址要对应

#删除任意主机登录的用户 ’test‘@'%'.相当于  drop user t 'test'@'%'
drop user  'test';  
#删除本地登录的用户test
drop user  'test'@'localhost' ;

image-20210829113301816




5 修改密码

  1. 修改当前用户密码

set password=password('新密码');

  1. root 用户修改其他用户密码

set password for '用户名'@'登录地点'=password('密码新');

  1. 通过修改mysql.user 表 修改用户密码

update mysql.user set authentication_string=password('新密码') where 条件表达式;

#设置当前登录用户密码为 123456
set password=password('123456');

#设置本地登录的root 用户密码为 abc123
set password for 'root'@'localhost'=password('abc123');

#修改mysql.user 表的 user字段值为 'user2' 的表记录,将它的authentication_string 字段值改为加密后的123456 
#也就是修改 所有 用户名为 user2 的用户的密码为123456
update   mysql.user set authentication_string=password('123456') where user='user2';

image-20210829135544299

image-20210829140149869




6 恢复root 密码

我们可以通过配置文件中myseld 设置skip-grant-table'项来跳过授权表,匿名登录。然后修改 mysql 库user表中root 的authentication 字段,来修改root密码。


6.1 修改配置文件,设置跳过密码项

vim /etc/my.conf
[mysqld]
skip-grant-tables     #在[mysqd] 项中添加 skip-grant-table 跳过授表

image-20210829152727916


6.2 重启mysql 服务,匿名进入mysql ,修改root 密码

systemctl restart mysqld  #重启mysql的服务
mysql             #匿名进入mysql
# 通过修改 mysql.usr 的authentication_string 字段,来修改 'root'@'locathost' 用户的密码
update mysql.user set authentication_string=password('abc123') where user='root' and host='localhost';
#刷新授权表
flush privileges;
#退出匿名登录
exit

image-20210829153622667


6.3 删除配置文件中跳过授权表设置, 重启服务,使用root 用户登录数据库

vim /etc/my.cnf
[mysqld]
#将 skip-grant-tables 删除
#skip-grant-tables   

#重启mysqld 服务
systemctl restart mysqld

#使用root 登录进入数据库
mysql -uroot -pabc123
#查看当前登录用户与登录地址
select user();   

image-20210829153937518

image-20210829154309189

image-20210829154516815




二: mysql 授权管理

我们使用create user 创建的用户,只能登录进入数据库,但是无法做任何事情。

所以还需要grant 命令进行 用户授权。同时,此命令,如果当用户不存在,也可以创建该用户。


1 授予权限

grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' identified by ‘密码’ with grant option;

权限列表:多个权限用逗号‘,’ 隔开,如 'select,update' 。 all 表示所有权限

数据库名.表名:用于指定授权操作的数据库名和表名,可以使用通配符' *' 表示所有。如 *.* 表示所有库,所有表

'用户名'@'来源地址' : 用户指定用户名和可以登录的客户端地址。可以使用百分号 % 来表示某个区域的所有地址。 'root'@'%' 表示任意主机都可以登录, 'root'@'192.168.23.%' 表示192.168.23.0 整个网段。'root'@'%.mynet.com' 表示所有以.mynet.com 结尾的主机

identified by :用于设置用户连数据库时候的密码。在新建用户时,如果省略此部分,则用户密码为空。但是我们在配置文件中设置了'NO_AUTO_CREATE_USER'项,所以时无法创建空密码用户

with grant option :让被授权的用户,可以将相同的权限授权给他人。

其他事项:grant 授权或者 revoke 撤销权限后,需要用户重新连接mysql 数据库,或者刷新授权表



1.1 普通授权

#授权  school库 的所有表的select权限给用户 test,登录密码是abc123,只能本地登录
grant select on school.* to 'test'@'localhost' identified by 'abc123';
exit  #退出数据库

#使用用户 test ,密码abc123 本地登录nmysql
mysql -utest -pabc123  
#查看数据库
show databases;

#切换到 school库
use school
#尝试向表中插入数据,结果为权限被拒绝
insert into class1  value(10,'test',1010110); 

image-20210829161734279

image-20210829162130889

image-20210829163723191



1.2 让被授权的用户可以将权限授予他人

注意,当被授权用户将权限授予他人时候,涉及到的权限,库,表,必须时本身拥有的权限。否则报错。

比如,当本身没有mysql 库的权限时,就不可以在授权给其他用户时加上密码。


#将school库的所有表的select,insert,update,delete 权限授权给使用密码 abc123本地登录的用户test,并且,该用户可以将这些权限授权给其他用户
grant select,insert,update,delete on school.* to 'lisi'@'localhost' 
    -> identified by 'abc123' with grant option;
   
#刷新授权表
flush privileges;
exit

image-20210829163203059

image-20210829164353917



#当将权限授权于给一个不存在的用于时,则报错,不可以使用grant 命令创建用户
grant select,update,insert,delete on school.* to 'wangwu'@'localhost' identified by 'abc123';

#当授权个一个存在的用户,但是后面跟了 identified by 项时,则报错,不可以对mysql 库操作。因为用户密码是保存在 mysql 库中,而当前用户没有mysql 库的权限,所以报错。
#可以授权时候,后面不跟密码,或者将mysql 库user表的相应权限授权给 当前用户
grant select,update,insert,delete on school.* to 'test'@'localhost' identified by 'abc123';

#当直接授权给存在的用户'test'@'localhost'时,则成功。
grant select,update,insert,delete on school.* to 'test'@'localhost' ;

image-20210829165445224



#使用test 用户本地登录
mysql -utest -pabc123
use school;
#本来没有insert 权限的test用户,现在可以对class1 表进行增删改查操作
insert into class1 values(13,'test',13131113);

image-20210829165829561




2 查看用户权限

用户显示自身的访问权限

show grants;


管理员查看已拥有授权用户权限

show grants for '用户名'@'登录地点'


#显示当前登录用户的权限
show grants;
#显示'test'@'localhost' 用户的权限
 show grants for 'test'@'localhost';

image-20210829201405805




3 撤销用户权限

revoke 权限 on 库名.表名 from '用户名'@'登录地点' ;

权限,库名.表名, '用户名'@'登录地点' 必须与授权表里对应

all 表示所有权限

revoke  select   on  school.* from 'test'@'localhost';
revoke  all  on  school.* from 'test'@'localhost';

image-20210829202411400

image-20210829202525115

这篇关于mysql 数据库用户管理与用户授权的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!