当前位置: 首页 > 编程日记 > 正文

Mysql安全配置

zhangsan · 2014/06/14 11:55

0x01 前言


很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话。因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限。 现在很多mysql用着root账户在操作,并不是大家不知道用root权限太大不安全,而是很多人并不知道该给予什么样的权限既安全又能保证正常运行。所以,本文更多的是考虑这种情况下,我们该如何简单的配置一个安全的mysql。注:本文测试环境为mysql-5.6.4

0x02 Mysql权限介绍


mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表。

mysql权限表的验证过程为:

1,先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
2,通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
复制代码

0x03 mysql有哪些权限


权限

权限级别

权限说明

CREATE

数据库、表或索引

创建数据库、表或索引权限

DROP

数据库或表

删除数据库或表权限

GRANT OPTION

数据库、表或保存的程序

赋予权限选项

REFERENCES

数据库或表

ALTER

更改表,比如添加字段、索引等

DELETE

删除数据权限

INDEX

索引权限

INSERT

插入权限

SELECT

查询权限

UPDATE

更新权限

CREATE VIEW

视图

创建视图权限

SHOW VIEW

视图

查看视图权限

ALTER ROUTINE

存储过程

更改存储过程权限

CREATE ROUTINE

存储过程

创建存储过程权限

EXECUTE

存储过程

执行存储过程权限

FILE

服务器主机上的文件访问

文件访问权限

CREATE TEMPORARY TABLES

服务器管理

创建临时表权限

LOCK TABLES

服务器管理

锁表权限

CREATE USER

服务器管理

创建用户权限

PROCESS

服务器管理

查看进程权限

RELOAD

服务器管理

执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限

REPLICATION CLIENT

服务器管理

复制权限

REPLICATION SLAVE

服务器管理

复制权限

SHOW DATABASES

服务器管理

查看数据库权限

SHUTDOWN

服务器管理

关闭数据库权限

SUPER

服务器管理

执行kill线程权限

0x04 数据库层面(db表)的权限分析


权限

说明

网站使用账户是否给予

Select

可对其下所有表进行查询

建议给予

Insert

可对其下所有表进行插入

建议给予

Update

可对其下所有表进行更新

建议给予

Delete

可对其下所有表进行删除

建议给予

Create

可在此数据库下创建表或者索引

建议给予

Drop

可删除此数据库,及此数据库下的表

不建议给予

Grant

赋予权限选项

不建议给予

References

未来MySQL特性的占位符

不建议给予

Index

可对其下的所有表进行索引

建议给予

Alter

可对其下的所有表进行更改

建议给予

Create_tmp_table

创建临时表

不建议给予

Lock_tables

可对其下所有表进行锁定

不建议给予

Create_view

可在此数据下创建视图

建议给予

Show_view

可在此数据下查看视图

建议给予

Create_routine

可在此数据下创建存储过程

不建议给予

Alter_routine

可在此数据下更改存储过程

不建议给予

Execute

可在此数据下执行存储过程

不建议给予

Event

可在此数据下创建事件调度器

不建议给予

Trigger

可在此数据下创建触发器

不建议给予

0x05 mysql安全配置方案


1 限制访问mysql端口的ip

windows可以通过windows防火墙或者ipsec来限制,linux下可以通过iptables来限制。

2 修改mysql的端口

windows下可以修改配置文件my.ini来实现,linux可以修改配置文件my.cnf来实现。

3 对所有用户设置强密码并严格指定对应账号的访问ip

mysql中可在user表中指定用户的访问可访问ip

4 root特权账号的处理

建议给root账号设置强密码,并指定只容许本地登录

5 日志的处理

如需要可开启查询日志,查询日志会记录登录和查询语句。

6 mysql进程运行账号

在windows下禁止使用local system来运行mysql账户,可以考虑使用network service或者自己新建一个账号,但是必须给与mysql程序所在目录的读取权限和data目录的读取和写入权限; 在linux下,新建一个mysql账号,并在安装的时候就指定mysql以mysql账户来运行,给与程序所在目录的读取权限,data所在目录的读取和写入权限。

