2011-07-10 69 views
1

我想創建一個批處理文件來創建一個新用戶,然後分配權限給新用戶。我想要做這樣的事情:批處理文件創建一個用戶,然後用mysql分配權限

c:\mysql\bin\mysql -uroot -ppassword < CREATE USER 'username_here'@'localhost' IDENTIFIED BY 'password_here'; 
c:\mysql\bin\mysql -uroot -ppassword < GRANT ALL ON myDB.* TO 'username_here'@'localhost'; 

問題是,我得到一個錯誤,系統找不到指定的文件。我知道我是從正確的地方調用mysql的exe,因爲如果我只是這樣做:

c:\mysql\bin\mysql -uroot -ppassword 

它登錄並給我mysql提示。難道我做錯了什麼?

回答

2

可以使用--execute選項一個語句傳遞到數據庫:

c:\mysql\bin\mysql -uroot -ppassword --execute="CREATE USER 'username_here'@'localhost' IDENTIFIED BY 'password_here';" 
c:\mysql\bin\mysql -uroot -ppassword --execute="GRANT ALL ON myDB.* TO 'username_here'@'localhost';" 
+0

完美!謝謝。 – Brian

1

你需要把周圍的命令引號,否則shell認爲你給它一個文件名:

c:\mysql\bin\mysql -uroot -ppassword < "CREATE USER 'username_here'@'localhost' IDENTIFIED BY 'password_here';" 
c:\mysql\bin\mysql -uroot -ppassword < "GRANT ALL ON myDB.* TO 'username_here'@'localhost';" 
+0

你測試過了嗎? –

+0

是的。它似乎也沒有工作要麼 – Brian

+0

這是因爲'<'用於重定向來自文件的輸入,而不是向程序輸入逐字文本。 – nos

0

可以稍微簡化使用單件GRANT聲明的事情:

mysql mysql -uroot -ppassword --execute "GRANT ALL ON myDB.* TO [email protected] IDENTIFIED BY 'password_here';" 

當您以這種方式運行數據庫時,似乎必須指定mysql數據庫,並且如果您不使用保留字作爲用戶名,則可以避免使用幾個引號。

相關問題