安全排查
MySQL8:查看当前有多少用户以及权限如何
MariaDB也支持此SQL
SELECT user, host, plugin, authentication_string FROM mysql.user;
创建、授权、删除、查看用户权限
注意:所有操作都要执行 flush privileges; 以刷新权限,不然设置的权限操作会不起作用。
第一步:创建用户,成功返回OK
格式:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:用户名
host:允许登录的IPV4地址,%代表不限制任何IP
passwor:密码
没有权限会提示:Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
create user 'wordpress'@'%' IDENTIFIED BY 'wordpressPass';
-- 这里我设置的账号是wordpress,登录的host设置的是%,也就是允许所有人登录,密码是wordpressPass
第二步:对用户进行授权,成功返回OK
格式:GRANT privileges ON databaseName.tableName TO 'username'@'host'
privileges:权限的类型如SELECT,INSERT,UPDATE,Create,Drop等,如果要授予所的权限则使用all privileges
databaseName:库名。如果想全表用*
tableName: 表名。如果想全表 用*
host:IPV4地址。如果想用全ip 用%代替
你可能会遇到:You are not allowed to create a user with GRANT; 这个意思就是不允许隐式创建用户。白话就是:没有这个用户。看看username存不存在,再看看username与host对不对应。
GRANT all privileges ON wp.* TO 'wordpress'@'%';
flush privileges;
-- 本SQL是给'wordpress'@'%'用户设置:拥有wp库中所有表的全部权限!
第三步:撤销权限,成功返回OK
格式:REVOKE privilege ON databasename.tablename FROM 'username'@'host';
如果'username'@'host'没有此权限,就会提示There is no such grant defined for user 'XXX' on host 'XXX'
REVOKE CREATE ON wp.* FROM 'wordpress'@'%';
flush privileges;
-- 本SQL是移除'wordpress'@'%'用户在wp库所有的Create能力。请保证用户具有此权限
第四步:删除用户:成功返回OK
格式:DROP USER 'username'@'host';
操作失败会提示:Operation DROP USER failed for 'zhangsan'@'%'
DROP USER 'wordpress'@'%';
-- 本SQL是删除'wordpress'@'%'用户
第五步:查看用户所拥有的权限
格式:show grants for 'username'@'host';
show grants for 'wordpress'@'%';
GRANT USAGE ON *.* TO `wordpress`@`%` 这个意思是可以使用所有表
GRANT ALL PRIVILEGES ON `wp`.* TO `wordpress`@`%` 这个意思是拥有ALL PRIVILEGES
查看X库可以被哪些用户拥有的权限
select * from mysql.db where Db="sys";
Y代表有权限,N代表无权限
这个输出的意思是:zhangsan@localhost拥有sys表的查询、插入、更新、删除等权限。
开启XX账号 远程登录
方式一:直接修改user表,不推荐!
不推荐这个方式,这个方式会有隐藏问题,比如我原来是root@localhost,现在修改为root@192.168.1.1,mysql的user表只展示最新的账户也就是root@192.168.1.1,我将来要删除用户的时候,删除root@localhost也是可也删除的,尽管user表没有root@localhost(此时应该是drop user的触发器,会执行删除账号的所有权限)。如果不执行 drop user root@localhost就会造成原来root@localhost权限没有转给root@192.168.1.1。root@localhost原来的表还保留着root@localhost被删除前所拥有的权限。如果我们创建之前同名的账户,新账户就拥有老同名同host的权限了!造成:死去的记忆突然攻击我!
# 确定用户权限 格式show grants for 'username'@'host';
如:show grants for 'root'@'localhost';
# 使用mysql数据库
USE mysql;
# 设定用户zhangsan可以远程登录
update user set host='%' where user='zhansan';
# 给用户zhangsan所有权限
GRANT ALL privileges on *.* to 'zhannsan'@'%' ;
不允许使用GRANT命令隐式创建用户的。也就是说你当前可能没有zhansan用户或zhansan用户的host不为%,修改一下改用户的host字段即可!
# 最后要执行权限刷新
flush privileges;
方式二:创建新的账号,对新账号进行授权
创建新的账号,然后再对新账号进行授权!
GRANT本身拥有创建用户的权利,但是我们升级MySQL不同会造成语法不支持的场景,干脆拆开隐式创建账号的方式,一步步创建账号。
create user 'wordpress'@'%' IDENTIFIED BY 'wordpressPass';
GRANT all privileges ON wp.* TO 'wordpress'@'%';
flush privileges;
修改MySQL账号密码
修改密码(建议将 用户名 Host 用双引号引起来)
格式
第一步:选择数据库
use mysql;
第二步:执行修改命令
SET PASSWORD FOR "用户名"@"HOST" = password("新密码"); 或者
SET PASSWORD FOR "用户名" @"HOST" = password("新密码");
或者
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
请注意,如果您使用的是 MySQL 8.0.11 或更高版本,则需要使用以下命令:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
第三步:执行刷新权限修改才会生效
flush privileges;
MySQL修改密码示例
示例:
use mysql;
SET PASSWORD FOR "zhangsan" @"localhost" = password("zhangsan123");
或者其他版本的修改密码语句
flush privileges;
Windows忘记MySQL密码补救(共4步)
第一步:暂停MySQL服务
第二步:修改配置文件
当Mysql服务为 已停止 前往修改配置文件:mysql.ini 文件
C:\ProgramData\MySQL\MySQL Server 5.7
注意:ProgramData 是隐藏文件夹。需要自行勾文件夹显示隐藏文件夹
打开此配置文件,找到[mysqlid] 在下面随便开启一行 填写
skip-grant-tables
第三步:启动mysql服务 并执行修改超管密码的命令
保存文件,去任务管理器 -启动mysql服务
使用命令行,输入
mysql -uroot -p
可以直接绕过Mysql的密码检测,直接登录Mysql CMD界面
选择Mysql表中mysql数据库
use mysql
执行代码
//Mysql 5.7 之前
update user set Password=password('new-password') where user='root'
//Mysql 5.7(Mysql8 可能也会有变化)
update user set authentication_string=password('new-password') where user='root'
//MariaDB
set password for 'USER'@'HOST'=password('new-password');
第四步:撤销修改的配置文件,重启mysql服务
去除Mysql.ini 中[mysqlid] 下追加的 skip-grant-tables
重启Mysql服务:
完成!重新登录Mysql 试试吧!
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)