7 mysql运行账号的磁盘权限

1)mysql运行账号需要给予程序所在目录的读取权限,以及data目录的读取和写入权限 
2)不容许给予其他目录的写入和执行权限,特别是有网站的。 
3)取消mysql运行账户对于cmd,sh等一些程序的执行权限。
复制代码

8 网站使用的mysql账户的处理

新建一个账户,给予账户在所使用数据库的所有权限即可。这样既能保证网站对所对应的数据库的全部操作,也能保证账户不会因为权限过高而影响安全。给予单个数据库的所有权限的账户不会拥有super, process, file等管理权限的。 当然,如果能很明确是的知道,我的网站需要哪些权限,还是不要多给权限,因为很多时候发布者并不知道网站需要哪些权限,我才建议上面的配置。而且我指的通用的,具体到只有几台机器,不多的情况下,我个人建议还是给予只需要的权限,具体可参考上面的表格的建议。

9 删除无用数据库

test数据库对新建的账户默认有权限

0x06 mysql入侵提权分析及防止措施


一般来说,mysql的提权有这么几种方式:

1 udf提权 此方式的关键导入一个dll文件,个人认为只要合理控制了进程账户对目录的写入权限即可防止被导入dll文件;然后如果万一被攻破,此时只要进程账户的权限够低,也没办执行高危操作,如添加账户等。

2 写入启动文件

这种方式同上,还是要合理控制进程账户对目录的写入权限。

3 当root账户被泄露

如果没有合理管理root账户导致root账户被入侵,此时数据库信息肯定是没办法保证了。但是如果对进程账户的权限控制住,以及其对磁盘的权限控制,服务器还是能够保证不被沦陷的。

4 普通账户泄露(上述所说的,只对某个库有所有权限的账户)

此处说的普通账户指网站使用的账户,我给的一个比较方便的建议是直接给予特定库的所有权限。账户泄露包括存在注入及web服务器被入侵后直接拿到数据库账户密码。

此时,对应的那个数据库数据不保,但是不会威胁到其他数据库。而且这里的普通账户无file权限,所有不能导出文件到磁盘,当然此时还是会对进程的账户的权限严格控制。

普通账户给予什么样的权限可以见上表,实在不会就直接给予一个库的所有权限。

0x07 安全配置需要的常用命令


1.新建一个用户并给予相应数据库的权限

grant select,insert,update,delete,create,drop privileges on database.* to [email protected] identified by 'passwd';grant all privileges on database.* to [email protected] identified by 'passwd';
复制代码

2.刷新权限

flush privileges;
复制代码

3. 显示授权

show grants;
复制代码

4. 移除授权

revoke delete on *.* from 'jack'@'localhost';
复制代码

5. 删除用户

drop user 'jack'@'localhost';
复制代码

6. 给用户改名

rename user 'jack'@'%' to 'jim'@'%';
复制代码

7. 给用户改密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
复制代码

8. 删除数据库

drop database test;
复制代码

9. 从数据库导出文件

select * from a into outfile "d:\abc.vbs"
复制代码

相关文章:

【C++】Google C++编码规范(一):作用域

1、文件作用域: 在.cpp文件中,C使用匿名名字空间来表示文件作用域,C使用static来表示; 2、局部变量 局部变量在声明的同时,进行显示初始化;比起隐式初始化再赋值要高效; 局部变量的作用域要尽…

华为 | 人生苦短,码短情长,有场大Party等你来Pick!

上学时,书上说C语言是上帝的语言。我同屋的兄弟不服,他说PHP才是最好的语言。毕业之后,我们Team的老大却坚信:Life is short,只用Python……现在,作为一个真正的开发者,我发现用什么语言一点点都…

设置进程优先级

//取得本进程id HANDLE hProcess GetCurrentProcess(); //设置本进程的优先级 int stat SetPriorityClass(hProcess, NORMAL_PRIORITY_CLASS);

Deep Reading | 从0到1再读注意力机制,此文必收藏!

