MySQL 用户管理

权限表

user 表

user表是MySQL中一个重要的权限表,记录允许连接服务器的账号信息,
user表有42个字段主要分为四类:

用户列

有 host,user, password 字段,连接时只有这三个值都匹配才能连接,修改密码其实就是修改password字段的值

权限列

类型为枚举:值为 Y 或 N
可以使用 grant 或 update 改变user表的字段来修改权限

安全列

其中两个是 和 ssl相关
用户可以使用 show variables like “have_openssl” 查看服务是否支持ssl功能

在这里插入图片描述

资源控制类

max_questions----> 用户每小时允许的查询操作次数
max_updates—被允许更新次数
max_connections—每小时连接次数
max_user_connections----用户同时建立的连接数量

db表 host表

db:存储了用户对db的操作权限
host:记录某个主机对DB的操作权限
两者相结合

注意:好像MySQL5.7版本后是没有host表

tables_priv && columns_priv 表

tables_priv 用来对标设置操作权限
columns_priv 用来对表的某一列设置权限

对表的权限包括:select update delete insert drop alter create grant references 等

proces_priv 表

对------ 存储过程,存储函数设置操作权限
proc_priv 表示拥有的权限 包括 ----- execute、alter routine、grant

账户管理

登录退出MySQL服务器

参数
- h 主机名或ip,默认是localhost
- u 用户名
- p 密码
- P 端口号
- 数据库名,在命令最后指定

新建用户

两种方式:1.使用 create user 或 grant语句 2.操作MySQL的授权表
但是一般我们都使用第一种方式
注意:新建的用户没有任何权限

# 第一种方式
# identified 用来设置用户密码
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

# 第一种方式 使用 grant 所有数据库都有select  && update 权限
GRANT SELECT,UPDATE  ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'testpwd';  


# 第二种方式 修改user表
INSERT INTO user (Host,User,Password) VALUES('localhost','customer1',PASSWORD('customer1'));

删除用户

# 删除用户本地登录权限
drop user "user_name"@"localhost"

# 删除用户
delete from user where host=‘hostname’ and user='username'

root修改自己密码

1.修改MySQL数据库中的user表
UPDATE mysql.user set Password=password(“rootpwd2”)
WHERE User=“root” and Host=“localhost”;

2.使用MySQLadmin
mysqladmin -u username -p password “newpwd”

更改权限后,使用 flush privileges
3.使用 set password 设置密码
set password=password(“rootpwd”)

root用户修改 普通用户密码

  1. 使用set 语句
  • set password for “user”@“host” = password(“somepwd”)
  • 如果是普通用户修改则可以省略for
  • set password = password(“somepwd”)
  1. 使用update语句修改用户密码
    update mysql.user set password=password(“userpwd”) where user=“username” and host=“hostname”
  2. 使用grant 修改密码
grant usage on *.* to 'username'@'password' identified by "userpassword"
  1. 一个普通用户修改自己密码
  • set password = password(“userpwd”)

忘记root密码解决办法

  1. 使用 --skip-grant-tables 选项,MySQL服务启动时将不会加载权限判断

mysqld --skip-grant-tables

  1. 直接mysql -u root 就好了

musql -u root
此时应该直接连上MySQL了

  1. 登录成功设置root密码

update mysql.user set password=password(“userpwd”)

  1. 加载权限

flush privileges

权限管理

MySQL 的各种权限

账号的权限都存储在,user、db、host、tables_priv、columns_priv、proces_priv

授权
  1. 全局层级

grant all on . 和 revoke all on . 授予或撤销全局权限

  1. 数据库层级
  2. 表级别
  3. 列级别
    示例演示
    使用 grant 创建一个新用户 grantuser 密码为 grantpwd

grant select,insert on . to ‘grantuser’@‘localhost’ identified by ‘grantpwd’ with grant option

with 后面可以跟的参数
grant option :被授权的用户,可以讲这些权限赋予别的用户

收回权限
取消用户的update权限

revoke update on . from ‘testuser’@‘localhost’;

查看用户的权限信息
show grants for ‘user’@‘host’

select privileges from user where user=“username” ,host=“hostname”;

访问控制

连接核实阶段

当用户连接MySQL时,MySQL会去user表中验证 host user password ,这三个字段是否匹配上,若果匹配上则允许登录,否则拒绝访问

请求核实阶段

阶段2:
1.建立连接后,这个连接上的每个请求服务器都会检查用户要执行的操作,判断用户是否有足够的权限来执行,权限来自表,库级 db、用户级 user、表级别 tables_priv 、列级别 columns_priv。 2.确认权限时,先检查user表如果被授权,则检查db表如果被授权,则继续检查,tables_priv和columns_priv 表,如果所有权限检查过了则执行,否则error

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值