MySQL 開啓與關閉遠程訪問

MySQL 開啓與關閉遠程訪問
(1)通過MySQL用戶去限制訪問

權限系統目的:

MySQL基於安全考慮root賬戶一般只能本地訪問,但是在開發過程中可能需要打開root的遠程訪問權限,今天介紹的就是如何開啓和關閉Mysql遠程訪問

MySQL權限系統的主要功能是證實連接到一臺給定主機的用戶,並且賦予該用戶在數據庫上的SELECT、INSERT、UPDATE和DELETE權限。 附加的功能包括有匿名的用戶並對於MySQL特定的功能例如LOAD DATA INFILE進行授權及管理操作的能力。

權限系統原理:

MySQL權限系統保證所有的用戶只執行允許做的事情。當你連接MySQL服務器時,你的身份由你從那兒連接的主機和你指定的用戶名來決定。連接後發出請求後,系統根據你的身份和你想做什麼來授予權限。

MySQL在認定身份中考慮你的主機名和用戶名字,是因爲幾乎沒有原因假定一個給定的用戶在因特網上屬於同一個人。例如,從office.com連接的用戶joe不一定和從elsewhere.com連接的joe是同一個人。MySQL通過允許你區分在不同的主機上碰巧有同樣名字的用戶來處理它:你可以對joe從office.com進行的連接授與一個權限集,而爲joe從elsewhere.com的連接授予一個不同的權限集。

階段1:服務器檢查是否允許你連接。 階段2:假定你能連接,服務器檢查你發出的每個請求。看你是否有足夠的權限實施它。例如,如果你從數據庫表中選擇(select)行或從數據庫刪除表,服務器確定你對錶有SELECT權限或對數據庫有DROP權限。 如果連接時你的權限被更改了(通過你和其它人),這些更改不一定立即對你發出的下一個語句生效。MySQL權限是保存在cache中,這個時候就你需要執行
flush privileges;

開啓遠程訪問:

- 更新用戶
use mysql;

update user set host = "%" where user = "root";

flush privileges;

- 添加用戶
use mysql;

insert into user(host, user, password) values("%", "root", password("yourpassword"))

grant all privileges on *.* to 'root'@'%' with grant option #賦予任何主機訪問數據庫權限

flush privileges;

關閉遠程訪問:
use mysql;

update user set host = "localhost" where user = "root" and host= "%";

flush privileges;

查看用戶權限:
use information_schema;

select * from user_privileges;

查看當前mysql用戶:
use mysql;

select user, host from user;

更新用戶:
update mysql.user set password=password('新密碼') where User="phplamp" and Host="localhost";

flush privileges;

刪除用戶:
DELETE FROM user WHERE User="phplamp" and Host="localhost";

flush privileges;

user host指定方法:
Host值可以是主機名或IP號,或’localhost’指出本地主機。
你可以在Host列值使用通配符字符“%”和“_”。
host值’%’匹配任何主機名,空Host值等價於’%’。它們的含義與LIKE操作符的模式匹配操作相同。例如,’%’的Host值與所有主機名匹配,而’%.mysql.com’匹配mysql.com域的所有主機。

ip地址例子:
192.0.0.0/255.0.0.0(192 A類網絡的任何地址)
192.168.0.0/255.255.0.0(192.168 A類網絡的任何地址)
192.168.1.0/255.255.255.0(192.168.1 C類網絡的任何地址)
192.168.1.1(只有該IP)

mysql doc:

http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
(2)通過IpTable

iptables是一款防火牆軟件。它在Ubuntu系統中是默認安裝的。通常情況下,iptables隨系統一起被安裝,但沒有對通信作任何限制,因此防火牆並沒有真正建立起來。

iptables幫助:
sudo iptables -h #下面全部使用root用戶調用指令

查看iptables:
iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

可以看到,上面規則都是空的

允許已建立的連接接收數據:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

開放指定的端口:

接下來,我們可以嘗試開放 ssh 22端口,告訴iptables允許接受到所有目標端口爲22的tcp報文通過
iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT

執行上面的命令,一條規則會被追加到INPUT規則表的末尾(-A表示追加)。根據這條規則,對所有從接口eth0(-i指出對通過哪個接口的報文運用此規則)接收到的目標端口爲22的報文,iptables要執行ACCEPT行動(-j指明當報文與規則相匹配時應採取的行動)。

開放80端口:
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT

這時,你再次去看看規則表中內容,你會發現有
iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www

通過上述命令,我們已經代開了SSH和web服務的相應的端口,但由於沒有阻斷任何通信,因此所有的報文都能通過,所以接下來,我們就可以嘗試阻斷3306 mysql端口

阻斷通訊:
iptables -A INPUT -p tcp -i eth0 --dport 3306 -j DROP

通過這樣指令,就可以阻斷任何訪問3306報文,但是這樣就有一個問題,就是可能連我們自己信任的主機都無法訪問mysql了,所以,我們需要編輯下iptables,添加特定允許訪問的主機
iptables -I INPUT 4 -p tcp -s ip_address -i eth0 --dport 3306 -j ACCEPT

好了,通過上面,我們把該指令插入到規則表裏第四行,然後允許特定ip訪問3306端口

Logging記錄:

如果希望被丟失的報文記錄到syslog中,最簡單的方法可以這樣做:
iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

保存設置:

機器重啓後,iptables中的配置信息會被清空。您可以將這些配置保存下來,讓iptables在啓動時自動加載,省得每次都得重新輸入。iptables-save和iptables-restore 是用來保存和恢復設置的。

先將防火牆規則保存到/etc/iptables.up.rules文件中
iptables-save > /etc/iptables.up.rules

然後修改腳本/etc/network/interfaces,使系統能自動應用這些規則(最後一行是我們手工添加的)。
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.up.rules

當網絡接口關閉後,您可以讓iptables使用一套不同的規則集。
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-restore < /etc/iptables.down.rules

技巧(Tips):

大多數人並不需要經常改變他們的防火牆規則,因此只要根據前面的介紹,建立起防火牆規則就可以了。但是如果您要經常修改防火牆規則,以使其更加完善,那麼您可能希望系統在每次重啓前將防火牆的設置保存下來。爲此您可以在/etc/network/interfaces文件中添加一行:
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章