MySQL用户管理、密码修改、用户授权

目录

一、权限表

1、user表

2、host表(很少用到)

3、db表

4、tabls_priv表和columns_priv表

5、procs_priv表

二、账户管理

1、命令行登陆

2、创建普通用户

3、删除普通用户

4、root用户修改自己的密码

5、root用户修改普通用户的密码

6、root密码丢失

1、停止服务,进入bin目录

2、跳过权限验证:mysqld --skip-grant-tables

3、打开另一个管理员cmd,进入mysql的bin

4、进入mysql数据库修改密码

5、再次登陆,正常了

三、权限管理

1、权限

2、授权

3、收回权限

4、查看权限


下面是本猿的一些学习笔记

MySQL是一个多用户数据库,用户分为ROOT用户和普通用户。ROOT用户拥有所有权限,普通用户只有被授予的各种权限。

一、权限表

mysql服务器通过权限表来控制用户对数据库的访问,权限表存储在mysql数据库中,由MySQL_install_db脚本初始化。

MySQL用户管理、密码修改、用户授权_第1张图片

1、user表

账号表,里面的权限是全局级,一个用户在user表中被授予delete权限,则可以删除mysql服务器上所有数据库中的任何记录。

在mysql5.7.24中包含45列,分为用户列、权限列、安全列、资源控制列

  • 用户列

Host【主机名】、User【用户名】、Password【密码】,只有三个全部匹配才能建立连接。

Host+User:表的联合主键

  • 权限列

全局范围内允许对数据库和数据进行的操作,包括:查询、修改等普通权限【操作数据库】;关闭服务器、超级权限、加载用户等高级权限【数据库管理】

  • 安全列

SSL:加密,包括ssl_type、ssl_cipher

    SHOW VARIABLES LIKE 'have_openssl'

   查看是否具有ssl功能。如果取值为DISABLED,那么则没有ssl加密功能【普通发行版】。

x509:509标准可以用来标识用户,包括x509_issuer、x509_subject

授权插件

  • 资源控制列

max_questions:用户每小时允许执行查询次数

max_updates:用户每小时允许执行更新次数;

max_connections:用户每小时允许执行的连接次数;

max_user_connections:单个用户允许同时建立的连接次数

一小时内用户操作或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时才可以执行对应的操作。

2、host表(很少用到)

存储某个主机对数据库的操作权限

  • 用户列:Host Db (某个主机 连接的用户 操作某个数据库的权限)

 

3、db表

存储某个用户对数据库的操作权限,决定用户能从那个主机存取哪个数据库

  • 用户列:Host User Db (某个主机 连接某个用户 操作某个数据库)

user表的权限是针对所有数据库,如果用户希望只对某个数据库有操作权限,那么需要将user表的对应权限设置为N,然后在db表设置对应数据库的权限

4、tabls_priv表和columns_priv表

tabls_priv对表设置权限;columns_priv对字段设置权限

5、procs_priv表

对存储过程和存储函数设置权限

二、账户管理

mysql命令

-h 主机名 指定主机名或ip,不指定默认是localhost
-u 用户名  
-p 密码

后面没有内容,登陆时会提示输入密码;有内容注意密码和-p之间不能有空格

-P 端口号 默认3306
  数据库名 在命令的最后指定数据库名
-e 执行SQL语句

指定了该参数,登陆后执行-e后面的命令,并退出

 

1、命令行登陆

mysql -h localhost -u root -p123456 test

2、创建普通用户

有两种方式:CREATE USER 或GRANT语句;直接操作Mysql授权表。新创建的用户没有任何权限。

