2012-04-04 117 views
-1

當我嘗試連接到本地MySQL數據庫,我從以下三種方法獲得不同的結果MySQL連接問題:提供密碼

  1. 當我從提示以下連接它的工作原理:

    的mysql -u根-p

這樣提示我輸入密碼,一旦輸入我連接。

  1. 它適用於我連接PHP並提供服務器(本地主機),用戶名(root)和密碼。 。

  2. 它,當我用PHP連接到運行如下命令不起作用:。

    EXEC( '的mysql -P 3306 -u根-p' $密碼 '數據庫名稱<' $ scriptfilename);

當我在第一行提供密碼時,我也無法從提示符中找到它。

當我查詢用戶root mysql.user表中有3項:

根@ :: [email protected] 根@本地

有錯誤我供應的時候得到在同一行中的密碼是:

ERROR 1045(28000):訪問被拒絕的用戶 '根' @ '本地主機'(使用密碼:是)

有人知道發生了什麼事嗎?

+0

你可以嘗試呼應了EXEC(串),並將其粘貼到一個bash shell來檢查它是否有效 – dhchen 2012-04-04 15:38:49

回答

1

如果您的密碼中包含特殊字符的shell會解釋,除非你逃脫它們,否則你會遇到問題。例如,很多標點符號會導致問題,例如!,>,<,|等等。

一般來說,如果你可以幫忙的話,不要把密碼放在命令行上!

引述MySQL的5.3.2.2. End-User Guidelines for Password Security文件:

使用-pyour_pass或--password = your_pass的選項在命令行上。

這很方便但不安全,因爲您的密碼對系統狀態程序(例如ps可能會被其他用戶調用以顯示命令行)變得可見。

的另一種選擇是存儲在只有培訓相關用戶可以讀取文件的密碼,並使用客戶端配置文件:

Store中的選項文件的密碼。

[client] 
password=your_pass 

然後在命令行是:

mysql --defaults-file=/path/to/file_with_password 
+0

密碼確實包含特殊字符,並且一旦更改爲安全/安全密碼,在需要的地方不需要轉義字符,並且效果很好。謝謝。 – 2012-04-05 03:06:32

+0

您可以將密碼存儲在一個文件中(某處安全!)並使用它,而不是讓您的密碼更加複雜。這樣,任何可以列出正在運行的進程的人都不會看到密碼!我會用更多信息更新答案。 – Cylindric 2012-04-05 08:39:55

1

只需添加主機參數如下:

exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename); 
+0

我試着這同樣的結果。由於某種原因,當我在同一行提供密碼時,它不起作用。 – 2012-04-04 15:42:03

0

你可以嘗試使用--password =而非-p,我發現它更可靠

+0

感謝您試圖提供幫助,但最終導致使用造成問題的特殊字符。 – 2012-04-05 03:07:49

相關問題