03Mysql 02 用户管理

本文详细介绍了在MySQL中如何恢复误删所有用户的情况,包括停止服务、跳过授权启动、添加用户、授权、修改密码等步骤。同时,讨论了Linux用户和MySQL用户的区别,并讲解了MySQL用户定义、创建、删除、权限管理等操作。最后,通过实例展示了权限的实践应用,如创建数据库、授权操作等。
摘要由CSDN通过智能技术生成

用户管理

1、误删除所有用户【忘记密码】

#演示误删除所有用户
mysql> delete from mysql.user where 1=1;

#重启 mysql 服务后就不能登陆 mysql 了
systemctl restart mysql

解决方法:
1#停止 mysql 服务,并检查进程是否关闭
systemctl stop mysql
ps -ef |grep [m]ysql

2#注意:只跳过授权表登录很不安全,任何人都可以远程登录,所以还要限制只允许本机登录数据库
	#2.1、跳过授权表启动【不安全】
[root@db01 ~]# mysqld_safe --skip-grant-tables &
	#2.2、跳过授权表与网络启动数据库只能本地登录【安全】
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
[1] 8785
[root@db01 ~]# 201023 16:46:52 mysqld_safe Logging to '/usr/local/mysql/data/db01.err'.
201023 16:46:52 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
#这里主动回车,接下来再查看进程启动了没有
[root@db01 ~]# ps -ef |grep [m]ysql

3#登陆 mysql 并切换到 mysql 库
#如果配置文件中配置了 --socket=mysql.sock 那启动就需要指定sock文件目录 mysql -S /service/mysql/data/mysql.sock
或者
[root@db01 ~]# mysql
mysql> use mysql;

4、2种方法添加用户
	#4.1、插入用户数据
mysql> insert into mysql.user values ('localhost','root',PASSWORD('123'),
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'',
'',
'',
'',
0,
0,
0,
0,
'mysql_native_password',
'',
'N');

	#4.2、授权的方式添加用户
#刷新mysql系统权限相关表【不刷新不可以执行授权命令 grant,会报错】
	#报错
	ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#第一种授权方法
	#授权一个新用户,但是grant默认没有允许权限
mysql> grant all on *.* to root@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
	#修改grant权限
mysql> update mysql.user set Grant_priv='Y' where user='root' and host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

#第二种授权方法
mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;

5#查看刚刚添加的用户
mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)

4#关闭跳过授权登陆的 mysql
mysqladmin -uroot -p123 shutdown
#注意如果配置文件中指定了sock文件位置,那关闭的时候也需要指定配置文件中的sock文件位置
mysqladmin -uroot -p123 -S /service/mysql/data/mysql.sock shutdown

5#正常方式启动并登陆 mysql
systemctl start mysql
mysql -uroot -p123

2、linux用户和mysql用户对比

linux系统mysql数据库
用户作用1.登录系统 2.管理系统文件1.登录MySQL数据库 2.管理数据库数据
创建用户1.useradd 2.adduser1.create user test@’%’; 2.grant
用户密码1.passwd lhd 2.useradd lhd -p 1231.mysqladmin 2.create user test@’%’ identified by ‘123’;
删除用户userdel1.drop user test@’%’; 2.delete
修改用户usermodupdate

3、在mysql中,用户是怎么定义的

#在mysql中,定义一个完整的用户是:
'用户名'@'主机域'

用户名写法:
	如果是字符不需要加引号:rep@'27.0.0.1'
	如果是数字作为用户名则加引号:'123'@'127.0.0.1'
	
主机域的写法:
	localhost
	127.0.0.1
	db01
	::1
	%
	10.%.%.%
	10.0.%.%
	10.0.0.%   (10.0.0.1-10.0.0.255)
	10.0.0.5%  (10.0.0.50-10.0.0.59)
	10.0.0.0/255.255.255.0
	10.0.0.0/24 #可以创建,但是不生效

4、用户管理

1)创建用户
create user mcy@'10.0.0.%' identfied by '123';
2)查看用户
select user,host from mysql.user;
3)删除用户
drop user mcy@'10.0.0.%';
4)修改用户密码
1.命令行使用mysqladmin修改密码
[root@db01 ~]# mysqladmin -uroot -p123 password '123456'
Warning: Using a password on the command line interface can be insecure.
#警告:在命令行写出密码不安全
[root@db03 ~]# mysqladmin -uroot -p password
Enter password: 		#旧密码
New password: 			#新密码
Confirm new password:	#重复新密码

