我创建了一个 shell 脚本来连接到数据库并执行一些查询:
#/!bin/bash
...
...
mysql -h remote -u root --password='pw' MatchingDB
some SQL queries
我的问题是:此连接是否被视为安全连接,任何攻击者都可以嗅探我发送到远程数据库的任何查询或者更改我发送的查询吗?
答案1
是的,但不要在命令行上提供密码。当您在命令行开关中省略密码时,它将提示您输入密码。
例子
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 227743
Server version: 5.0.95 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
安全地处理您的密码
查看 MySQL 文档中的建议。该页面标题为:6.1.2.1 最终用户密码安全指南重点介绍各种方法并讨论每种方法的优缺点。
在讨论的选项中,您可能需要使用选项文件。
摘抄
将您的密码存储在选项文件中。例如,在 Unix 上,您可以在主目录中 .my.cnf 文件的 [client] 部分中列出您的密码:
[client] password=your_pass
为了保证密码安全,除了您自己之外,任何人都不能访问该文件。为了确保这一点,请将文件访问模式设置为 400 或 600。例如:
shell> chmod 600 .my.cnf shell> mysql --defaults-file=/home/francis/mysql-opts
从安全角度来看,讨论的所有方法都有其问题,但这可能是风险最小的,假设您正在运行这些方法的目录与具有特权访问权限的其他目录隔离。
使用保管库
如果您要做的工作就是我所说的“支持生产”安装,那么使用密码库确实是合适的机制。您可以在这篇名为以下的 MySQL 文章中阅读有关它们的更多信息:5.3.6 密码存储库。
在 Linux 下,特别是在 GNOME 下,您将使用 GNOMEgnome-keyring
守护程序。
参考
答案2
您可能应该为连接启用 SSL 支持。
要检查服务器是否mysqld
支持SSL
,请检查系统变量的值have_ssl
,
mysql> SHOW VARIABLES LIKE 'have_ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl | YES |
+---------------+-------+
如果值为是的,服务器支持SSL协议连接。如果值为禁用,服务器是有能力的支持 SSL 连接,但尚未开始使用适当的--ssl-xxx
选项来使用它们。
可能,检查来自这里关于如何设置支持 SSL 的 mysql 服务器。