目录
一、权限表
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脚本初始化。
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,可以直接右键启停
也可在命令行启停
注意事项:管理员模式的命令行
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,进入以下界面
4、进入mysql数据库修改密码
use mysql;
修改密码并刷新权限
update mysql.user set authentication_string = password('111111') where User='root' and Host='localhost';
flush privileges;
4.1 完成数据库密码修改,但此时使用sqlyog连接mysql,发现1862错误
参考这篇https://www.jb51.net/article/99079.htm
同时在命令行登录mysql出现1820错误,目前在命令行只能登陆mysql,但是啥也干不了!!!
参考了https://www.jianshu.com/p/2b62015f8731,使用下面的语句修改密码
alter user 'root'@'localhost' identified by '123456';
5、再次登陆,正常了
但是好像有个问题,之前的数据库没了,没了......
三、权限管理
GRANT
REVOKE
SHOW GRANTS FOR 'user'@'localhost'
1、权限
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 ;
执行结果
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';
结果