首页 > 数据库 >Mysql 安全加固经验总结

Mysql 安全加固经验总结

时间:2022-09-18 22:01:21浏览次数:106  
标签:Mysql 用户 mysqld user mysql 加固 权限 root 经验总结

本文为博主原创,转载请注明出处:

目录   1.内网部署Mysql   2. 使用独立用户运行msyql   3.为不同业务创建不同的用户,并设置不同的密钥   4.指定mysql可访问用户ip和权限   5. 防sql注入   6. 线上操作   7.架构   8.其他

1.内网部署Mysql

  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

 

 

 

标签:Mysql,用户,mysqld,user,mysql,加固,权限,root,经验总结
From: https://www.cnblogs.com/zjdxr-up/p/16705962.html

相关文章

  • MySQL:互联网公司常用分库分表方案汇总!
    一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至......
  • MySQL列转行、行转列
    1795.每个产品在不同商店的价格列转行SELECTproduct_id,'store1'store,store1priceFROMproductsWHEREstore1ISNOTNULLUNIONSELECTproduct_id,'store2......
  • 配置MySQL的tab补全方法
    方法一####安装相关依赖软件(需要配置yum官方或者阿里源进行安装)```1yum-yinstallepel-release2yum-yinstallzlib-develbzip2-developenssl-develncurses......
  • MySQL基础架构:SQL查询语句执行过程
    MySQL是一种关系型数据库管理系统,采用的是分层结构,本文中将简单介绍MySQL数据库的内部架构。目录客户端层服务器层连接器查询缓存分析器优化器执行器存储层MySQL是一个C/......
  • Pymysql增删改查
    1、mysqlDDL(数据定义语言)、DML(数据操作语言)和DCL(数据控制语言)查看服务器版本selectversion();查看所有数据库。showdatabases;切换到指定数据库。usemysql;......
  • MySQL学习——DML操作(添加,更新,删除数据)
    本章将介绍MySQL中的DML操作1、添加数据(INSERT)1.1、插入语法结构:INSERTINTO表名(column1,column2,...)VALUES(value1,value2,....)上述插入是指定列......
  • linux mysql数据 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost
    在linux系统是输入命令: mysql-uroot-p输入密码后 提示 ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES):说明输入的密码是......
  • 【Mysql】事务的基本特性和隔离级别
    事务的基本特性ACID分别是:原子性(atomicity)指的是一个事务中的操作要么都成功,要么都失败。一致性(consistency)指的是数据库总是从一个一致性状态转移到另外一个一致性状态。......
  • MySQL的日志模块
    一、redologMySQL里经常说到的WAL技术,WAL的全称是Write-AheadLogging,它的关键点就是先写日志,再写磁盘。(“先写日志”也是先写磁盘,只是写日志是顺序写盘,速度很快......
  • 【MySQL】什么是Mysql执行计划
     执行计划是Mysql如何执行一条sql语句,包括sql查询顺序、是否使用索引、索引信息、查询命中率等信息。基本语法explainselect...InnoDb引擎的执行计划内容id:由一组......