Mysql安全之权限用户管理参考手册

news/2023/6/6 3:30:09

一、背景

日常Mysql维护过程中,基于安全要求和规定,需要对Mysql进行分权,接入金库、账户密码满足16位复杂度,对特定表授权,只读用户,最小化权限等处理;本文简要梳理下常用命令操作,以供有需者参考操作。

在这里插入图片描述

更多参看:MySQL用户管理;

二、安全权限配置

2.1、创建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
#创建本地主机登录的用户
CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';
#创建指定主机登录的用户
CREATE USER 'monitor'@'192.168.10.3' IDENTIFIED BY 'Monitor123';
# 创建所有远程主机都可以登录的用户
CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
#查看默认用户
SELECT user,host,account_locked FROM mysql.user;
#修改用户信息
RENAME USER user_01@localhost to user_01@'127.0.0.1';#删除角色monitor
drop role 'monitor'@'localhost';
#删除用户账号user_01、user_02
drop USER user_01@localhost,user_02@localhost;
#查看MySQL下所有用户账号列表
USE mysql;
SELECT * FROM USER;
#修改密码
set password for username @localhost = password(newpwd); //新密码必须使用 PASSWORD() 函数来加密,如果不使用 PASSWORD() 加密,也会执行成功,但是用户会无法登录
set password FOR user_01@localhost ='123456';
update mysql.user set authentication_string=password('新密码') where user='用户名' and Host ='localhost';
#如果是普通用户修改密码,可省略 FOR 子句来更改自己的密码
SET PASSWORD = PASSWORD('newpwd');
flush privileges;
#root密码
mysqladmin -u username -h hostname -p password "newpwd"
UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
#或
SET PASSWORD = PASSWORD ("rootpwd");
FLUSH PRIVILEGES;#创建本地角色admin
CREATE role 'admin'@'localhost';
#授予角色admin查询slot_info表的权限。
GRANT SELECT ON TABLE spms.slot_info TO 'admin'@'localhost';
#授予用户账号user_01角色admin的权限。
GRANT 'admin'@'localhost' TO user_01@'localhost';
SET GLOBAL activate_all_roles_on_login = ON;
#撤消用户账号user_02角色admin的权限。
revoke ALL PRIVILEGES ,GRANT OPTION FROM 'admin'@'localhost';
#删除角色student。
drop role 'admin'@'localhost';

注意:当忘记密码时,我们常在my.cnf中配置启用skip-grant-tables,使服务器不使用/绕过权限系统,给每个mysql用户完全访问所有数据库的权力。通过执行 mysqladmin flush-privileges或 mysqladmin reload或flush privileges语句,可以让一个正在运行的服务器再次开始使用授权表。

2.2、授权

grant all privileges on *.* to 'admin'@'%' identified by 'Admindb_123456';
#授予用户对admin数据库的读写权限
GRANT SELECT,INSERT ON admin.* TO 'localUser'@'%';
#授予用户对所有数据库数据表的所有权限
GRANT ALL ON *.* TO 'localUser'@'%';
#授予更新(update)权限
GRANT UPDATE ON TABLE spms.* TO user_01@localhost;
#授予用户账号admin修改表结构的权限
GRANT ALTER ON TABLE spms.slot TO user_01@localhost;
#授予用户账号user_01调用cn_proc存储过程的权限
GRANT EXECUTE on PROCEDURE spms.slot TO user_01@localhost;
#授予用户账号user_01在spms数据库上创建表、删除表、查询数据、插入数据的权限
GRANT CREATE,SELECT,INSERT,DROP ON spms.* TO user_01@localhost;
#授予全部权限
grant all privileges on spms.* to 'admin'@'%' identified by 'Admindb_123456';#撤消用户账号user_01在spms数据库上创建表、删除表、查询数据、插入数据的权限
revoke CREATE,SELECT,INSERT,drop on spms.* to 'admin'@'%' identified by 'Admindb_123456';
#撤消用户账号user_01所有权限
REVOKE ALL PRIVILEGES,GRANT OPTION FROM  user_01@localhost;
#查看权限
SHOW GRANTS FOR 'username'@'hostname';

2.3、中转

#创建新表slot_mir,与表slot_info完全相同,作为后者的副本进行中转操作
CREATE TABLE spms.slot_mir SELECT * FROM spms.slot_info;
#创建存储过程slot_proc,统计slot_info表中的行数。
DELIMITER@@
CREATE PROCEDURE  spms.slot_proc()
BEGIN
DECLARE n INT;
SELECT COUNT(*) INTO n FROM spms.slot_info;
SELECT n;
END@@

2.4、其他

