MySQL一周从入门到精通Day3

数据控制语言DCL


1. 用户管理

进一步认识DCL

DCL,数据控制语言,用于管理用户和权限。这部分工作一般DBA完成。

  • 创建/删除用户
  • 修改密码
  • 给用户赋予/撤销权限
掌握用户管理的相关操作
  • MySQL权限体系:5个层级,全局/数据库/表/列/程序层级
  • MySQL权限信息存储在user / db / table_priv / column_pri / procs_priv表中,用户连接数据库时,MySQL会根据表对用户权限验证

MySQL中,用create user创建用户,创建后没有任何权限

注意:MySQL用户账号有两部分组成:用户名和主机名,即用户名@主机名,主机名可以是IP或及其名称,主机名为%表示允许任何地址主机远程登陆MySQL数据库

#创建用户
create user '用户名' [@'主机名'] [identified by '密码'];
#删除用户
drop user '用户名' [@'主机名'];
#修改密码
alter user '用户名'@'主机名' identified by '新密码';

实操

#登录
mysql -h localhost -u root -p
#查看数据库
show databases;

#选择mysql数据库
use mysql;
#查看数据表
show tables;

#查看用户
select * from user\G;	// \G 做一个格式化的输出
//会发现有4个用户
#查看user表的建表语句
show create table user;
//找到primary key发现是把 user和host都作为主键,来确定一个账号

#新建用户
create user 'hu' @ 'localhost' identified by '111111';
create user 'hh' @ '192.168.0.222' identified by '123321';//随便搞一个,验证一下

#新开一个dos终端,登录刚才的用户
#登录用户 hu
mysql -h localhost -u hu -p
//尝试建表,发现失败,因为没有权限
create database hu;

#登录用户 hh
mysql -h localhost -u hh -p		
//登陆失败,因为 hh 只能在192.168.0.222 主机登录


2. 权限管理(授予与回收)

用户授权和撤销授权

MySQL中没用grant命令授权,revoke撤销授权

#授权
grant all privileges on databaseName.tableName to '用户名'[@'主机名'];
#撤销
revoke all privileges on databaseName.tableName from '用户名'[@'主机名'];
#刷新授权
flush privileges;		//授权后刷新查看
#查看权限
show grant for '用户名['@'主机名'];

MySQL权限列表
大体分为三类:数据类,结构类,管理类
在这里插入图片描述


实操

#登录
mysql -h localhost -u root -p
#查看上一节创建的用户 ’hu‘的权限
show grants for 'hu'@'%';
#授权 select
grant select on mydb.* to 'hu'@'&';

#新开终端,登录hu
mysql -h localhost -u hu -p
#查看数据库
show databases;	//多了mydb
#使用授予的select权限
show tables;
select * from area;
#尝试删除
delete from area where id =1;	//发现失败了,没有delete权限

#root用户撤销授权
revoke select on mydb.* from 'hu'@'%';
flush privileges;

#在hu用户查看授权
show databases;		//发现没有了mydb

#root端也可以查看到
show grants for 'hu'@'%';		//只有登录权限了

3. 禁止root用户远程登陆

为什么要禁止root用户远程登陆

实际工作中,公司的DBA都会设置禁止root用户远程登陆。为什么呢?

  • root是MySQL超级管理员,几乎有所有权限,一旦泄露非常严重
  • root是MySQL默认用户,不禁止远程登陆,可以针对root用户暴力破解密码
如何禁止root用户远程登陆

账号=用户名+主机名
所以只要用户名为root,主机名都设置为’localhost‘,就只能本地登录


实操

#登录
mysql -h localhost -u root -p
#查看用户表
select * from user;
select user,host from user;
//可以看到,user名为root的 host名都是 localhost。所以是安全的、

//hu 用户 host是 % ,也就是可以从任何机器连接这个数据库
#禁止 hu 的登录权限
update user set host = 'locathost' where user = 'hu';

4. 忘记root用户密码的解决方法

在MySQL中,如果忘记了普通用户密码,只要使用root用户登录后重置密码就可以。
但是,如果我忘记了root用户密码,该怎么办?


解决方法分四步:

在dos窗口执行:
1 关闭MySQL服务
net stop mysql80
2. 重启MySQL时关闭权限验证

mysqld --defaults-file=“C:\ProgramData\MySQL\MySQL Server8.0\my.ini” --console --skip-grant-tables --shared-memory

这里my.ini文件路径根据自己的来写
3. 修改root密码
开启新的dos窗口,登录 mysql -h localhost -u root -p
刷新授权 flush privileges;
更改密码 alter user 'root'@'localhost' idenfied by '123456';
这里主机名根据个人以前的设置来确定,可以确认一下,看一下root用户的host

show databases;
use mysql; 
show tables;
select user,host from user;
exit;

4.正常启动MySQL服务

在之前的dos窗口,按下ctrl+c
启动数据库 net start mysql80
登录 mysql -h localhost -u root -p


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值