本文为博主原创,转载请注明出处:
1.
mysql 数据库在使用过程中,需要给服务提供连接和访问的权限,而不需要进行公网连接和访问,所以在安全环境和现网环境部署mysql 的时候,在没有公网权限的主机上进行部署,让服务通过内网的地址进行连接和访问;
部署在无公网的好处,可以避免了公网的攻击;MySQL只对内网开放
2. 使用独立用户运行msyql
绝对不要作为使用root用户运行MySQL服务器。这样做非常危险,因为任何具有FILE权限的用户能够用root创建文件(例如,~root/.bashrc)。mysqld拒绝使用root运行,除非使用–user=root选项明显指定。应该用普通非特权用户运行mysqld。正如安装过程一样,为数据库建立独立的linux中的mysql账户,该账户用来只用于管理和运行MySQL。
要想用其它用户启动mysqld,,增加user选项指定/etc/my.cnf选项文件或服务器数据目录的my.cnf选项文件中的[mysqld]组的用户名。
#vim /etc/my.cnf
[mysqld]
user=mysql
该命令使服务器用指定的用户来启动,无论你手动启动或通过mysqld_safe或mysql.server启动,都能确保使用mysql的身份。也可以在启动数据库加上user参数。
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
作为其它linux用户而不用root运行mysqld,你不需要更改user表中的root用户名,因为MySQL账户的用户名与linux账户的用户名无关。确保mysqld运行时,只使用对数据库目录具有读或写权限的linux用户来运行。
3.为不同业务创建不同的用户,并设置不同的密钥
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
添加用户,并设置用户登录密码;
且密码需要满足复杂度的要求:尽量并且不要使用固定密码,实行每个用户单独密码;长度在16位以上 ,包含大小写字母,数字,特殊符号等;且需要包含三种类型;
create user user_name@'ip' identified by 'user-password';
查看用户,ip 及 密钥
SELECT user, host, authentication_string FROM user;
4.指定mysql可访问用户ip和权限
Grant 【privileges】 ON databasename.tablename TO 'username'@'host';
参数说明:
1、privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL;
2、databasename:数据库名;
3、tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*。
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
查看mysql 可访问的用户,ip
SELECT user, host FROM user;
5. 防sql注入
永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
6. 线上操作
修改或删除数据前先备份,先备份,先备份(重要事情说三遍)
线上变更一定要有回退方案
7.架构
选择合适的高可用架构
8.其他
DDL操作要谨慎,对于大表的alter操作最好使用 pt-online-schema-change
具体可看这篇: https://www.cnblogs.com/zjdxr-up/p/15564339.html