欢迎投稿

今日深度:

MySQL安全配置(1)(2)

2.10 尽量避免通过 symlinks 访问表

不要允许使用表的符号链接。(可以用--skip-symbolic-links 选项禁用)。如果 你

用 root 运行 mysqld 则特别重要,因为任何对服务器的数据目录有写访问权限的人

则能够删除系统中的任何文件!

2.11 防止 DNS 欺骗

如果你不信任你的 DNS,你应该在授权表中使用 IP 数字而不是主机名。在任何情况下,你应该非常小心地使用包含通配符的主机名来创建 授权表条目!

2.12 DROP TABLE 命令并不收回以前的相关访问授权

drop 表的时候,其他用户对此表的权限并没有被收回,这样导致重新创建同名的表时,以前其他用户对此表的权限会自动赋予,导致权限外流。

因此,要在删除表时,同时取消其他用户在此表上的相应权限。

2.13 REVOKE 命令漏洞

grant all privileges on *.* to guest@localhost; 后

revoke all privileges on *.* from guest@localhost; 不起作用,必须针对每个数据单独使用 revoke

2.14 如果可能,给所有用户加上访问 IP 限制

给所有用户加上 ip 限制将拒绝所有未知的主机进行的连接,保证只有受信任的主

机才可以进行连接。例如:

Grant select on dbname.* to ‘username’@’ip’ identified by ’passwd’;

2.15 严格控制操作系统帐号和权限

在数据库服务器上要严格控制操作系统的帐号和权限,比如:

锁定 mysql 用户

其他任何用户都采取独立的帐号登陆,管理员通过普通用户管理 mysql;或者通过 root su到 mysql 用户下进行管理。

禁止修改 mysql 用户下的任何资源

2.16 增加防火墙

购买防火墙。这样可以保护你防范各种软件中至少 50%的各种类型的攻击。把MySQL放到防火墙后或隔离区(DMZ)

2.17 严格模式

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2.18 限制MYSQL的访问目录

--chroot

2.19 防止在连接MYSQL是使用TCP/IP套接字

--skip-networking

2.20 防止连接到MYSQL数据库时使用主机名

--skip-name-resolve

2.21 防止没有SHOW DATABASES权限的用户使用此命令

--skip-show-database

2.22 如果对user表没有INSERT权限,可以防止这些用户通过GRANT命令创建用户

--safe-user-create

3 其他安全配置

MySQL 本身带有一些选项,适当的使用这些选项将会使数据库更加安全。

3.1 使用 skip-network

在网络上不允许 TCP/IP 连接,所有到数据库的连接必须由命名管道 (Named Pipes) 或共享内存(Shared Memory) 或 UNIX 套接字 SOCKET 文件进行。这个选项适合应用和数据库共用一台服务器的情况,其他客户端将无法通过网络远程访问数据库,大大增强了数据库的安全性,但同时也带来了管理维护上的不方便。 MySQL 仅能通过命名管道或共享内存 ( 在 widows 中 ) 或 Unix 套接字文件 ( 在 Unix 系统中 ) 来和客户端连接交互。以下为配置实例:

skip-networking

-S 是 --socket 的简写形式,如: -s /tmp/mysql.sock,而其值必须和服务端设置的相同

--protocol 是严格指定连接类型,如果一些设置使用默认值时,如windows下服务器端设置--socket=mysql(mysql是默认值),在连接时指定 --protocol=pipe 后 --socket=mysql 可省略指定。

1. 命名管道

只适合在 Windows 系统下用来连接本机的 MySQL ,性能可比一般的TCP/IP方式提升30%~50%。

服务端设置要求

enable-named-pipe #或 named_pipe=ON

socket=MySQL

客户端连接

mysql --protocol=pipe --socket=mysql

2. 共享内存

4.1版本后,mysql对windows系统还提供了共享内存方式的连接

服务端设置要求

shared-memory=ON

shared_memory_base_name=MYSQL

客户端连接

mysql --protocol=memory --shared-memory-base-name=mysql

3. UNIX套接字

linux和unix环境下,可以使用unix域套接字,来连接同在一台机器上的mysql;

服务端设置要求

socket=/tmp/mysql.sock

客户端连接

mysql --protocol=socket --socket=/tmp/mysql.sock

3.2 allow-suspicious-udfs

该选项控制是否可以载入主函数只有 xxx 符的用户定义函数。默认情况下,该选项被关闭,并且只能载入至少有辅助符的 UDF。这样可以防止从未包含合法 UDF 的共享对象文件载入函数。

3.3 old-passwords

强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时,为了保证兼容性这很有用。

3.4 safe-user-create