1)mysql启用尽量使用mysql用户,且mysql用户无本地登录权限,当使用mysql用户启动数据库时,可以防止任何具有file权限的用户能够用root创建文件。而如果使用root用户启动数据库,则任何具有file权限的用户都可以读写root用户的文件。这样会做系统造成严重的安全隐患。
2)注意防止DNS欺骗:创建mysql用户时,user权限表的host可以指定域名或者ip地址, 但是当使用域名时,就可能带来如下安全隐患: 如域名对应的ip址址被恶意修改,则数据库就会被恶意的ip地址进行访问,导致安全隐患。
3)my.cnf配置文件进行严格的权限控制(改成mysql属主,设置权限为600)
4)不要给全部用户all privileges权限,只授予账号必须的权限;
5)除root外,任何用户不应有mysql库user表的写权限(update,insert,delete);
6)除root外,不要把file, process,super权限授予管理员以处的账号;其中,file权限主要作用是:(1)将数据库的信息通过select … into outfile… 写到服务器上有写入权限的目录下。(2)可以将有读权限的文本文件通过load data infile… 命令写入数据库表;process 权限能被用来执行“show processlist” 命令,查看当前所有用户执行查询的明文文本。super权限能执行kill命令,终掉其它用户进程(show processlist的id进程值)。
7)drop table 命令并不收回以前的相关访问授权,导致重新创建同名的表时,以前其它用户对此表的权限会自动赋予,进而产生权限外流。因此在删除表时,要同时取消其它用户在此表的相应权限。
8)配置my.cnf启用ssl,配置前需要先运行mysql_ssl_rsa_setup生成证书,验证执行show global variables like 'have_%ssl';
9)为每个用户加上访问ip限制:创建用户时,指定user表host字段的ip或者hostname, 只有符合授权的ip或者hostname才可以进行数据库访问。
10)不需要从本地文件中Load数据到数据库中,就使用“–local-infile=0”禁用掉可以从客户端机器上Load文件到数据库中;
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4554068.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5期末大作业:汽车销售网站模板设计(7个页面) HTML+CSS+JavaScript 企业网页设计源码...

HTML5期末大作业:汽车销售网站模板设计(7个页面) HTMLCSSJavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的…

chromecast激活

小白误入旁路由添加dns解析(1)外部网络设置不动,内部网络设置第一个dns服务器指向旁路由自己,第二个dns服务器用常用的保证能用就行(2)添加dns解析,把安卓ntp,更新时间的服务器链接成…

struct和class的区别 观察者模式 https连接 点击button收到点击事件,中间发生了什么?4道过滤菜鸟的iOS面试题

1.struct和class的区别 在面试之前你觉得所有的计算机专业的学生都应该能答的上来,事实是我面的人里有超过三分一没有答上来。 有时我还会顺便问下swfit里的array是什么类型,在大量复制时会不会有性能问题。 2.介绍一下观察者模式 也许有些人已经觉得…

PointNet.pytorch点云三维深度学习论文与代码复现

PointNet.pytorch1. 概要1.1 文章1.2 点云和三维深度学习,PointNet 网络结构1.3 复现说明2. 代码2.1 代码逻辑2.2 思路详解3. 解析组会2023.1.18远程arcivdailyonedb1. 概要 1.1 文章 链接: 论文 1.2 点云和三维深度学习,PointNet 网络结构 链接: 三…

固态继电器的使用

直接用三极管驱动,未在中间串接电阻R10导致直接导通接地短路,初级错误,忘各位朋友借鉴。 改正一点,因为电路R10电阻仅是驱动继电器动作,阻值需要根据需要选择,最终根据需要,我的阻值选择为200欧…

三菱FX3U或2N PID开关量固态继电器调节水温程序

三菱FX3U或2N PID开关量固态继电器调节水温程序 当温度差目标远时,输出值100%,当接近温度,部分输出,到达温度时,输出值更小,维持设定温度。 此法使用PID的自整定(阶跃响应法)&#x…

Stm32的GPIO PB10 驱动固态继电器

前言 继电器控制是单片机开发中很普遍的也给应用,在学习单片机的过程当中也是比较基础的一个功能,这里我用 stm32f103rb 单片机控制 德力西固态继电器。 一.接线方式 A1接 stm32 pb10管脚,A2接GND管脚。 T1接电源输入L1接电源输出 二.编写程…

树莓派控制固态继电器的使用

一、运行环境 1.树莓派3B型 2.Ingenex导轨式固态继电器 型号H3F-205SN (输入电压5-24v 输入电流大于10mA被控制电压220v) 3.220v插线板 操作过程 1.电脑通过VNC View软件连接树莓派输入gpio readall,查看可连接输出信号的引脚,我使…