MySQL
  • MySQL安全配置之MySQL权限安全

    1. 设置仅管理员用户具有所有数据库的访问权限 安全说明 除了管理员账号,其他用户没必要有所有数据库的访问权限。过高的权限会导致安全问题。 检查方法 mysql> SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y'); +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | root | localhost | +------------------+-----------+ mysql> SELECT user, host FROM mysql.db WHERE db = 'mysql' AND ((Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y')); Empty set (0.00 sec) 如果返回的都是管理员账号说明安全,否则需要对用户清除权限 配置方法 清除非管理员账号的过高部分权限   2. 禁用非管理员用户的“File_priv” 安全说明 File_priv权限用于允许或禁止MySQL用户在服务器主机上读写文件。黑客很可能利用这一点盗取数据库中敏感数据。 检查方法 mysql> select user, host from mysql.user where File_priv = 'Y'; +------+-----------+ | user | host | +------+-----------+ | root | % | | root | localhost | +------+-----------+ 如果返回的都是管理员账号说明安全,否则需要对用户清除权限 配置方法 mysql> REVOKE FILE ON *.* FROM '<user>’; //<user>为需要撤销权限的用户 回退步骤 mysql> GRANT FILE ON *.* TO user@localhost; //<user>为需要增加权限的用户 ……

    SE_Gao 2024-03-06
    68 0 0
  • MySQL安全配置之文件系统权限

        1. 设置“datadir”的权限 安全说明 如果允许MySQL用户以外的其他用户从数据目录中读取文件,那么该用户可能能够从包含密码的mysql.user表中读取数据。 配置方法 使用如下命令 chmod 700 <datadir> chown mysql:mysql <datadir> 回退步骤   chmod 775 <datadir>     2. 设置“log-bin”二进制日志文件的权限 安全说明 log-bin就是binary log,即二进制日志文件,这个文件记录了mysql所有的dml操作。限制二进制日志文件的权限将有益于保护数据信息不泄漏,或被恶意修改。 检查方法 执行sql查看log-bin日志文件状态及相关配置 mysql> show variables like "log_bin%"; +---------------------------------+-------------------------------+ | Variable_name | Value | +---------------------------------+-------------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql/data/binlog | | log_bin_index | /data/mysql/data/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------------------------------+ 检查日志文件的权限是660并且属于mysql:mysql 配置方法 chmod 660 <file_name> chown mysql:mysql <file_name> 备注 8.0版本默认情况下已开启binlog,文件权限为640,所属mysql:mysql     3. 设置“log_error”错误日志文件的权限 安全说明 错误日志记录了MySQL Server每次启动和关闭的详细信息以……

    SE_Gao 2024-03-05
    20 0 0
  • 【MySQL】:超详细MySQL完整安装和配置教程

    一. MySQL数据库 1.1 版本 官方: https://www.mysql.com/ MySQL官方提供了两种不同的版本: 社区版本(MySQL Community Server) 免费, MySQL不提供任何技术支持 商业版本(MySQL Enterprise Edition) 收费,可以使用30天,官方提供技术支持 本篇博客所讲述的是MySQL的社区版-MySQL Community Server 8.0.26的下载安装 1.2 下载 下载地址:https://downloads.mysql.com/archives/installer/ 需要安装包的小伙伴可以私信“MySQL”领取。 1.3 安装 要想使用MySQL,我们首先先得将MySQL安装好,下面的步骤,一步一步的完成MySQL的安装。 双击官方下来的安装包文件 根据安装提示进行安装 安装MySQL的相关组件,这个过程可能需要耗时几分钟,耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 配置 安装好MySQL之后,还需要配置环境变量,这样才可以在任何目录下连接MySQL。 A. 在此电脑上,右键选择属性 B. 点击左侧的 “高级系统设置”,选择环境变量 C. 找到 Path 系统变量, 点击 “编辑” D. 选择 “新建” , 将MySQL Server的安装目录下的bin目录添加到环境变量 启动停止 MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,我们无需手动启动了。 当然,也可以手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令: 1 net start mysql80 2 net stop mysql80 注意 : 上述的 mysql80 是我们在安装MySQL时,默认指定的mysql的系统服务名,不是固定的,如果未改动,默认就是mysql80。 1.4 客户端连接 **方式一:**使用MySQL提供的客户端命令行工具 **方式二:**使用系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] [-P 3306] -u root -p 参数: -h : MySQL服务所在的主机IP -P : MySQL服务端口号, 默认3306 -u : MySQL数据库用户名 -p : MySQL数据库用户名对应的密……

    SE_Gao 2024-03-05
    12 0 0
  • MySQL安全配置之操作系统级配置

      1. 禁用MySQL命令历史记录 安全说明 在linux /UNIX上,mysql客户机将交互式执行的语句记录到一个历史文件中。默认情况下,该文件在用户的主目录中名为.mysql_history。大多数在mysql客户机应用程序中运行的交互式命令都保存到历史文件中。应该禁用mysql命令历史记录。 配置方法 如果存在.mysql_history,则删除它。 使用下面两种方法来防止它再次被创建: a. 将mysql_histfile环境变量设置为/dev/null.这将需要放在shell的启动脚本中。 配置环境变量 vi ~/.bashrc 添加如下配置: export MYSQL_HISTFILE=/dev/null 修改完后,保存退出,执行如下命令,使更改生效 source ~/.bashrc b. 创建$HOME/mysql_history作为/dev/null的链接。 ln -s /dev/null $HOME/.mysql_history   2. 禁用MYSQL_PWD环境变量 安全说明 MYSQL_PWD是一种用于存储mysql密码的环境变量,以明文形式存储mysql密码,存在安全隐患。 检查方法 检查MYSQL_PWD环境变量是否存在于某个进程中: grep MYSQL_PWD /proc/*/environ 如果有返回行说明那个进程使用了MYSQL_PWD环境变量。 配置方法 不设置环境变量或确保MYSQL_PWD环境变量未设置敏感信息,对使用MYSQL_PWD环境变量变量的脚本和进程,建议不再使用该环境变量。   3. 禁用MySQL操作系统账号登陆 安全说明 MySQL系统账号在安装完数据库后,不应该有其他用途。建议禁止该账号登陆操作系统。此举在防止黑客利用MySQL数据库漏洞反射shell有极佳效果。 检查方法 假设MySQL数据库操作系统账号就是mysql,执行下列命令: getent passwd mysql | egrep "^.*[ \ /bin\ / false| \ / sbin \ / nologin]$" 如果没有返回行则说明存在安全隐患。 配置方法 执行下列语句禁止mysql用户(如hadoop)登陆: usermod -s /sbin/nologin hadoop 回退步骤 usermod -s /bin/bash hadoop  

    SE_Gao 2024-03-04
    9 0 0
  • mysql日志中的时间和系统时间不一致问题

    show variables like '%log_time%'; UTC是世界统一时间,而我现在的系统为北京时间是东八区,比UTC早了8个小时,所以这里设置为SYSTEM 在[mysqld]下增加:log_timestamps=SYSTEM

    SE_Gao 2024-03-01
    12 0 0
  • mysql8 配置密码问题 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

      mysql8.0配置了新的安全策略所以配置密码是和5.7是不一样的。 首先,我们先按照他的要求配置一个符合的密码,如'FGsd_jfdlaflk455-+'就是那种自己记不住级别就行了。 然后使用命令 //如果没有先配好root的密码,使用初始密码是无法查看对应的参数的。 SHOW VARIABLES LIKE 'validate_password%';   然后修改参数 set global validate_password.policy=0; set global validate_password.length=1; 然后修改自己的密码变成简单的密码就可以。 ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword'; 生产环境建议还是使用复杂点的密码,避免自己的数据泄露出去。  

    SE_Gao 2024-02-29
    46 0 0
  • MySQL之thread cache

    从status根据thread关键字可以查出如下是个状态 show global status like 'thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 57 | | Threads_connected | 1268 | | Threads_created | 31715 | | Threads_running | 1 | +-------------------+-------+ Thread_cached:The number of threads in the thread cache Thread_connected:The number of currently open connections. Thread_created:The number of threads created to handle connections. Thread_running:The number of threads that are not sleeping. 以上是这4个状态的含义,thread_connected等于show processlist,thread_running代表真正在运行的(等于1一般就是这个show status命令本身),thread_cached代表mysql管理的线程池中还有多少可以被复用的资源,thread_created代表新创建的thread(根据官方文档,如果thread_created增大迅速,需要适当调高thread_cache_size)。 我们先来实际看下这4个状态之间的直观关系。 从上面这个图,我们可以总结出来一个公式:running和其他三个状态关系不大,但肯定不会超过thread_connected (new_con-old_con)=create+(old_cache-new_cache) 从上面公式可以看出,如果create等于0,那么thread_connected减少的和thread_cached增加的相等,thread_connected增加的和thread_cached减少的相等。(其实这也就是thread_cached存在的意义,资源可以复用)   我们来看眼影响thread_cached的参数thread_cache_size How many threads the server should cache for reuse. When a client disconnects, the client's threads are put in the cache if there are fewer than thread_cache_size threads ……

    SE_Gao 2024-02-28
    15 0 0
  • MySQL open_tables和opened_tables

    一、本文涉及到的系统参数有3个: table_open_cache Server层参数。 这个参数表示针对所有threads的table cache总和,5.6.7之前默认是400,5.6.8之后是2000。 这是个server层的参数,mysql不支持并行查询,mysql的会话也没有PGA的概念,一个thread引用myisam表时需要在server层上创建一个table对象(索引也需要创建一个但是是共享的,self join会创建2个,分区表每个分区按单表对待),如果同时多个会话引用一个表也会创建多个表对象,虽然会加大内存使用量,但是却极大的减少了内部表锁的争用。 这个值的数目建议设置为max_connections*你的表数目,当然你可能也需要为一些临时表等对象预留,但是这个数目已经足够大啦。 那么mysql什么时候释放这些表对象呢? 当缓冲已满,而连接想要打开一个不在缓冲中的表时。 当缓冲数目已经超过了table_open_cache设置的值,mysql开始使用LRU算法释放表对象。 当你用flush tables;语句时。 open_files_limit 引擎层参数。 这个参数表示mysqld可用的最大文件描述符数目,如果你遇到“Too many open files”的错误,应当考虑加大它。这个参数的默认值是0表示无限制(大于5.6.7后默认值不再为0,参考官网),但其实他的值是与操作系统相关的,在Unix系统下这个值的数目不能大于ulimit -n。 这个参数应当大于等于table_open_cache。 目前不清楚当设置了innodb_open_files后此参数是指所有存储引擎的句柄数限制,还是非innodb的句柄数限制,需要研究源码才可以理清,这里暂且认为是前者。 innodb_open_files 引擎层参数。 这个参数只对InnoDB存储引擎有效,它指定了mysql可以同时打开的最大.ibd文件的数目。这个参数即不影响table_open_cache也不受open_files_limit影响,是独立的只对InnoDB有效的。所以在默认为InnoDB存储引擎时可以不考虑open_files_limit只去设inn……

    SE_Gao 2024-02-27
    42 0 0
  • mysql状态分析之show global status

      1. 慢查询 show variables like '%slow%'; +---------------------------+---------------------------------------+ | Variable_name | Value | +---------------------------+---------------------------------------+ | log_slow_admin_statements | OFF | | log_slow_slave_statements | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /export/data/mysql/log/slow-query.log | +---------------------------+---------------------------------------+ show global status like '%slow%'; +---------------------+---------+ | Variable_name | Value | +---------------------+---------+ | Slow_launch_threads | 1351 | | Slow_queries | 1012685 | +---------------------+---------+ 打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小,另mysql有自带的命令mysqldumpslow可进行查询,例下列命令可以查出访问次数最多的20个sql语句   mysqldumpslow -s c -t 20 host-slow.log     2. 连接数 经常会遇见”MySQL: ERROR 1040: Too manyconnections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小: show variables like 'max_connections'; +-----------------+-……

    SE_Gao 2024-02-26
    18 0 0
  • MySQL查看数据库及表容量大小并排序

    查看所有数据库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc;   查看所有数据库各表容量大小 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc;   查看指定数据库容量大小 查看your_table_name表 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='your_table_name'; 查看指定数据库各表容量大小 查看your_table_name表 select table_schema as '数据库', table_name as '表名', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables where table_schema='your_table_name' order by data_length desc, index_length desc;  

    SE_Gao 2024-02-23
    25 0 0