序号 | 注意事项 | |
1 | 如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。 | |
2 | 用set password语句来修改用户的密码,三个步骤,先“mysql u root”登陆数据库系统,mysql> update mysql.user set password=password(’newpwd’)”,最后执行“flush privileges”就可以了。 | |
3 | 需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,对所有的连接、查询、其他操作使用基于ACL即访问控制列表的安全措施来完成,也有一些对SSL连接的支持。 | |
4 | 除了root用户外的其他任何用户不允许访问MySQL主数据库中的user表;加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库。 | |
5 | 用grant和revoke语句来进行用户访问控制的工作。 | |
6 | 不使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码。 | |
7 | 不选用字典中的字来做密码。 | |
8 | 采用防火墙来去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在DMZ区域中。 | |
9 | 从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不能允许从非信任网络中访问数据库服务器的3306号TCP端口,因此需要在防火墙或路由器上做设定。 | |
10 | 为了防止被恶意传入非法参数,例如where ID=234,别人却输入where ID=234 OR 1=1导致全部显示,所以在web的表单中使用”或”"来用字符串,在动态URL中加入%22代表双引号、%23代表井号、%27代表单引号。 | |
11 | 在传递数据给MySQL时检查一下大小。 | |
12 | 应用程序需要连接到数据库应该使用一般的用户帐号,只开放少数必要的权限给该用户。 | |
13 | 在各编程接口(C C++ PHP Perl Java JDBC等)中使用特定‘逃脱字符’函数。 | |
14 | 在因特网上使用mysql数据库时一定少用传输明文的数据,而用SSL和SSH的加密方式数据来传输。 | |
15 | 学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump l i eth0 w src or dst port 3306 | strings。 |
16 | 不使用到表的联结符号,选用的参数 –skipsymboliclinks。 | |
17 | 确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限。 | |
18 | 不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器。 | |
19 | file权限不付给管理员以外的用户,防止出现load data ‘/etc/passwd’到表中再用select 显示出来的问题。 | |
20 | 如果不相信DNS服务公司的服务,可以在主机名称允许表中只设置IP数字地址。 | |
21 | 使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数。 | |
22 | grant语句也支持资源控制选项。 | |
23 | 碰到Error 1045(28000) Access Denied for user ‘root’@'localhost’ (Using password:NO)错误时,你需要重新设置密码,具体方法是:先用–skipgranttables参数启动mysqld,然后执行 mysql u root mysql,mysql>update user set password=password(’newpassword’) where user=’root’;mysql>Flush privileges;,最后重新启动mysql就可以了。 |
常见问题FAQs
Q1: 如何通过SSH隧道安全地连接到MySQL服务器?
A1: 你可以使用SSH隧道来加密客户端和服务器之间的连接通信,具体步骤如下:
1、创建SSH隧道:在你的客户端机器上运行以下命令:
```bash
ssh L 3307:localhost:3306 user@remote_server
```
这条命令会将所有指向本地机器3307端口的流量通过SSH隧道转发到远程服务器上的3306端口。
2、配置客户端连接:在客户端应用程序中,将数据库连接配置为指向本地的3307端口(即通过SSH隧道转发后的端口)。
Q2: 如何在MySQL中设置复杂的密码?
A2: 在MySQL中设置复杂密码可以通过以下步骤实现:
1、登录MySQL:首先以root用户身份登录MySQL:
```bash
mysql u root p
```
2、更新用户密码:选择要更新密码的用户并设置新密码,假设我们要更新用户myuser
的密码:
```sql
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'new_complex_password!';
```
或者使用SET PASSWORD
命令:
```sql
SET PASSWORD FOR 'myuser'@'localhost' = PASSWORD('new_complex_password!');
```
3、刷新权限:确保更改立即生效:
```sql
FLUSH PRIVILEGES;
```
通过以上步骤,你可以设置一个复杂且安全的密码来保护MySQL用户账户。
MySQL数据库的23个特别注意事项
1、字符集与校对规则:
确保选择正确的字符集和校对规则,以支持所需的国际化数据。
2、存储引擎的选择:
根据应用需求选择合适的存储引擎(如InnoDB、MyISAM等)。
3、索引优化:
合理设计索引,避免过度索引,确保索引的使用效率。
4、避免全表扫描:
通过合理使用索引和查询优化来减少全表扫描。
5、查询优化:
使用EXPLAIN来分析查询,优化查询语句。
6、备份与恢复:
定期进行数据库备份,并确保备份的可用性。
7、权限管理:
严格控制数据库用户的权限,遵循最小权限原则。
8、存储空间管理:
监控数据库文件大小,及时调整存储空间。
9、数据一致性:
确保事务的ACID特性,特别是在使用InnoDB存储引擎时。
10、锁机制:
了解并合理使用MySQL的锁机制,避免死锁。
11、事务隔离级别:
根据应用需求选择合适的事务隔离级别。
12、字符集转换:
避免在数据库层面进行复杂的字符集转换。
13、性能监控:
使用性能监控工具监控数据库性能,及时发现并解决问题。
14、慢查询日志:
开启慢查询日志,定期分析慢查询,优化性能。
15、数据分区:
对于大型数据表,考虑使用分区来提高查询效率。
16、使用预编译语句:
使用预编译语句可以提高性能,并减少SQL注入的风险。
17、避免使用SELECT:
尽量避免使用SELECT *,只选择需要的列。
18、避免在数据库中存储大量文本数据:
对于大量文本数据,考虑使用外部存储,如全文搜索引擎。
19、数据类型选择:
根据数据的特点选择合适的数据类型,避免不必要的空间浪费。
20、避免使用函数在WHERE子句中:
尽量避免在WHERE子句中使用函数,这会阻止索引的使用。
21、合理使用触发器:
触发器可能会影响性能,应谨慎使用。
22、使用外键约束:
外键约束可以保证数据的一致性,但也要注意其对性能的影响。
23、备份与恢复策略:
制定详细的备份与恢复策略,确保在数据丢失时能够快速恢复。
注意事项对于确保MySQL数据库的稳定、高效运行至关重要,在实际操作中,应根据具体情况进行调整和优化。