2.授权的方式修改密码
mysql> grant all on *.* to root@'localhost' identified by '123';

3.更新数据修改密码
mysql> update mysql.user set password=password('123456') where user='root' and host='localhost';
mysql> flush privileges;

4.set不加条件修改密码
mysql> set password=password('123');
修改当前登录数据库用户的密码
5)忘记了root用户的密码
1.停止数据库
[root@db01 ~]# systemctl stop mysql

2.启动数据库					跳过授权表			禁止网络登陆 
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &

3.连接数据库
[root@db01 ~]# mysql

4.update修改密码
mysql> update mysql.user set password=password('123456') where user='root' and host='localhost';

5.刷新授权表
mysql> flush privileges;

6.关闭跳过授权启动的数据库
[root@db01 ~]# mysqladmin -p123456 shutdown

7.正常启动数据库并测试
[root@db01 ~]# systemctl start mysql
[root@db01 ~]# mysql -uroot -p123456

5、权限管理

1)设置授权和查看授权
#授权的命令
grant all privileges on *.* to root@'localhost' identified by '123';
grant all privileges on *.* to root@'10.0.0.1' identified by '123456';
grant all on *.* to root@'localhost' identified by '123';
#查看用户的授权有哪些
show grants for root@'localhost';	#授权语句
select * from mysql.user where user='cactiuser' \G	#查看授权权限有哪些

grant				#授权命令
all					#所有权限
on					#在......上
*.*					#所有库.所有表
to					#给
root@'localhost'    #'用户名'@'主机域'
identified			#密码
by					#是
'123'				#密码本身
2)所有权限
INSERT,SELECT,UPDATE,DELETE,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,FILE,REFERENCES,INDEX,ALTER,SHOW DATABASES, SUPER,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,REPLICATION SLAVE,REPLICATION CLIENT,CREATE VIEW,SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

1)数据库/数据表/数据列权限:
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。

2)全局管理MySQL用户权限:
file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。

3)特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
3)对象的授权级别
grant all on *.* to root@'localhost' identified by '123';			所有库所有表
grant all on mysql.* to gcc@'localhost' identified by '123';		单库授权
grant all on mysql.user to zy@'localhost' identified by '123';		单表授权

#企业里面称单列授权为 脱敏:脱离敏感信息
grant select(user,host) on mysql.user to zzy@'localhost' identified by '123';

#举例:
	1.普通用户只能看到user列
	grant select(user) on mysql.user to diaosi@'localhost' identified by '123';
	2.VIP用户能看到所有
	grant all on mysql.user to vip@'localhost' identified by '123';
4)在企业里权限的设定
#开发要开一个用户连接数据库

1.进行沟通:
	1.1 你要操作哪些库哪些表?
	1.2 你从哪个ip连接过来?
	1.3 用户名你想用什么?
	1.4 密码想设置什么?
	1.5 这个用户你要用多久?
	1.6 发邮件

2.一般给开发什么权限
	grant select,update,insert on test.* to dev@'10.0.0.101' identified by 'Lhd@123.com';

3.千万千万不能随便把root权限交出去

6、权限实践

1)准备数据库
#创建wordpress数据库
create database wordpress;
#使用wordpress库
use wordpress;
#创建t1、t2表
create table t1 (id int);
create table t2 (id int);
#创建blog库
create database blog;
#使用blog库
use blog;
#创建tb1表
create table tb1 (id int);
2)授权
#给wordpress@'10.0.0.5%'用户查询所有库下所有表的权限,密码是123
1、grant select on *.* to wordpress@'10.0.0.5%' identified by '123';

#给wordpress@'10.0.0.5%'用户增加,删除,修改wordpress库下所有表的权限,密码是123
2、grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';

#给wordpress@'10.0.0.5%'所有权限操作wordpress库下面的t1表,密码是123
3、grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';
3)提问:
一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,
1.对t1表的操作权限?			所有权限:all
2.对t2表的操作权限?			增删改查:insert,delete,update,select
3.对tb1表的操作权限?			查的权限:select
4)权限总结
1.如果在不同级别授权,权限是相加关系
2.我们不推荐在多级别定义重复的权限
3.最常见的授权方式就是单库授权
	grant select,insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';
4.如果涉及到用户的敏感信息,我们可以选择使用脱敏授权,即单列授权
	grant select(user,host) on mysql.user to zzy@'localhost' identified by '123';
5.查看已授权的用户权限
	mysql> show grants for root@'localhost';
6.用create新建的用户只有登录权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值