mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全
对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解。
1. 严格控制操作系统账号和权限
在数据库服务器上要严格控制操作系统的账号和权限,在安装mysql时就要重视安全问题。
(1) 锁定mysql用户。
(2) 其它任何用户都采取独立的账号登录,管理员通过mysql专有用户管理mysql服务,或者通过 root su到mysql用户下进行管理。
(3) mysql用户目录下,除了数据文件目录,其它文件和目录属主都改为root。
我本地mysql服务器上数据目录,路径:datadir=/usr/local/mysql/data, 属主为mysql, 如下所示:
2. 尽量避免以root权限运行mysql
mysql安装完毕后,一般会将数据目录属主设置为mysql用户,而将mysql软件目录的属主设置为root。这样做的目的是当使用mysql用户启动数据库时,可以防止任何具有file权限的用户能够用root创建文件。而如果使用root用户启动数据库,则任何具有file权限的用户都可以读写root用户的文件。这样会做系统造成严重的安全隐患。
下面给mysql系统用户设置密码hsrjs*2018
使用系统用户mysql通过xshell连接到linux服务器,启动mysql成功,如下所示:
下面案例:试试test系统用户连接mysql服务,如果启动成功则有安全隐患,下面是启动失败。
下面案例:试试test系统用户访问data目录,如果访问成功则有安全隐患,下面是访问失败。
3. 防止dns欺骗
创建mysql用户时,user权限表的host可以指定域名或者ip地址, 但是如果指定域名,就可能带来如下安全隐患: 如果域名对应的ip址址被恶意修改,则数据库就会被恶意的ip地址进行访问,导致安全隐患(这里不再深入)。
二. 数据库层面安全
2.1 删除匿名账号
有些版本中,安装完mysql后,会自动安装一个账号, 在mysql5.7 里没有。
2.2 给root账号设置口令
有些版本中,安装完mysql后,root 默认口令为空, 在mysql 5.7中安装后有默认密码。
2.3 设置安全密码
密码的安全体现在以下两个方面:(1) 设置安全的密码,建议使用6位以上字母,数字,下画线和一些特殊字符组合而成的字符串。(2) 使用密码期间尽量保证使用过程安全,不被别人窃取。对于第二点,在使用密码时,日常工作中一般有几下几种方式。
a. 方法1 直接将密码写在命令行中,如下所示:
b. 方法2使用交互式输入密码,如下所示:
c. 方法3 将用户名和密码写在配置文件里面,连接的时候自动读取,比如应用连接数据库或者执行一些批处理脚本,对于这种方式,mysql提供了在my.cnf里配置,如下所示:
对于my.cnf配置文件要进行严格的权限控制(先改成mysql属主,再设置成600),如下:
[root@hsr ~]# chown -R mysql.mysql /etc/my.cnf
[root@hsr ~]# chmod /etc/my.cnf
[root@hsr ~]# ls -l /etc/my.cnf
-rw------- mysql mysql 10月 : /etc/my.cnf
-- 下面使用test系统用户查看,提示权限不够
[root@hsr ~]# su test
[test@hsr root]$ cat /etc/my.cnf
cat: /etc/my.cnf: 权限不够
以上三种方法,第1种方法最不安全,因为是明文。第2种方法安全,但要交互。第3种方便,但要将配置文件设置严格的存取权限。
2.4 只授予账号必须的权限
在很多情况下,DBA 为了方便,给用户all privileges权限,这个权限超过了一般应用需要的权限,比如drop_priv等,这些权限如果误操作,将会产生严重后果。
2.5 除root外,任何用户不应有mysql库user表的存取权限。
由于mysql中可以通过更改mysql数据库的user表进行权限的增加,删除,变更等操作,因此除了root以外,任何用户都不应该拥有对user表存取权限(select,update,insert,delete等),比如:在前面章节创建的z1@localhost用户,拥有了all privileges 权限,就能修改user表数据,如果修改了root用户密码,将导致root用户登录mysql失败。
2.6 不要把file, process,super权限授予管理员以处的账号
a. file权限主要作用是:(1)将数据库的信息通过select .. into outfile.. 写到服务器上有写入权限的目录下。(2)可以将有读权限的文本文件通过load data infile.. 命令写入数据库表,如果表中存放很重要的信息,对系统造成很大安全隐患。
b. process 权限能被用来执行“show processlist” 命令,查看当前所有用户执行查询的明文文本。
c. super权限能执行kill命令,终掉其它用户进程(SHOW PROCESSLIST的ID进程值)。
-- 例如kill掉进程11
SHOW PROCESSLIST
kill 11
2.7 drop table 命令并不收回以前的相关访问授权
drop表的时候,其它用户对此表的权限并没有被收回,这样导致重新创建同名的表时,以前其它用户对此表的权限会自动赋予,进而产生权限外流。因此在删除表时,要同时取消其它用户在此表的相应权限。
2.8 使用ssl
ssl 是(secure socket yayer安全套接字层)是一种安全的传输协议,用于保障在internet上数据传输的安全。要使用ssl转输,需要先运行mysql_ssl_rsa_setup生成证书,配置my.cnf,重启服务,配置mysql用户(这里不在深入)。
-- 判断是否启用ssl
SHOW GLOBAL VARIABLES LIKE 'have_%ssl';
2.9 最好给每个用户加上访问ip限制
在创建用户的时候,可以指定user表host字段的ip或者hostname, 只有符合授权的ip或者hostname才可以进行数据库访问。
2.10 其它
(1) skip-grant-tables
在忘记密码时,可以在my.cnf中加入skip-grant-tables,mysql用户登录后,在设置新密码。这个功能在mysql 开发进阶篇系列 29 数据库二进制包安装中有讲到。skip-grant-tables是个选项是使服务器不使用权限系统,给每个mysql用户完全访问所有数据库的权力。能过执行 mysqladmin flush-privileges或 mysqladmin reload或flush privileges语句,可以让一个正在运行的服务器再次开始使用授权表。
(2) 查看mysql密码安全级别(不同版本不兼容,设置可以报错,具体查看错误日志)
可以在my.cnf中设置 validate_password_policy=LOW | MEDIUM | STRONG
SHOW VARIABLES LIKE 'validate_password_policy'
mysql 开发进阶篇系列 55 权限与安全(安全事项 )的更多相关文章
- mysql 开发进阶篇系列 53 权限与安全(账号管理的各种权限操作 上)
一. 概述 在了解前两篇的权限系统介绍后,这篇继续讲账号的管理,这些管理包括账号的创建,权限更改,账号删除等.用户连接数据库的第一步都是从账号创建开始. 1. 创建账号 有两种方法可以用来授权账号: ...
- mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...
- mysql 开发进阶篇系列 52 权限与安全(系统四个权限表的粒度控制关系)
一.概述 接着上篇的权限介绍,当用户进行连接的时候,权限表的存取过程有以下两个阶段: (1) 先从user表中的host,user, authentication_string 这3个字段中判断连接的 ...
- mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )
一.概述 mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限.下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和 ...
- mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...
- mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...
- mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...
- mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
随机推荐
- gitlab简介与配置
版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么 ...
- [总结]给pcDuino v2编译Linux kernel
1.版本问题 推荐选择pcdunio提供的官方的kernel. 当然可以选用www.github.com/linux-sunxi 中的kernel,不过有很多驱动都用不了包括arduino. 我尝试了 ...
- S系统的不好的实践
多个项目 多个分支放在一个SVN里边维护,导致多股力量并行开发时候的代码覆盖的风险可能性很大,, 好的实践是维护独立的SVN,彼此分离开来
- eclipse遇到启动报an error has occurred see the log file错
错误: 修改eclipse安装目录下比如D:\eclipse\configuration\.settings\org.eclipse.ui.ide.prefs, 删除 RECENT_WORKSPACE ...
- tp5 数据库
连接数据库: 在config下面的database.php里. 查找数据: halt(Db::name('studys')->column('name','age')); 也可以用find fi ...
- boost--文件、目录操作
filesystem库是文件系统操作库,可以使用其中的basic_path类用来操作目录.文件,使用需要包含编译好的system库和filesystem库,我们一般不直接使用basic_path,而是 ...
- 日期类时间类,日期时间类,单例模式,装箱与拆箱,数字类随机数,BigDecimal总结
1.日期类,时间类,日期时间类 初步日期使用方法及格式转换方法(旧方法): 格式://Mon Jul 30 11:26:05 CST 2018 年月日时分秒 CST代表北 ...
- Office Web addin 踩坑计:替换后台网站为MVC框架时遇到的问题
Office Web Addin 模板程序的后台本质上是一个网站,你在调试的时候可以发现它的进程是一个32位的IE进程 所以可以把它替换成Asp.net的网站. 替换方法: 1.点击WordRevie ...
- TCP的客户端搭建
一.设计目标 之前已经写过了TCP服务器原理及通过visual studio 验证 SOCKET编程:搭建一个TCP服务器,这里我们搭建一个TCP客户端界面并对各功能进行实现.设计效果如下: 二.实验 ...
- ubuntu+apache2设置访问、重定向到https
环境:ubunt14裸机,apache2,php5 条件:证书(部分商家买域名送一年),域名,为了方便均在root用户下进行的 web目录:/var/www/test 证书目录(自建):/etc/ap ...