访问
MySQL
数据库必须首先访问数据库的某个权限、即以某个权限模式用户的身份登录,大部分的安全管理主要通过模式用户的权限来实现。
MySQL
的相关权限信息主要存放在
grant
tables
的系统表中,即
mysql.User
、
mysql.db
、
mysql.Host
、
mysql.table_priv
和、
mysql.column_priv
表中,
MySQL
启动时装入内存。应尽量使用
GRANT
、
REVOKE
、
CREATE USER
及
DROP USER
来进行用户和权限的变更操作。
如
:GRANT
SELECT.UPDATE,DELETE,INSERT
,
EXECUTE ON test_shop.* TO ‘
test_guest
’@’localhost’;
查看某用户权限,如
SHOW GRANTS FOR 'test_guest'@'
localhost
'
数据文件是操作系统级的对象,因此一般来讲具有相当的脆弱性、而且依赖于操作系统的性能特点。由于磁盘介质的因素、一个大的数据文件上个别数据块的损坏可能导致整个数据文件的不可用,这对一个系统来说是灾难性的,而且大的表空间或数据文件的恢复是困难和耗时的。
巨大对象的分区在性能角度之外也有安全的因素,当磁盘错误使一个巨大表中一个单独的数据块不能读写时可能导致整个表不可用,必须恢复包含该表的整个表空间。
考虑到数据仓库问题。可以进行以下操作:
对数据量大且不进行写操作的表,使用
myisampack
工具,生成压缩、只读
MyISAM
表。可以压缩
40% -
50%
的表文件空间。具体操作如下:
A
压缩文件:
>myisampack
../data/music_shop/
表名
.MYI
B
重建索引:
>myisamchk -rq --sort-index
--analyze../data/test_shop/
表名
.MYI
C
强制
mysqld
使用新表:
> mysqladmin flush-tables
如果要进行写操作,可以解压缩一个压缩的表,恢复原有状态,使用
myisamchk
。
如:
myisamchk
--unpack ../data/music_shop/
表名
.MYI
最后,系统上线后,随着数据量的增加,会发现数据目录下的磁盘空间越来越下,造成安全隐患。可以采取两种措施。一种针对
MyISAM
存储引擎的表,在建表时分别指定数据目录和索引目录到不同的磁盘空间,而默认会同时放在数据目录下。另外一种针对
InnoDB
存储引擎的表,因为数据文件和索引文件在一起的,所以无法将它们分离。当磁盘空间不足时,可以增加一个新的数据文件,这个文件放在有充足空间的磁盘上。具体请查阅参数
innodb_data_file_path
设置。
A)、
建立主从数据库集群,采用
MySQL
复制
MySQL
复制的优点:
1
如果主服务器出现问题,可以快速切换到从服务器;
2
可以在从服务器上执行查询操作,降低主服务器的访问压力;
3
可以在从服务器上执行备份,以避免备份期间影响主服务器的;
应注意的问题:
由于实现的是异步的复制,所以主从服务器之间存在一定的差距。在从服务器上进行的查询操作要考虑到这些数据的差异,一般只有对实时性要求不高的数据可以通过从服务器查询。
B)、
定期备份文件与数据,通过各种方式保存文件与数据。
以下是几点防范的措施:
•
制定一份数据库备份
/
恢复计划,并对计划进行仔细测试。
•
启动数据库服务器的二进制变更日志,该功能的系统开销很小
(
约为
1%)
,我们没有理由不这样做。
•
定期检查数据表,防范于未燃。
•
定期对备份文件进行备份,以防备份文件失效。
•
把
MySQL
的数据目录和备份文件分别放到两个不同的驱动器中,以平衡磁盘
I/O
和增加数据的安全。
根据具体业务要求采取不同措施,目前暂不考虑。
有些版本的
MySQL
安装完之后会安装一个空账号(
User = ‘’
),此账号对
test
数据库有完全权限,为避免此账号登陆后,建立大表,占用磁盘空间,影响系统安全,建议删除(
mysql> drop user ‘’@’localhost’;
)
建议以一句话的拼音为口令。如
SET
PASSWORD=PASSWORD('woshiyitiaoyu')
并且限定只能通过
localhost
访问。
如:
Grant
select,insert,update,delete on tablename to ‘username’@’hostname’
2.4
除
root
外,任何用户不应有
mysql
库
user
表的存取权限
否则将可以通过修改
root
用户密码,获得高级别数据库权限。
2.5
不要把
file
、
process
、或
super
权限授予管理员以外的账号
会产生保密信息外泄,查看管理员执行的动作,普通用户执行
kill
命令等严重的安全隐患。
可以任意加载本地文件到数据库。
在
web
环境中,客户从
web
服务器连接,用户可以使用
LOAD DATA LOCAL
语句来读取
web
服务器进程有读访问权限的任何文件。
grant all privileges on *.* to
guest@localhost;
后
revoke all privileges on *.* from
guest@localhost;
不起作用,必须针对每个数据库单独使用
revoke
MySQL
本身带有一些选项,适当的使用这些选项将会使数据库更加安全。
在网络上不允许
TCP/IP
连接,所有到数据库的连接必须由命名管道
(Named Pipes)
或共享内存
(Shared Memory)
或
UNIX
套接字
SOCKET
文件进行。这个选项适合应用和数据库共用一台服务器的情况,其他客户端将无法通过网络远程访问数据库,大大增强了数据库的安全性,但同时也带来了管理维护上的不方便。
MySQL
仅能通过命名管道或共享内存
(
在
widows
中
)
或
Unix
套接字文件
(
在
Unix
系统中
)
来和客户端连接交互。以下为配置实例:
a)、
服务器上打开此选项(默认关闭)并重启
MySQL
服务
skip-networking
port
= 3306
……
b)、
远程客户端进行连接
G:\xampp\mysql\bin>mysql -h10.42.1.42 -p3306 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '10.42.1.42'
(10060)
……
c)、
关闭此选项后重启服务器
#skip-networking
port
= 3306
……
d)、
远程客户端进行连接
G:\xampp\mysql\bin>mysql -h10.12.1.42 -p3306 -uroot -p
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.41 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
SSL
(
Secure Socket
Layer
安全套接字)是一种安全协议,最初由
Netscape
公司所开发,用以保障在
Internet
上数据传输的安全
,
利用数据加密技术,可确保数据在网络上的传输过程中不会被截取。
应用场景,在主从数据库复制中使用,提供以下服务保障。
a)、
认证用户和服务器,确保数据发送到正确的客户和服务器。
b)、
加密数据以防止数据中途被窃取。
c)、
维护数据的完整性,确保数据在传输过程中不被破坏。
在
MySql
中使用
SSL
进行安全传输,需要在命令行或选项文件中设置
”SSL”
选项。下面以命令行为例,进行安装介绍。
安装证书管理工具
1.
所需部件
Win32OpenSSL-0_9_8g.exe
,可从网上下
载
。
2.
安装
双击Win32OpenSSL-0_9_8g.exe
按提示进行安装。安装在C:\OpenSSL
目录下。
3.
在C:\OpenSSL\bin
目录下创建root
,server
,client
三个子路径。
4.
在创建证书时输入的用户名,密码请妥善保存。
创建根证书,并采用自签名签署它
1.
创建私钥
进入DOS
窗口,进入C:\OpenSSL\bin
路径,然后输入openssl genrsa -out root/root-key.pem 1024
命令,按Enter
键。
2.
创建证书请求
继续输入openssl req -new -out
root/root-req.csr -key root/root-key.pem
,然后按Enter
键,要求输入一系列信息,可根据实际情况输入,但是CommonName
:一定要输入root
。
3.
自签署根证书
继续输入openssl
x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey
root/root-key.pem -days 3650
,然后按Enter
键。
4.
查看根证书内容
要先进入证书所在路径 例:C:\OpenSSL\bin\root
,然后输入keytool -printcert -file root-cert.pem
,然后按Enter
键。
创建服务器证书,并采用根证书签署它
1.
创建私钥
进入DOS
窗口,进入C:\OpenSSL\bin
路径,然后输入openssl genrsa -out server/server-key.pem 1024
命令,按Enter
键。
2.
创建证书请求
继续输入openssl
req -new -out server/server-req.csr -key server/server-key.pem
,然后按Enter
键,要求输入一系列信息,可根据实际情况输入,但是CommonName
:一定要输入localhost
或服务器的域名(存在域名情况下)。
3.
签署服务器证书
继续输入openssl
x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey
server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem
-CAcreateserial -days 3650
,然后按Enter
键。
4.
查看服务器证书内容
要先进入证书所在路径 例:C:\OpenSSL\bin\server
,然后输入keytool -printcert -file server-cert.pem
,然后按Enter
键。
创建客户证书,并采用根证书签署它
1.
创建私钥
进入DOS
窗口,进入C:\OpenSSL\bin
路径,然后输入openssl genrsa -out
client/client-key.pem 1024
命令,按Enter
键。
2.
创建证书请求
继续输入openssl
req -new -out client/client-req.csr -key client/client-key.pem
,然后按Enter
键,要求输入一系列信息,可根据实际情况输入,CommonName
:输入用户ID
。
3.
签署客户证书
继续输入openssl
x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey
client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem
-CAcreateserial -days 3650
,然后按Enter
键。
4.
查看客户证书内容
要先进入证书所在路径 例:C:\OpenSSL\bin\client
,然后输入keytool -printcert -file client-cert.pem
,然后按Enter
键。
完成以上步骤后,将所生成的证书root
、server
和client
文件夹,拷到C:\mysll
目录下。
至此,已部署完在启动服务器时所用的有关选项指明证书文件和密钥文件。在建立加密连接前,要准备三个文件,一个
CA
证书,是由可信赖第三方出具的证书,用来验证客户端和服务器端提供的证书。
CA
证书可向商业机构购买,也可自行生成。第二个文件是证书文件,用于在连接时向对方证明自已身份的文件。第三个文件是密钥文件,用来对在加密连接上传输数据的加密和解密。
MySQL
服务器端的证书文件和密钥文件必须首先安装,在
myssl
目录里的几个文件:
root-cert.pem(CA
证书
)
,
server-cert.pem(
服务器证书
)
,
server-key.pem(
服务器公共密钥
)
。
在主数据库创建从数据库操作所用的用户,并指定必须用SLL
认证。
CREATE USER 'test_guest'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON music_shop.* TO ' test_guest '@'10.12.1.42'
REQUIRE ssl;
关闭主数据库
>mysqladmin -uroot shutdown
重启服务器,使配置生效。
>mysqld--ssl-ca=C:\myssl\server\root-cert.pem
--ssl-cert=C:\myssl\server\server-cert.pem
--ssl-key=C:\myssl\server\server-key.pem
用从数据库客户程序建立加密连接。
>mysql -u
test_guest
--ssl-ca=C:\myssl\client\root-cert.pem
--ssl-cert=C:\myssl\client\client-cert.pem --ssl-key=C:\myssl\client\client-key.pem
配置完成后,调用
mysql
程序运行
\s
或
SHOW STATUS LIKE 'SSL%'
命令,如果看到
SSL:
的信息行就说明是加密连接了。如果把
SSL
相关的配置写进选项文件,则默认是加密连接的。也可用
mysql
程序的
--skip-ssl
选项取消加密连接。
分享到:
相关推荐
在进行MySQL安全配置之前,用户需要了解MySQL的不同版本及其安全更新政策。根据官方文档,MySQL版本分为开发版(如MySQL 5.5),它用于引入新功能;稳定版(如MySQL 5.1),它侧重于漏洞修复和维护稳定性;以及较旧...
MySQL 安全配置,大牛总结的安全经验,都是一线生产上的安全配置
MySQL安全配置是确保数据库系统稳定、可靠和安全的关键环节。本篇主要探讨了三个核心方面:数据安全访问管理、数据安全防范和容灾备份机制,以及安全隐患的规避。 1. 数据安全访问管理 MySQL的安全管理主要基于权限...
详解Mysql安全配置
MySQL安全配置文档资料.pdf
Mysql安全配置 前言 账户权限安全 数据的网络安全配置 密码策略安全 日志 数据库服务所在主机安全配置 部署SQL注入检测、防御模块 安全相关启动选项 备份策略 前言 数据库安全配置、或者...
MySQL安全配置详解.pdf 学习资料 复习资料 教学资源
MySQL安全配置向导`mysql_secure_installation`是一个用于增强MySQL服务器安全性的实用工具。它旨在帮助用户快速配置一些关键的安全设置,以确保数据库服务在生产环境中更加安全可靠。以下是该向导涉及的主要步骤...
人工评估(手工检查)是对工具评估的一种补充, 它不需要在被评估目标系统上安装任何软件,对目标系统的运行和状态...安全专家对各主机系统、服务器、业务系统、数据库以及各种应用服务器在内的目标系统进行人工评估。
MySQL数据库的安全配置是确保数据安全的关键环节,涵盖了用户权限管理、数据保护、容灾与备份等多个方面。在本文中,我们将深入探讨这些关键知识点。 首先,我们要理解的是MySQL的权限管理体系。MySQL通过权限表...
**3.1 MySQL安全配置检查表** - **安装方式**:推荐从Percona官方网站获取安装的二进制文件进行安装或者自行编译安装。当前推荐的版本为Percona Server 5.1.57-12.8。 - **安装目录设置**:MySQL的安装目录需与其它...
总之,这份手册为数据库管理员提供了一套全面的MySQL安全配置指南,涵盖了从操作系统级别到MySQL数据库内部设置的各个方面,帮助他们在部署和日常维护数据库时可以采取一系列措施以提高安全性,避免潜在的安全威胁。...
以下是 MySQL 数据库在 Ubuntu 系统上的安装和配置教程: ### 步骤 1: 安装 MySQL 1. 打开终端,并执行以下命令安装 MySQL 服务器:...### 步骤 4: MySQL 安全配置(可选) 1. 安装完成后,MySQL 提供了一个脚本来帮
"MySQL 安全配置和应用" MySQL 数据库已经成为当前网络中使用最多的数据库之一,特别是在 Web 应用上,它占据了中小型应用的绝对优势。这一切都源于它的小巧易用、安全有效开放式许可和多平台,更主要的是它与三大 ...
本文档将介绍MySQL数据库的安全配置,包括操作系统级别安全配置、文件系统权限安全配置、基本安全配置、权限安全配置、审计和日志安全配置以及身份认证安全配置等重要内容。 首先,需要确保MySQL安装在非系统分区上...
MySQL 使用SSL连接配置详解 在现代数据库管理中,安全性是至关重要的,SSL(Secure Sockets Layer)连接为MySQL提供了一种加密数据传输的方式,确保了客户端和服务器之间的通信不被窃听或篡改。本文将详细介绍如何...