如果启用, 用户不能用 GRANT 语句创建新用户,除非用户有 mysql.user 表的 INSERT

权限。如果你想让用户具有授权权限来创建新用户,你应给用户授予下面的权限:

mysql> GRANT INSERT(user) ON mysql.user TO 'user_name '@'host_name';

这样确保用户不能直接更改权限列,必须使用 GRANT 语句给其它用户授予该权限。

3.5 secure-auth

不允许鉴定有旧(pre-4.1)密码的账户

3.6 skip-grant-tables

这个选项导致服务器根本不使用权限系统。这给每个人以完全访问所有的数据库的权力!(通过执行 mysqladmin flush-privileges 或 mysqladmin reload 命令,或执行 FLUSH PRIVILEGES 语句,你能告诉一个正在运行的服务器再次开始使用授权表 。 )

3.7 skip-show-database

使用该选项,只允许有 SHOW DATABASES 权限的用户执行 SHOW DATABASES 语句,该

语句显示所有数据库名。不使用该选项,允许所有用户执行 SHOW DATABASES,但

只显示用户有 SHOW DATABASES 权限或部分数据库权限的数据库名。请注意全局权

限指数据库的权限。

3.8 使用 SSL

SSL ( Secure Socket Layer 安全套接字)是一种安全协议,最初由 Netscape 公司所开发,用以保障在Internet 上数据传输的安全 , 利用数据加密技术,可确保数据在网络上的传输过程中不会被截取。

应用场景,在主从数据库复制中使用,提供以下服务保障。

a) 认证用户和服务器,确保数据发送到正确的客户和服务器。

b) 加密数据以防止数据中途被窃取。

c) 维护数据的完整性,确保数据在传输过程中不被破坏。

在 MySql 中使用 SSL 进行安全传输,需要在命令行或选项文件中设置 ‘SSL’ 选项。下面以命令行为例,进行安装介绍。

A. 安装证书管理工具

a) 所需部件Win32OpenSSL-0_9_8g.exe ,可从网上下载

b) 安装 双击Win32OpenSSL-0_9_8g.exe 按提示进行安装。安装在C:\OpenSSL 目录下

c) 在C:\OpenSSL\bin 目录下创建root ,server ,client 三个子路径

d) 在创建证书时输入的用户名,密码请妥善保存

B. 创建根证书,并采用自签名签署它

a) 创建私钥 进入DOS 窗口,进入C:\OpenSSL\bin 路径,然后输入openssl genrsa -out root/root-key.pem 1024 命令,按Enter 键。

b) 创建证书请求 继续输入openssl req -new -out root/root-req.csr -key root/root-key.pem ,然后按Enter 键,要求输入一系列信息,可根据实际情况输入,但是CommonName :一定要输入root

c) 自签署根证书 继续输入openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650 ,然后按Enter 键

d) 查看根证书内容 要先进入证书所在路径 例:C:\OpenSSL\bin\root ,然后输入keytool -printcert -file root-cert.pem,然后按Enter 键。

C. 创建服务器证书,并采用根证书签署它

a) 创建私钥 进入DOS 窗口,进入C:\OpenSSL\bin 路径,然后输入openssl genrsa -out server/server-key.pem 1024 命令,按Enter 键。

b) 创建证书请求 继续输入openssl req -new -out server/server-req.csr -key server/server-key.pem ,然后按Enter键,要求输入一系列信息,可根据实际情况输入,但是CommonName :一定要输入localhost 或服务器的域名(存在域名情况下)。

c) 签署服务器证书 继续输入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 键。

d) 查看服务器证书内容 要先进入证书所在路径 例:C:\OpenSSL\bin\server ,然后输入keytool -printcert -file server-cert.pem ,然后按Enter 键。

D. 创建客户证书,并采用根证书签署它

a) 创建私钥 进入DOS 窗口,进入C:\OpenSSL\bin 路径,然后输入openssl genrsa -out client/client-key.pem 1024 命令,按Enter 键。

b) 创建证书请求 继续输入openssl req -new -out client/client-req.csr -key client/client-key.pem ,然后按Enter键,要求输入一系列信息,可根据实际情况输入,CommonName :输入用户ID 。

c) 签署客户证书 继续输入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 键。

d) 查看客户证书内容 要先进入证书所在路径 例: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 选项取消加密连接。




www.htsjk.Com true http://www.htsjk.com/shujukuaq/16967.html NewsArticle 2.10 尽量避免通过 symlinks 访问表 不要允许使用表的符号链接。(可以用--skip-symbolic-links 选项禁用)。如果 你 用 root 运行 mysqld 则特别重要,因为任何对服务...
评论暂时关闭