2012-04-19 148 views
47

我一直在使用SQL Server,現在正在使用MySQL作爲項目。使用SQL Server,如果我們的開發人員知道主機,用戶名和密碼,就可以連接到本地計算機上的遠程數據庫。與MySQL,不過,給從本地機器上開發者訪問,我一直有登錄到MySQL和執行:允許所有遠程連接,MySQL

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges; 

哪裏address是開發人員的機器的IP地址。當然,如果他們改變網絡,我必須再次執行它。有沒有辦法像我曾經使用SQL Server一樣允許所有的遠程連接,或者出於某種原因這是一個壞主意?我們有用戶名和密碼仍然..我顯然有點困惑。

另外:這是一個開發數據庫,​​只能從我們的內部網絡訪問。我明白爲什麼讓每個人都能訪問生產數據庫是一個壞主意。

+0

嗨。我有同樣的問題,並做了所有建議的命令,但我無法訪問遠程訪問。請幫幫我。 – 2017-05-24 19:01:24

回答

114

正如指出的瑞恩以上,你需要的命令是

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

但是,請注意,文件表明,爲了使這項工作,從localhost另一個用戶帳戶必須爲同一用戶創建;否則,由mysql_install_db自動創建的匿名帳戶優先,因爲它具有更具體的主機列。

換句話說;爲了使用戶user能夠從任何服務器連接; 2個帳戶都必須創建如下:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

閱讀完整的文檔here.

而這裏的參考相關片:

連接到服務器的根目錄後,您可以添加新帳戶。該 下面的語句使用GRANT來設置四個新賬戶:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'admin'@'localhost'; 
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 
mysql> CREATE USER 'dummy'@'localhost'; 

這些語句創建的賬戶有以下 屬性:

其中兩個賬戶有蒙蒂的用戶名和密碼 some_pass。這兩個帳戶都是具有完全權限的超級用戶帳戶 可以做任何事情。只有當從本地主機連接 時,才能使用'monty'@'localhost'帳戶。 'monty'@'%'帳戶使用'%' 通配符作爲主機部分,所以它可以用於從任何 主機連接。

有必要有兩個賬戶monty能夠連接 從任何地方作爲monty。如果沒有本地主機帳戶, mysql_install_db創建的localhost的 匿名用戶帳戶優先於monty從 本地主機連接。因此,monty將被視爲匿名用戶。 原因是匿名用戶帳戶具有比'monty'@'%'帳戶更多的 特定主機列值,因此在用戶表排序順序中更早地出現 。 (user表排序第6.2.4節中討論 ,「訪問控制,階段1:連接覈實」。)

這似乎是愚蠢的,我必須我誤解這一點。

+0

完美工作。謝謝! – 2012-04-19 20:51:33

10
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

將允許特定用戶從任何地方登錄。

這很糟糕,因爲它刪除了一些安全控制,即如果一個帳戶被泄密。

+2

希望我也能接受你的。謝謝! – 2012-04-19 20:51:23

+2

我不得不做的另一件事是TCP綁定接口。由於我必須連接到託管在雲中的mysql實例,因此我在/etc/mysql/my.cnf中更改了「bind-address = 0.0.0.0」,默認值爲127.0.0.1,其中mysql僅偵聽本地環回接口並且不接受來自外部網絡的呼叫。 – 2013-08-10 14:21:26

+0

我一直在努力弄清楚如何連接任何和這些soltuions只是幫助我解決了最初的問題。非常感謝,但我遇到了另一個問題。 我試圖將端口號從80更改爲8080.現在,當我使用http:// servername:8080/mysite時,它會快速恢復爲http:// servername/mysite給出404 - 文件或目錄未找到錯誤。我如何使它與端口8080一起工作? 偉大的東西 – Kenny 2018-02-05 16:27:14

18

您可以通過編輯/etc/my.cnf中禁用所有的安全性:

[mysqld] 
skip-grant-tables 
+0

不錯的一個!謝謝! :) – Adrian 2014-05-22 19:34:10

+0

我喜歡這個! – adbarads 2014-07-15 15:55:13

2

另外你需要禁用以下配置文件行: 綁定地址127.0.0.1 =

1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%' 
3

安裝和設置mysql以遠程連接遠程

不適用於mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

在Ubuntu上,使用安裝MySQL:

sudo apt-get install mysql-server 

剛剛在/etc/mysql/my.cnf

[mysqld] 
#### Unix socket settings (making localhost work) 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 

#### TCP Socket settings (making all remote logins work) 
port   = 3306 
bind-address = 0.0.0.0 

登錄以下爲DB服務器從使用

mysql -u root -p

使用以下語句創建數據庫用戶

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’; 

打開防火牆:

sudo ufw allow 3306 

重啓MySQL

​​
+0

如果有的話,'授予*。*所有特權給'用戶名'@'%'由'密碼'標識;'......但無論如何不起作用 – 2017-06-26 10:49:56

+0

sudo ufw允許3306 這對我來說很神奇:) – 2017-10-21 17:26:01

+0

最完整的答案,謝謝! – 2018-01-06 12:28:22