MySQL 编写脚本时如何避免烦人的警告

有客户在编写前期数据库安全规范时,就如何更安全的在 Linux Shell 端操作 MySQL 这一块,让我们帮忙出一份详尽的说明文档。其中有一项内容就是如何在 Linux Shell 下调用 MySQL 各种命令行工具时屏蔽掉烦人的告警信息输出,诸如下面这样:

root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -e "select version()"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| version() |
+-----------+
| 8.0.29 |
+-----------+

其实这是一个非常古老的问题!百度随便一搜,各种解决方法都有,但都写的不是很完善。

这样的告警信息对命令执行结果的输出非常不友好,那么我们如何屏蔽掉它?下面我来罗列下几种我能想到的方法,以供参考。

1、给用户空密码(不推荐)

给用户赋予空密码虽然可以屏蔽掉警告信息,但是极不安全,类似于 MySQL 服务初始化时的 –initialize-insecure 选项。

root@ytt-ubuntu18:/home/ytt# mysql -u ytt_no_pass -e "select user()"
+-----------------------+
| user() |
+-----------------------+
| ytt_no_pass@localhost |
+-----------------------+

2、配置文件不同块加入用户名密码(不推荐)

MySQL 的配置文件有 my.cnf、mysql.cnf、mysqld.cnf 等等,只要在这些配置文件里的不同块下添加对应的用户名和密码即可。

root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\d:\v>
user=ytt
password=root
port=3340
[mysqldump]
user=ytt
password=root
port=3340

[mysqladmin]
user=ytt
password=root
port=3340

以上 [mysql] 块下的内容表示对 mysql 命令行生效,[mysqldump] 块下的内容表示对 mysqldump 工具生效,[mysqladmin] 块下的内容表示对 mysqladmin 工具生效。或者写简单点,统一加到 [client] 里,表示对所有客户端生效。注意只能把共享的部分内容加到这里。

root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\d:\v>
[client]
user=ytt
password=root
port=3340

由于这些块都是针对客户端设置,不需要重启 MySQL 服务,可立即生效。

root@ytt-ubuntu18:/home/ytt# mysql -e "select user()"
+---------------+
| user() |
+---------------+
| ytt@localhost |
+---------------+

3、设置 MySQL 环境变量(不推荐)

MySQL 有一些内置环境变量,对所有客户端生效。官方的环境变量列表如下:https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html给当前用户设置所需的环境变量,之后再调用命令行工具即可。比如设置密码环境变量 MYSQL_PWD 、传统 TCP 端口环境变量 MYSQL_TCP_PORT 等。

root@ytt-ubuntu18:/home/ytt# export MYSQL_PWD=root MYSQL_TCP_PORT=3340 

root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select user()"
+---------------+
| user() |
+---------------+
| ytt@localhost |
+---------------+

此方法也不推荐使用,环境变量 MYSQL_PWD 容易被其他用户获取。比如直接用 ps 命令就可以轻易获取 MYSQL_PWD 的值。

用户1执行如下命令:

root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select sleep(1000)"

用户2执行 ps aex 就可以打印出环境变量 MYSQL_PWD 和 MYSQL_TCP_PORT 的值:

root@ytt-ubuntu18:/home/ytt# ps aex| grep MYSQL_PWD| grep -v 'grep'
7592 pts/0 S+ 0:00 mysql -uytt -e select sleep(1000) LS_COLORS=rs=0:... MYSQL_PWD=root ...MYSQL_TCP_PORT=3340 ...

4、屏蔽标准错误输出内容,重定向到空设备文件(推荐)

root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -P3340 -e"select version()"  2>/dev/null
+-----------+
| version() |
+-----------+
| 8.0.29 |
+-----------+

这里利用 Linux 系统本身的特性来重定向 MySQL 错误信息,其中数字2代表错误输出的文件描述符;/dev/null 代表空设备。也就是说把执行这条命令的错误信息重定向到空设备而不是标准输出,这样就可以变相的把警告信息屏蔽掉。5、使用 mysql_config_edit 工具生成不同的 login_path (推荐)

mysql_config_edit 是 MySQL 官方发布的一款工具,专门处理这类必须暴露用户密码的问题,可以进行一次设置,多次安全使用。