译者 | forencegan编辑 | 琥珀出品 | AI科技大本营(ID: rgznai100)【AI科技大本营导语】注意力机制(Attention)已经成为深度学习必学内容之一,无论是计算机视觉还是自然语言处理都可以看到各种各样注意力机制的方法。之…

【C++】Google C++编码规范(二):类

1、构造函数 不要在构造函数中进行复杂的初始化 (尤其是那些有可能失败或者需要调用虚函数的初始化). 构造函数不得调用虚函数, 或尝试报告一个非致命错误. 如果对象需要进行有意义的 初始化, 考虑使用明确的 Init() 方法或使用工厂模式. 2、初始化 第一种方法:构…

Flask与Django对比

Flask与Django对比 Django vs FlaskFlask框架之间的差别 Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由&#xff0c…

windows下apache配置虚拟主机的两个方法

windows下apache配置虚拟主机方法一: 对httpd.conf进行设置:1.注释以下三行#ServerAdmin#ServerName#DocumentRoot2.去掉mod_proxy.so和mod_proxy_ajp.so的注释3.#Virtual hosts#Include conf/extra/httpd-vhosts.conf &#xff0…

大疆、港科大联手!双目3D目标检测实验效果大放送 | CVPR 2019

作者 | heryms责编 | JaneCVPR 2019的文章出来了,今天聊聊双目的 3D object detection。这是一篇来自 DJI (大疆)与港科大合作的文章《Stereo R-CNN based 3D Object Detection for Autonomous Driving》,作者分别是 Peiliang Li&…

【C++】Google C++编码规范(三):智能指针

【C】Google C编码规范(一):作用域 【C】Google C编码规范(二):类 std::unique_ptr std::unique_ptr是C11标准里新推出的智能指针,用来表示动态分配出的对象的「独一无二」所有权&#xff1b…

Django restful-framework初步学习

urls.py from django.conf.urls import include, url from django.contrib import admin from rest_framework import routers # 导入api路由 from app01 import apirouter routers.DefaultRouter() # 获取api路由对象 router.register(rusers, api.UserViewSet) # 注册路由到…

植树节,程序员要爬哪些“树”?

作者 | 程序猿小吴、进击的Hello_World转载自五分钟学算法(ID: CXYxiaowu)公历 3 月 12 日是一年一度的植树节。旨在宣传保护森林,并动员群众参加植树造林活动。说到树,程序猿们肯定不陌生,趁着这个植树节,…

把JS 脚本嵌入CS运行

下面这段视频,是让您知道怎样把播放器的javascript放入C#类别中。在调用这个类别时,只传入相关的参数,即可运行。一时类别封装了,在前台xxx.aspx或xxx.aspx.cs看不到播放器的代码。 另一个就是在CS内怎样运行Javascript脚本。此工…

【C++】Google C++编码规范(四):其他C++

引用参数 所有按引用传递的参数必须加上const; 这在Google Code上是一个硬性约定:输入参数是值参或const的引用参数,输出参数为指针,输入参数可以是const指针,但决不能是非const的引用参数,除非用于交换,比…

使用Ceph集群作为Kubernetes的动态分配持久化存储

2019独角兽企业重金招聘Python工程师标准>>> 使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储。 Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ceph-common 1. 为kubernetes创建一个存储池 1 2 #…

Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三

本文的代码包以cosmos-12304.zip为例(从这个包开始,COSMOS的内核算是有了个基本的雏形,就像是一颗大树在出芽前会先长出庞大的根系,现在就要破土长出第一颗芽了) IL2CPU之于COSMOS就相当与GCC之于LINUX,查看…

【面试 多线程】【第九篇】多线程的问题

1.多线程有什么用 发挥多核CPU优势,防止阻塞,更快的处理数据 2.多线程的实现方式有哪几种,分别的特点优势是什么样的 1》继承Thread类,重写run方法,start启动多线程 2》实现Runnable接口,重写run方法&…

那个大战AlphaGo的柯洁,将免试入读清华大学工商管理专业

