自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL 編寫(xiě)腳本時(shí)如何避免煩人的警告

數(shù)據(jù)庫(kù) MySQL
資深數(shù)據(jù)庫(kù)專家,專研 MySQL 十余年。擅長(zhǎng) MySQL、PostgreSQL、MongoDB 等開(kāi)源數(shù)據(jù)庫(kù)相關(guān)的備份恢復(fù)、SQL 調(diào)優(yōu)、監(jiān)控運(yùn)維、高可用架構(gòu)設(shè)計(jì)等。目前任職于愛(ài)可生,為各大運(yùn)營(yíng)商及銀行金融企業(yè)提供 MySQL 相關(guān)技術(shù)支持、MySQL 相關(guān)課程培訓(xùn)等工作。

有客戶在編寫(xiě)前期數(shù)據(jù)庫(kù)安全規(guī)范時(shí),就如何更安全的在 Linux Shell 端操作 MySQL 這一塊,讓我們幫忙出一份詳盡的說(shuō)明文檔。其中有一項(xiàng)內(nèi)容就是如何在 Linux Shell 下調(diào)用 MySQL 各種命令行工具時(shí)屏蔽掉煩人的告警信息輸出,諸如下面這樣:

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 |
+-----------+

其實(shí)這是一個(gè)非常古老的問(wèn)題!百度隨便一搜,各種解決方法都有,但都寫(xiě)的不是很完善。

這樣的告警信息對(duì)命令執(zhí)行結(jié)果的輸出非常不友好,那么我們?nèi)绾纹帘蔚羲肯旅嫖襾?lái)羅列下幾種我能想到的方法,以供參考。

1、給用戶空密碼(不推薦)

給用戶賦予空密碼雖然可以屏蔽掉警告信息,但是極不安全,類似于 MySQL 服務(wù)初始化時(shí)的 --initialize-insecure 選項(xiàng)。

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 等等,只要在這些配置文件里的不同塊下添加對(duì)應(yīng)的用戶名和密碼即可。

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] 塊下的內(nèi)容表示對(duì) mysql 命令行生效,[mysqldump] 塊下的內(nèi)容表示對(duì) mysqldump 工具生效,[mysqladmin] 塊下的內(nèi)容表示對(duì) mysqladmin 工具生效?;蛘邔?xiě)簡(jiǎn)單點(diǎn),統(tǒng)一加到 [client] 里,表示對(duì)所有客戶端生效。注意只能把共享的部分內(nèi)容加到這里。

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

由于這些塊都是針對(duì)客戶端設(shè)置,不需要重啟 MySQL 服務(wù),可立即生效。

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

3、設(shè)置 MySQL 環(huán)境變量(不推薦)

MySQL 有一些內(nèi)置環(huán)境變量,對(duì)所有客戶端生效。官方的環(huán)境變量列表如下:https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html給當(dāng)前用戶設(shè)置所需的環(huán)境變量,之后再調(diào)用命令行工具即可。比如設(shè)置密碼環(huán)境變量 MYSQL_PWD 、傳統(tǒng) TCP 端口環(huán)境變量 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 |
+---------------+

此方法也不推薦使用,環(huán)境變量 MYSQL_PWD 容易被其他用戶獲取。比如直接用 ps 命令就可以輕易獲取 MYSQL_PWD 的值。

用戶1執(zhí)行如下命令:

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

用戶2執(zhí)行 ps aex 就可以打印出環(huán)境變量 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、屏蔽標(biāo)準(zhǔn)錯(cuò)誤輸出內(nèi)容,重定向到空設(shè)備文件(推薦)

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

這里利用 Linux 系統(tǒng)本身的特性來(lái)重定向 MySQL 錯(cuò)誤信息,其中數(shù)字2代表錯(cuò)誤輸出的文件描述符;/dev/null 代表空設(shè)備。也就是說(shuō)把執(zhí)行這條命令的錯(cuò)誤信息重定向到空設(shè)備而不是標(biāo)準(zhǔn)輸出,這樣就可以變相的把警告信息屏蔽掉。5、使用 mysql_config_edit 工具生成不同的 login_path (推薦)

mysql_config_edit 是 MySQL 官方發(fā)布的一款工具,專門(mén)處理這類必須暴露用戶密碼的問(wèn)題,可以進(jìn)行一次設(shè)置,多次安全使用。

使用方法如下:設(shè)置一個(gè) 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:

接下來(lái),調(diào)用任何 MySQL 命令行工具只需要帶上 --login-path 選項(xiàng)即可使用。

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 工具也有一個(gè)缺點(diǎn):同樣的 login_path 不能分享給所有系統(tǒng)用戶,其他用戶得重新添加自己的 login_path 才能正常使用。6、使用 Unix socket 插件(推薦,僅限本地)

auth_socket 插件只根據(jù)本地 OS 登錄用戶名和本地 linux socket 文件來(lái)授權(quán)認(rèn)證。比如修改用戶 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 的用戶權(quán)限一定要做到按需分配。

責(zé)任編輯:華軒 來(lái)源: 愛(ài)可生開(kāi)源社區(qū)
相關(guān)推薦

2023-01-09 15:16:17

2020-01-03 08:34:18

pandas代碼開(kāi)發(fā)

2023-05-20 17:45:25

LinuxShell

2017-08-18 09:05:50

2017-05-26 11:07:17

Android框架代碼

2014-12-31 09:24:32

PaaS故障切換算法IaaS

2019-07-23 09:56:11

ChromeFirefoxSafari

2025-02-05 11:30:00

單點(diǎn)故障MySQL數(shù)據(jù)庫(kù)

2016-12-20 12:42:28

MySQL腳本問(wèn)題

2016-10-08 20:58:50

awkLinux編寫(xiě)腳本

2014-03-04 09:55:26

密碼用戶體驗(yàn)

2024-03-08 17:54:44

MySQL函數(shù)數(shù)據(jù)

2011-08-22 09:44:02

云服務(wù)云計(jì)算宕機(jī)

2021-03-04 08:19:31

警告屏蔽函數(shù)

2017-04-13 10:51:17

Bash建議

2017-08-11 17:20:07

LinuxShell

2020-08-26 07:47:03

Node腳本鏡像

2016-04-08 09:24:01

脆弱代碼更新

2019-12-03 18:51:36

SQL數(shù)據(jù)庫(kù)MySQL

2021-09-08 14:47:53

UbuntuLinux服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)