平常開發網頁程式,大多是在伺服器本機端使用帳號密碼登入做處理,所以比較不會有甚麼問題,但是因為自己需要用到 Android 透過 JDBC 遠端登入 MySQL 伺服器的需求,結果出現了錯誤訊息。
先以 root 身分登入 MySQL 伺服器:
# mysql -u root -p
新增一個遠端 ( % ) 使用者 admin 密碼為 pw1234,並且設定權限給它,我這裡只開放 db 這個資料庫底下所有的資料表 ( db.* ) 的所有權限(ALL)給這個使用者使用:
mysql> CREATE USER 'admin'@'%' IDENTIFIED BY 'pw1234';
mysql> GRANT ALL PRIVILEGES ON db.* TO 'admin'@'%';
mysql> FLUSH PRIVILEGES;
--
要注意的是,我們這裡只有設定給遠端登入專用的使用者 admin,如果我們使用 admin 帳號在本機端登入,是看不到任何資料庫的,而且任何操作都是 Access denied(拒絕存取)
若有需要在本機端也進行操作,那就必須將以上指令為「%」的地方修改為 localhost,然後再重複執行以上指令。
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'pw1234';
mysql> GRANT ALL PRIVILEGES ON db.* TO 'admin'@'localhost';
mysql> FLUSH PRIVILEGES;
--
最後,我們還要設定一下防火牆的設定,把 MySQL 再使用的連接埠 3306 打開給外面的連線進來使用:
# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
新增上面對 3306 連接埠的監聽的那一行,然後重新啟動防火牆:
# /etc/init.d/iptables restart
這樣就可以從外部連入 MySQL 了!可以使用 WorkBench 或者其他遠端軟體登入試試看吧!
mysql> CREATE USER 'admin'localhost'%' IDENTIFIED BY 'pw1234';
回覆刪除mysql> GRANT ALL PRIVILEGES ON db.* TO 'admin'@'localhost';
mysql> FLUSH PRIVILEGES;
若有需要在本機端也進行操作,那就必須將以上指令為「%」的地方修改為 localhost,然後再重複執行以上指令。
此語法是否有錯
CREATE USER 'admin'localhost'%' IDENTIFIED BY 'pw1234';
謝謝
mail:taikey.taiwan@msa.hinet.net
不好意思,最近比較忙沒沒有上來看到留言。
刪除應該是 CREATE USER 'admin'@'localhost' IDENTIFIED BY 'pw1234';
感謝回報^^
好好的文章 ,謝謝 la
回覆刪除