MySQL之用户和用户权限

一、用户创建

1.创建本地用户
方法一:

创建一个用户名为localuser,密码设置为localuser123的本地用户。

1
2
create user 'localuser'@'localhost' identified by 'localuser123';
1

方法二:

使用grant来可以给用户赋予指定的权限,当这个用户和host的组合不存在时,则会新建。

1
2
3
4
5
6
7
8
9
grant [权限1,权限2...] on 库名.表名 to 用户名@'主机名/IP地址' identified by '密码';
#例子:增加一个用户为localuser,密码为localuser123,本地用户可访问。
#使localuser用户获得所有数据库中所有表的(*.*)selectinsertupdatedelete权限
grant select,insert,update,delete on *.* to 'localuser'@'localhost' identified by 'localuser123';
#使localuser用户获得所有权限。
grant all privileges on *.* to 'localuser'@'localhost' identified by 'localuser123';
#如果只想让该用户访问某一个库,只需要将上面的*.*改成 数据库名.*
grant all privileges on csdn.* to 'localuser'@'localhost' identified by 'localuser123';
12345678

2.创建外网访问用户
方法一:

创建一个用户名为networkuser,密码设置为networkuser123的本地用户。

1
2
create user 'networkuser'@'%' identified by 'networkuser123';
1

方法二:

1
2
3
4
5
6
7
#例子:增加一个用户为networkuser,密码为networkuser123,让所有外网IP都能访问。
#使networkuser用户获得所有数据库中所有表的(*.*)selectinsertupdatedelete权限
grant select,insert,update,delete on *.* to 'networkuser'@'%' identified by 'networkuser123';
#使networkuser用户获得所有权限。
grant all privileges on *.* to 'networkuser'@'%' identified by 'networkuser123';
#如果只想让该用户访问某一个库,只需要将上面的*.*改成 数据库名.*
grant all privileges on csdn.* to 'networkuser'@'%' identified by 'networkuser123';

3.刷新权限
创建用户后需要进行刷新

1
flush privileges;

二、修改用户密码

1.修改本地用户密码

格式:

1
UPDATE user SET password=PASSWORD('新密码') WHERE user='用户';
1
2
3
4
5
6
set password for 'localuser'@'localhost'=password('localuser456');
#或者
UPDATE mysql.user SET Password=PASSWORD('localuser456') WHERE User='localuser' and host='localhost';
#或者
use mysql;
update user set password=password('localuser456') where user='localuser' and host='%';

2.修改外网用户密码

1
2
3
4
5
6
set password for 'networkuser'@'%'=password('networkuser456');
#或者
UPDATE mysql.user SET Password=PASSWORD('networkuser456') WHERE User='networkuser' and host='%';
#或者
use mysql;
update user set password=password('networkuser456') where user='networkuser' and host='%';

3.刷新权限
密码修改之后没有生效,需要刷新权限

1
flush privileges;

三、操作用户权限

1.查看用户权限

1
2
3
4
5
6
7
show grants for '用户'@'IP地址';

#查看本地用户权限
show grants for 'localuser'@'localhost';

#查看外网用户权限
show grants for 'networkuser'@'%';

2.修改用户权限

修改用户权限及密码格式:

1
grant 权限 on 库名.表名 to '用户名'@’网段‘  identified by  "该用户的密码";
1
2
3
4
5
6
7
8
9
grant 权限 on 数据库名.表名 to '用户'@'IP地址';

#例子1
#授予用户通过外网IP操作testdata数据库中所有表的全部权限
grant all privileges on testdata.* to 'localuser'@'%' identified by 'localuser456';

#例子2
#授予用户在本地操作testdata数据库中所有表的全部权限
grant all privileges on testdata.* to 'networkuser'@'localhost' identified by 'networkuser456';

3.删除权限

1
2
3
4
5
6
7
revoke 权限 on 数据库名.表名 from '用户'@'IP地址';

#删除localuser用户在本地访问mysql时的insertupdate权限
revoke insert, update on testdata.* from 'localuser'@'localhost';

#删除localuser用户在外网访问mysql时的insertupdate权限
revoke insert, update on testdata.* from 'networkuser'@'%';

4.刷新权限
修改用户权限和删除用户权限都需要进行刷新

1
flush privileges;

四、修改用户

1.修改用户名

1
2
rename user '原始用户名'@'localhost' to '新用户名'@'%';
rename user 'networkuser'@'localhost' to 'networkuser_new'@'%';

2.刷新权限
修改用户名后需要刷新

1
flush privileges;

五、删除用户

1.用户删除

1
2
3
4
5
6
7
8
9
10
11
#删除本地用户
mysql> drop user 'localuser'@'localhost';
#删除外网用户
mysql> drop user 'networkuser'@'%';

#或者

# 删除本地用户
mysql> delete from user Where User='localuser' and Host='localhost';
# 删除外网用户
mysql> delete from user Where User='networkuser' and Host='%';

2.刷新权限
删除用户后需要刷新

1
flush privileges;

六、权限查询

查看mysql数据库中的所有用户

1
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 

查看某个用户的权限

第一种:

1
show grants for 'nextcloud'@'%'; 

第二种:

1
select * from mysql.user where user='root' G; 

第三种:使用MySQL授权语句来查看用户权限,使用以下语句

1
grant select,insert,update,delete on [table name] to ‘root’@'%(或者localhost)';

查看当前用户

1
select user();