使用方法如下:设置一个 login_path ,名字为 user_ytt ,密码按提示输入即可。

root@ytt-ubuntu18:/home/ytt# mysql_config_editor set -G user_ytt -S /var/run/mysqld/mysqld.sock -u ytt -p
Enter password:

接下来,调用任何 MySQL 命令行工具只需要带上 –login-path 选项即可使用。

root@ytt-ubuntu18:/home/ytt# mysql --login-path=user_ytt -e 'select user()'
+---------------+
| user() |
+---------------+
| ytt@localhost |
+---------------+

root@ytt-ubuntu18:/home/ytt# mysqladmin --login-path=user_ytt ping
mysqld is alive

mysql_config_editor 工具也有一个缺点:同样的 login_path 不能分享给所有系统用户,其他用户得重新添加自己的 login_path 才能正常使用。6、使用 Unix socket 插件(推荐,仅限本地)

auth_socket 插件只根据本地 OS 登录用户名和本地 linux socket 文件来授权认证。比如修改用户 ytt@localhost 插件为 auth_socket :

mysql> alter user ytt@localhost identified with auth_socket ;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

切换到 OS 用户 ytt :

root@ytt-pc-big:/home/ytt# su ytt

ytt@ytt-pc-big:~$ mysql -e "select user(),current_user()"
+---------------+----------------+
| user() | current_user() |
+---------------+----------------+
| ytt@localhost | ytt@localhost |
+---------------+----------------+

这里需要提醒一句:为了安全,操作 MySQL 的用户权限一定要做到按需分配。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/282352.html<

(0)
管理的头像管理
上一篇2025-05-13 10:28
下一篇 2025-05-13 10:29

相关推荐

  • 弹性云服务器到底是什么意思怎么收费,多少钱一个月

    弹性云服务器(Elastic Cloud Server,ECS)是一种可随时调整计算资源的云服务器,收费方式以按需付费和包年包月为主,用户只需为实际使用的资源买单,什么是弹性云服务器弹性云服务器本质上是一台运行在云端、配置可以灵活调整的虚拟机,它不像物理服务器那样固定规格,你可以在业务高峰期快速增加CPU、内存……

    2026-07-26
    0
  • 黑洞解封到底是什么意思,需要多久才能恢复

    黑洞解封是指将被黑洞路由策略屏蔽的IP地址恢复正常通信的过程,恢复时间通常取决于攻击流量是否彻底停止,多数情况下在攻击停止后10分钟到24小时内自动解除,用户也可通过联系服务商手动加速解封,黑洞解封到底是什么用拟人化的方式理解,黑洞就是网络世界的“强制隔离区”,当某个IP地址遭遇大量异常流量,比如DDoS攻击……

    2026-07-26
    0
  • 站群服务器IP段怎么选最安全,有哪些注意事项

    选择站群服务器IP段的安全核心在于IP地址的独立性、机房的路由策略以及服务商的合规资质,一个可靠的IP段必须来自持牌自营机房,具备独立C段和清洗能力,才能避免被关联风险,为什么IP段选择决定站群安全搜索引擎对IP关联的识别算法近年来越来越精细,同一C段或广播域的IP,爬虫通过反向DNS、路由跳数等特征很容易判断……

    2026-07-26
    0
  • 企业上云到底有什么实际好处,企业上云怎么选云服务商

    企业上云最大的实际好处,是把传统的机房运维包袱转化为可按需购买的专业服务,让企业成本更可控、业务更敏捷、安全更合规,成本重构:从买硬件到买服务传统企业自建机房,一次性投入大量资金购买服务器和网络设备,还得预留资源应对业务高峰,平时这些资源可能闲置浪费,上云之后,计算资源变成像水电一样按量付费的运营支出,告别资源……

    2026-07-26
    0
  • 流量清洗的工作原理到底是什么,有什么作用?

    流量清洗本质上是实时识别并过滤攻击流量,只将干净流量放行至目标服务器,是DDoS防护体系中的核心环节,为什么需要流量清洗近年来,DDoS攻击的规模和频率持续攀升,据行业报告,攻击带宽已轻松突破T级,攻击手法从单一的流量型攻击向应用层攻击演变,传统的防火墙或入侵检测系统在面对海量攻击流量时,往往自身先被耗尽,导致……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注