目录
一、权限表
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脚本初始化。
账号表,里面的权限是全局级,一个用户在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:单个用户允许同时建立的连接次数
一小时内用户操作或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时才可以执行对应的操作。
存储某个主机对数据库的操作权限
存储某个用户对数据库的操作权限,决定用户能从那个主机存取哪个数据库
user表的权限是针对所有数据库,如果用户希望只对某个数据库有操作权限,那么需要将user表的对应权限设置为N,然后在db表设置对应数据库的权限
tabls_priv对表设置权限;columns_priv对字段设置权限
对存储过程和存储函数设置权限
mysql命令
-h | 主机名 | 指定主机名或ip,不指定默认是localhost |
-u | 用户名 | |
-p | 密码 | 后面没有内容,登陆时会提示输入密码;有内容注意密码和-p之间不能有空格 |
-P | 端口号 | 默认3306 |
数据库名 | 在命令的最后指定数据库名 | |
-e | 执行SQL语句 | 指定了该参数,登陆后执行-e后面的命令,并退出 |
mysql -h localhost -u root -p123456 test
有两种方式: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','','','');
##删除user
DROP user testUser,customer1;
DROP user 'testUser'@'localhost';##删除在本地登录权限
##删除来自所有授权表的账户权限记录
##使用delete删除用户
delete from mysql.user where host='localhost' and user='customer1'
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 ;
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';
0、这是我的mysql服务5.7.24,可以直接右键启停
也可在命令行启停
注意事项:管理员模式的命令行
cd C:\Program Files\MySQL\MySQL Server 5.7\bin
cd C:\Program Files\MySQL\MySQL Server 5.7\bin
输入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';
但是好像有个问题,之前的数据库没了,没了......
GRANT
REVOKE
SHOW GRANTS FOR 'user'@'localhost'
CREATE,DROP | 创建新数据库和表,删除已有数据库和表 |
SELECT,INSERT,UPDATE,DELETE | 允许在一个数据库现有的表上实施操作;SELECT权限只有在真正从一个表中检索行时才用到 |
INDEX | 允许创建或删除索引,适用于已有表;如果具有某个表的create权限,可以在create table语句中包含索引定义 |
ALTER | 更改表结构,重命名表 |
ROUTINE相关 | CREATE ROUTINE 创建保存的函数和程序,ALTER ROUNTINE 更改和删除,EXECUTE 执行 |
GRANT | 允许授权给其他用户(用于数据库,表,保存的程序) |
FILE | 读写服务器上的任何文件 |
其余 | 管理性操作 |
层级 | 范围 | 表 | 语句 |
全局 | 适用于一个给定服务器的所有数据库 | 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 ;
执行结果
revoke all privileges ,grant option
from 'testUser'@'localhost' ;
revoke 权限
on 表1,表2
from 'user'@'host';
show grants for 'testUser'@'localhost';
结果
select Select_priv,Insert_priv,Update_priv,Delete_priv,Index_priv from user where User='testUser' and Host='localhost';
结果