mysql 逃兵筆記
有關資料庫系統, 我是大外行; 不過在 Linux 下, 很多工具都需要用到 mysql, 例如各種 wiki 軟體, 與各種 blog 軟體等等, 因此不得不學一點簡單的 mysql 指令。 這篇筆記主要是為和我一樣的讀者寫的: 並不想認真學 mysql, 只是想知道一些基本設定。
安全第一
不知為什麼, mysql 剛安裝好時, 卻採用非常不安全的設定 -- 最強大的 root 帳號, 竟然完全沒有密碼。 這一節先簡單查看剛安裝好的 mysql, 並且設定好 root 帳號的密碼。
首先, mysql 的帳號/密碼, 與 shell 底下的帳號密碼 無關。 為了方便起見, 如果用 shell 的 ckhung 帳號登入, 進入 mysql 時又不指定帳號, 則內定也是使用 mysql 的 ckhung 帳號; 不過其實只要知道密碼, shell 的任何使用者都可以使用 mysql 的任何帳號。 首先請用 非 root 帳號 (以下假設用 ckhung) 登入 shell, 我們要看看內建的設定有多麼不安全。
- 執行
mysql指令試著進入 mysql, 結果出現類似如下的錯誤訊息: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) - 從另外一個終端機 用 root 帳號 進入 shell, 啟動 mysql
伺服器:
service mysqld start或/etc/rc.d/init.d/mysqld start - 回到剛剛的 ckhung 視窗, 再執行一次
mysql, 成功進入。 - 在 mysql 內, 下
\h救助, 發現可以下\s查詢系統狀態。 注意兩個欄位: current user 是 ckhung@localhost ; 而 current database 則是空白。 - 下
show databases;看到有 test 一個資料庫可以用, 便use test(注意這裡不必有分號), 並再次下\s, 發現 current database 欄位變成 test。 - 下
\q或按 ^d 離開 mysql, 回到 shell 底下。 - 從 shell 底下, 執行
mysql -u root竟然毫不設防地就成功進入! 用\s確認一下 current user 是 root@localhost 。 - 這次再
show databases;看到三個資料庫, 其中的 mysql 就是 mysql 的系統資料庫, 重要的系統資料都放在這裡。 - 下
use mysql切換到系統資料庫, 並下show tables;看到十幾個 tables 表格, 其中有一個 table 叫做 user。 - 下
select * from user;發現螢幕太亂了, 改下select Host,User,Password from user;只顯示三個 fields 欄位。 注意現在所有人的密碼都是空的。 - 再按 ^d 離開 mysql, 回到 shell 底下。
剛剛都只是查看而已; 以下則是重點, 要把 mysql 最主要的幾個安全漏洞封鎖起來:
- 再執行
mysql -u root重新進入 mysql。 - 再看一次有那些帳號:
select Host,User,Password from mysql.user;注意這次因為並未先下過use指令指定資料庫, 所以每次提及任何 table 名稱時, 必須連姓帶名把資料庫名稱與表格名稱完整寫出。 - 刪除 (兩個) 「具有 root 權限的匿名帳號」:
delete from mysql.user where User=''; - 設定 (兩個) root 帳號的密碼:
update mysql.user set Password=password('不要照抄') where User='root';這裡的 '不要照抄' 當然要改成你自己的密碼。 - 檢查看看是否更改成功:
select Host,User,Password from mysql.user;看到現在 Password 欄位不再是空白。 為什麼出來的數字跟剛才打的密碼不同? 因為已經經過上面的 password 函數加密。 - 不過現在只是資料庫更新而已, 還沒有真的反應到系統裡面,
不信開另外一個終端機視窗 (叫做 B 視窗好了), 再用
mysql -u root一樣可以進去。 - 回到原先的終端機視窗 (叫做 A 視窗好了), 下
flush privileges;再從 B 視窗再試著連線一次, 果然失敗。 - 這次要用
mysql -u root -p連線, 並且會被詢問密碼, 然後就可以登入。
一些常識
資料檔放在那裡? /var/lib/mysql/ 包含密碼檔也放這裡。
一般要用到 mysql 的套件, 可能會問以下問題:
- 資料庫名稱?
- mysql 的用戶名稱?
- 資料表格名稱前面統一加的字串?
這三個東西, 都可以任意自訂, 也未必要相同。 以 xoops 為例, 資料庫名稱可以是 xoops_db, 用戶名稱可以是 xoops_admin, 資料表格名稱前面統一加的字串可以是 xoops_ 。 不過我自己為了容易記憶 (如果你管很多部電腦, 每部電腦都裝很多需要使用 mysql 的套件, ...) 通常前兩者都用套件名稱 (例如 xoops); 第三項則用套件名稱加底線 (例如 xoops_)
建立帳號, 建立資料庫
例一: xoops
比方說要安裝 xoops 吧。 以下指令建立一個專門給 xoops 使用的帳號:
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON xoops.* TO
'xoops'@'localhost' IDENTIFIED BY '不要照抄';
然後按 ^d 離開 mysql, 回到 shell 底下; 再重新用 xoops
的帳號登入: mysql -u xoops -p 進入 mysql 之後, 下
create database xoops; 於是大功告成。
例二: mediawiki
mediawiki 也用到 mysql。 最簡單的方式是: 把 mysql 的 root 帳號密碼填入 mediawiki 的設定選單當中, 讓它自己去建立它需要的資料庫。
附帶一提: ConfirmEdit
擴充套件安裝後, 除了照文件設定之外, 還需要把
$wgCaptchaTriggers['edit'] = false; 這句的 false 改為
true 才會生效。
相關文章
- 本頁最新版網址: http://people.ofset.org/~ckhung//b/sa/mysql.php; 您所看到的版本: October 29 2008 09:39:10.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。
![[rss feed 圖案]](/~greg/i/rss.png)
![[帶頭升級 Office 2007? 別當害群之馬]](/~greg/i/n7/no-office2007.png)
![[(力求維持) 符合 xhtml 1.0]](/~greg/i/vxhtml10.png)