日前,柯洁将免试入读清华大学的消息经媒体曝光了出来。《2019 年优秀运动员免试入学推荐名单》3 月 10 日开始公示,围棋世界冠军柯洁的名字出现在名单上,其中表明他将就读清华大学工商管理类专业。据了解,柯洁预计今年下半年入学清…

【Qt】设置背景

1、使用样式表qss设置背景 QDialog 设置背景图片: dlg->setStyleSheet("QDialog{border-image: url(://test.png);}"); 设置背景颜色: dlg->setStyleSheet("QDialog{background-color: red;}"); QWidget 设置背景图片: wgt->setStyleSheet…

基于Hadoop的MapReduce框架研究报告

http://www.doc88.com/p-19830708273.html

【Qt】设置窗口透明度

1、使用setWindowOpacity设置透明度 setWindowOpacity(0.5); 设置完成会使窗体、标题栏、子控件都透明 2、使用样式表qss设置窗体透明 dlg->setStyleSheet("QDialog{background-color: rgba(255, 0, 0, 0.5);}");wgt->setStyleSheet("QWidget{backgrou…

7行Python代码,搭建可以识花的机器学习App|视频教程

你想学Python,却不知如何着手,那你需要一种更加有趣的学习方式。Siraj Raval是一位人工智能领域的编程高手,毕业于哥伦比亚大学,曾任职于 Twilio 和 Meetup,他通过制作教程类短视频的方式在Youtube上积累了大量的粉丝&…

java中缀表达式转后缀表达式(逆波兰算法)

四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式数字直接输出为后缀表达式一部分如果是符号,则判断与栈顶元素的优先级高于栈顶元素优先级直接入栈低于或等于栈顶优先级栈顶元素出栈并输出为后缀…

Wpf消息循环之消息传递

几天遇见一个问题需要检查某个wpf程序是否已经运行,如果没有运行则启动传递参数,如果已运行则需要直接传递消息。在没有运行 情况下传递参数很简单,我们只需要Process cmd窗口启动并传递参数,在程序中处理。但是如果程序已经启动有…

【Qt】使用sqlite3数据库时,主键自增和获取自增后的主键的

创建数据表格,设置主键自增 创建数据库时,启用主键自增加特性 Create table testTable (id INTEGER PRIMARY KEY AUTOINCREMENT,。。。。 注意事项:设置主键自增时(AUTOINCREMENT),主键类型必须是INTEGER&…

拿下斯坦福和剑桥双offer,00后的算法学习之路

董文馨,00后,精通英语,西班牙语。斯坦福大学计算机系和剑桥大学双Offer,秋季将进入斯坦福大学学习。10岁开始在国外上学;12岁学Scratch;13岁学HTML & CSS;14岁开始学Python & Java&…

Mybatis【配置文件】就是这么简单

配置文件和映射文件还有挺多的属性我还没有讲的,现在就把它们一一补全 映射文件 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理sql语句 Statement的实际位置…

cto denalil

Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。 系统可以运行上千虚拟机。Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。转载于:https://blog.51cto.c…

Redis学习笔记 - 数据类型与API(1)Key

Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令含义时间复杂度keys查找所有符合给定模式 pattern 的 keyO(N), N 为数据库中 key 的数量dbsize计算key的总数O(1)exists检查key是否存在O(1)del删除指定的key-valueO(1)exp…

【Qt】enum和QString的相互

使用Q_ENUM注册enum Q_ENUM使用元对象系统meta-object来注册,因此在enum所在的类中必须包含宏Q_OBJECT或者Q_GADGET。 例子如下 class MyClass : public QObject{Q_OBJECTpublic:MyClass(QObject *parent = 0);~MyClass();enum Priority { High, Low, VeryHigh, VeryLow };Q_…

Gmail全球大规模宕机

整理 | 非主流出品 | AI科技大本营(ID: rgznai100)今天(3 月 13 日),Google 的多项服务在全球范围内出现了不同程度的宕机,包括 Gmail、Google Drive、 Hangouts、谷歌地图等。受影响最大的是拥有超 10 亿用…