2.2权限管理

2.2.1作用

用户对数据库对象,有哪些管理能力
##2.2.2权限的表现方式
增删改查的命令
show privileges;
##2.2.3授权
语法:
8.0以前
grant 权限 on 对象 to 用户 identified by '密码';
8.0+之后
create user 用户 identified by '密码';
grant 权限 on 对象 to 用户;
grant 权限1,权限2,权限3,.... on 对象 to 用户 identified by '密码' with grant option;
权限:
ALL :管理员
Grant option :给别的用户授权
权限1,权限2,权限3,.....:普通用户(业务用户,开发用户)

对象范围:
库或者表。
常用写法
.: chmod -R 755/ 管理员
oldguo.: chmod -R 755/oldguo 普通用户、业务用户
oldguo.t1: chmod -R 755/oldguo/t1
授权的例子:
例子1:创建并授权一个管理员用户,能够通过10.0.0.%网段登录并管理数据
grant all on *.
to oldguo@'10.0.0.%' identified by '123' with grant option;
例子2:查询创建用户
selcet user,host from mysql.user;
例子3:查询用户权限
show user,host from mysql.user;
select * from mysql.user\G(本来行显示,\G之后换成列显示)
例子4:创建并授权一个app@'10.0.0%'业务用户,能够对app库下所有对象进行create,select,update,delete,insert操作
grant create,update,select,insert,delete on app.* to app@'10.0.0.%' identified by '123'
show grants for app@'10.0.0.%'
select user,host from mysql.user

MySQL授权表
user : . 存放创建的用户和密码包括全局实例级别管理权限设置
db : app.* 存放设置的数据库级别的权限设置
tables_priv : app.t1 存放表级别的权限设置
columns_priv : 列 存放字段级别的权限设置
procs_priv : 存放存储过程中的权限设置

回收权限
Linux:
chmod -R 644/oldguo chmod -R 755/oldguo
MySQL:
注意,MySQL中不能通过重复授权,修改权限;只能回收权限,再进行改变
revoke create on app.* from 'app'@'10.0.0.%';
show grants for app@'10.0.0.%';

超级管理员可以删除超级管理员
drop user root@'localhost'
grant all on . to root@'localhost' identified by '123' with grant option;

面试题:超级管理员的密码忘记了。怎么找回?
进到维护模式

连接层
链接协议:TCP/IP,socket
用户验证
链接线程

一、首先关闭数据库:
systemctl stop mysqld
二、然后启动数据库(使用安全模式启动):
1.service mysqld start --skip-grant-tables
2.service mysqld restart --skip-grant-tables
3.which mysqld_safe
mysqld_safe --skip-grant-tables
三、登录数据库,并修改密码
手工增加授权表到内存
flush privilges
再进行密码修改
alter user root@'localhost' indentified by '123'
四、重启数据库到正常模式
service mysqld restart
再屏蔽远程用户,只能让本地用户随意登录

--skip-grant-tables: 跳过授权表
--skip--networking: 跳过TCP/IP链接