##创建用户
create user 'jaymou'@'localhost' identified by 'pwd123456';
##创建用户并授权
grant select,update on *.* to 'testUser'@'localhost' identified by 'pwd123456';
##查看新建的用户
select * from mysql.user where user='testUser';
##直接操作mysql用户表 MySQL5.7 mysql.user表没有password字段改 authentication_string;
##,ssl_cipher,x509_issuer,x509_subject 没有默认值,需要指定
insert into mysql.user(Host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values ('localhost','customer1','pwd123456','','','');

3、删除普通用户

##删除user
DROP user testUser,customer1;
DROP user 'testUser'@'localhost';##删除在本地登录权限
##删除来自所有授权表的账户权限记录

##使用delete删除用户
delete from mysql.user where host='localhost' and user='customer1'

4、root用户修改自己的密码

mysqladmin【会自动加密】

mysqladmin -u uasename -h localhost -p password  "newpwd";

输入原密码并enter确认后,将设定新密码。

修改user表

##修改密码,password()函数用来加密用户密码;记得刷新权限

update mysql.user set authentication_string = password('123456') where User='testUser' and Host='localhost' ;
flush privileges ;

正确示范

alter user'root'@'%' IDENTIFIED BY 'mysql@2019'; 

错误示范

set语句修改密码:设置当前登录用户的密码

set password =password ('111111');
flush privileges ;

5、root用户修改普通用户的密码

set语句

set password for 'testUser'@'localhost' = password ('121212');
flush privileges ;
update语句修改普通用户密码
update mysql.user set authentication_string = password('111111') where User='testUser' and Host='localhost';
flush privileges ;
grant修改普通用户密码【会自动加密】【会自动刷新】
grant usage on *.* to 'testUser'@'localhost' identified by '123456';

6、root密码丢失

0、这是我的mysql服务5.7.24,可以直接右键启停

MySQL用户管理、密码修改、用户授权_第2张图片

 

也可在命令行启停

MySQL用户管理、密码修改、用户授权_第3张图片

注意事项:管理员模式的命令行

MySQL用户管理、密码修改、用户授权_第4张图片

1、停止服务,进入bin目录

cd C:\Program Files\MySQL\MySQL Server 5.7\bin

2、跳过权限验证:mysqld --skip-grant-tables

3、打开另一个管理员cmd,进入mysql的bin

cd C:\Program Files\MySQL\MySQL Server 5.7\bin

输入mysql,进入以下界面

MySQL用户管理、密码修改、用户授权_第5张图片

4、进入mysql数据库修改密码

 use mysql;

修改密码并刷新权限

update mysql.user set authentication_string = password('111111') where User='root' and Host='localhost'; 

 flush privileges;

MySQL用户管理、密码修改、用户授权_第6张图片

4.1 完成数据库密码修改,但此时使用sqlyog连接mysql,发现1862错误

MySQL用户管理、密码修改、用户授权_第7张图片

参考这篇https://www.jb51.net/article/99079.htm

同时在命令行登录mysql出现1820错误,目前在命令行只能登陆mysql,但是啥也干不了!!!

MySQL用户管理、密码修改、用户授权_第8张图片

参考了https://www.jianshu.com/p/2b62015f8731,使用下面的语句修改密码

 alter user 'root'@'localhost' identified by '123456';

MySQL用户管理、密码修改、用户授权_第9张图片

5、再次登陆,正常了

MySQL用户管理、密码修改、用户授权_第10张图片

 

但是好像有个问题,之前的数据库没了,没了......

三、权限管理

GRANT

REVOKE

SHOW GRANTS FOR 'user'@'localhost'

1、权限

MySQL用户管理、密码修改、用户授权_第11张图片

CREATE,DROP 创建新数据库和表,删除已有数据库和表
SELECT,INSERT,UPDATE,DELETE 允许在一个数据库现有的表上实施操作;SELECT权限只有在真正从一个表中检索行时才用到
INDEX 允许创建或删除索引,适用于已有表;如果具有某个表的create权限,可以在create table语句中包含索引定义
ALTER 更改表结构,重命名表
ROUTINE相关 CREATE ROUTINE 创建保存的函数和程序,ALTER ROUNTINE 更改和删除,EXECUTE 执行
GRANT 允许授权给其他用户(用于数据库,表,保存的程序)
FILE 读写服务器上的任何文件
其余 管理性操作

2、授权

层级 范围 语句
全局 适用于一个给定服务器的所有数据库 mysql.user

GRANT ALL ON *.*

REVOKE ALL ON *.*

数据库 给定数据库中所有目标 mysql.db,mysql.host

GRANT ALL ON dbname.*

REVOKE ALL ON dbname.*

给定表中所有列 mysql.tables_priv

GRANT ALL ON dbname.tb_name

REVOKE ALL ON dbname.tb_name

给定表中单一列 mysql.columns_priv  
子程序级 已存储的子程序 mysql.procs

CREATE ROUTINE

ALTER ROUNTINE

EXECUTE

 

授权语法

GRANT 权限类型
ON 指定授权对象的作用类型[TABLE|FUNCTION|PROCEDURE] 表1,表2
TO '用户名'@'主机名' [IDENTIFIED BY PASSWORD 'pwd']
[WITH XXXX]

XXXX有以下选项

GRANT OPTION 被授权的用户可以将这些权限授予别的用户
MAX_QUERIES_PER_HOUR count 每小时可以执行count次查询
MAX_UPDATES_PER_HOUR count 每小时可以执行count次更新
MAX_CONNECTIONS_PER_HOUR count 每小时可以建立count次连接
MAX_USER_CONNECTIONS count 单个用户可以同时建立count个连接
grant select,insert on *.* to 'testUser'@'localhost' identified by '123456' with grant option ;

执行结果

MySQL用户管理、密码修改、用户授权_第12张图片

3、收回权限


revoke all privileges ,grant option 
from 'testUser'@'localhost' ;

revoke 权限
on 表1,表2
from 'user'@'host';

4、查看权限

show grants for 'testUser'@'localhost';

结果

select Select_priv,Insert_priv,Update_priv,Delete_priv,Index_priv from user where User='testUser' and Host='localhost';

结果

你可能感兴趣的:(MySQL)