2012-01-10 13 views
0

我正在編寫一個腳本來執行一些數據庫維護,並且MySQL不接受用戶名,我試圖通過它。MySQL在Linux上傳遞用戶名

我有一個名爲'abc_wpsites'的MySQL用戶和數據庫,以及名爲'abc_wpsitesdev'的用戶和數據庫。在這裏,我嘗試訪問abc_wpsitesdev,但是MySQL不斷嘗試使用帳戶'abc_wpsites'進行訪問。

abc.com [~]# mysql -uabc_wpsitesdev --password='(redacted)' -h localhost abc_wpsitesdev 
ERROR 1045 (28000): Access denied for user 'abc_wpsites'@'localhost' (using password: YES) 
abc.com [~]# mysql --user='abc_wpsitesdev' --password='(redacted)' -h localhost abc_wpsitesdev 
ERROR 1045 (28000): Access denied for user 'abc_wpsites'@'localhost' (using password: YES) 
abc.com [~]# mysql --user='abc_wpsitesfff' --password='(redacted)' -h localhost abc_wpsitesdev 
ERROR 1045 (28000): Access denied for user 'abc_wpsites'@'localhost' (using password: YES) 

請注意,每次試驗用戶名的嘗試都會導致試圖通過'abc_wpsites'帳戶訪問MySQL。關於這裏發生了什麼的任何想法?


另外,我要指出,我可以通過與相應的憑據(例如,通過MySQL的)等方法進行連接,所以這似乎是某種形式的問題,我的理解/ MySQL的CLI界面的操作。

+0

使用身份驗證插件/代理用戶也許? – piotrm 2012-01-10 01:27:21

+0

好想法 - 不幸的是,這是一個非常香草的用例(不使用任何插件/代理用戶)。非常奇怪! – rinogo 2012-01-10 01:28:38

回答

0

我不會建議以這種方式傳遞您的登錄信息。這意味着你的密碼是

  • 可見在PROCESSLIST(有些發行版的會篩選但是)
  • 它要麼存放在一個crontab或您的bash .history文件

在script.cnf而是創建文件不是世界可讀的。

內容看起來像

[client] 
user=abc_wspitesdev 
password=your_password 

更改您的命令行調用

的mysql --defaults文件= /路徑/到/ script.cnf -h本地主機abc_wpsitesdev MySQL的

編輯

你的其他評論說你可以作爲其他用戶連接。如果你有root用戶訪問這個數據庫運行

從mysql.users中選擇用戶,主機,passowrd;

比較與其他人無法合作的人。

存儲的密碼將是實際值的散列值。他們都是一樣的長度?如果其中一個明顯更長或更短,那麼密碼可能與4.x版和更早版本中使用的舊密碼散列方法一起存儲。

您嘗試連接的帳戶的主機是什麼?它是'本地主機'還是IP地址?如果這是你的IP地址,這可能是問題所在。由於您的命令行調用連接到本地主機,這將告訴它通過unix套接字(可能是/var/lib/mysql/mysql.sock)進行連接。 MySQL將這些連接與來自TCP堆棧的連接區分開來。

你可以或者在命令行上指定完整的(非127.0.0.1)的IP地址,如果這是像

的mysql -u等等-pblah -h 1.2.3的情況。4

+0

謝謝你的建議。你知道爲什麼會發生這種情況嗎?我擔心,即使我按照您的建議重寫我們的腳本以使用.cnf文件,也會發生同樣的問題。 – rinogo 2012-01-10 00:55:47

+0

如果您沒有在命令行中指定密碼,但讓它提示您輸入密碼,那麼您的登錄信息會被接受嗎? – atxdba 2012-01-10 00:58:38

+0

好主意;剛剛嘗試過。不。:/ – rinogo 2012-01-10 01:00:54

-1

伴您行問題

mysql -uabc_wpsitesdev --password='(redacted)' -h localhost abc_wpsitesdev 

是,你需要經過-u (-p後沒有空格)

這是我使用的形式的空間:

mysql -u abc_wpsitesdev -p(redacted) -h localhost abc_wpsitesdev 
+1

'-u'後面不需要空格。 – 2012-01-10 00:56:54

+0

不幸的是,這仍然不起作用。 MySQL命令適當地形成並且適用於其他用戶名,但不適用於此用戶名。 :/ – rinogo 2012-01-10 00:57:29

0

「Where」是用戶「abc_wpsitesdev」允許連接,而不是允許「abc_wpsites」用戶連接的地方 - 有什麼區別?

如果您確實「將abcwpsitedev的所有權限授予'thedevpassword'標識的'abc_wpsitesdev'@'%';」

從MySQL手冊:不會從本地主機從下面的手冊中的最後pargraph解釋後訪問工作

連接到服務器的根目錄後,您可以添加新的帳戶。以下聲明使用GRANT設置四個新帳戶:

mysql>授予所有特權 TO'monty'@'localhost' - > IDENTIFIED BY'some_pass'WITH GRANT OPTION;

mysql>在上授予所有特權。 TO'monty'@'%' - > IDENTIFIED BY'some_pass'WITH GRANT OPTION;

mysql> GRANT RELOAD,PROCESS ON TO'admin'@'localhost';

mysql> GRANT USAGE on TO'dummy'@'localhost';

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

其中兩個賬戶有蒙蒂的用戶名和密碼some_pass。這兩個帳戶都是擁有完全權限的超級用戶帳戶。 'monty'@'localhost'帳戶只能在從本地主機連接時使用。 'monty'@'%'帳戶在主機部分使用'%'通配符,因此可用於從任何主機進行連接。

有必要有兩個帳戶monty能夠從任何地方連接monty。如果沒有localhost帳戶,monty從本地主機連接時,由mysql_install_db創建的localhost的匿名用戶帳戶將優先。因此,monty將被視爲匿名用戶。原因是匿名用戶帳戶具有比'monty'@'%'帳戶更具體的主機列值,因此在用戶表排序順序中更早。 (用戶表格排序在第5.5.4節「訪問控制,第1階段:連接驗證」中討論。)

+0

這兩個數據庫對於可以允許連接的「哪裏」都是有意義的。 – rinogo 2012-01-10 01:13:24

相關問題