2012-03-02 29 views
26

Tôi đang cố gắng tự động hóa thủ tục tạo người dùng MySQL. Tôi nghĩ đến việc tạo ra một tập tin tạm thời mà sẽ chứa báo cáo người dùng tạo ra mysql, sau đó tôi sẽ phải gọi nó là như thế này:Kịch bản tạo người dùng Mysql

mysql -u -proot gốc < tạm

Nhưng tôi bị mắc kẹt với cú pháp mysql : đây là nội dung của tập tin tạm thời của tôi:


DROP DATABASE IF EXISTS mytestdatabase; 
CREATE DATABASE mytestdatabase; 
SELECT @password:="my password"; 
DELETE FROM mysql.user WHERE Host='localhost' AND User='mytestdatabase'; 
GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' IDENTIFIED BY PASSWORD '@password'; 
FLUSH PRIVILEGES; 

Nhưng dòng

GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' IDENTIFIED BY PASSWORD '@password'; 

(Mật mã băm phải là một số thập lục phân 41 chữ số)

không hiểu là tôi mong chờ nó được. Ngay cả khi tôi xóa các dấu nháy đơn xung quanh thẻ @password, tôi vẫn có lỗi (lỗi cú pháp)

Tôi có thể thực hiện công việc này bằng cách nào?

+0

Thông báo lỗi là gì? –

+0

ERROR 1372 (HY000) tại dòng 9: Mật khẩu băm phải là số thập lục 41 chữ số – ling

Trả lời

51

Chỉ cần trả lời tại sao lỗi xảy ra và hiển thị differnce:


A) Mong đợi @password thành chuỗi băm giá trị:

GRANT ALL PRIVILEGES 
    ON `mydb` . * TO 'username'@'localhost' IDENTIFIED 
BY 
PASSWORD '@password'; 

Lưu ý việc sử dụng các từ khóa PASSWORD!


B) hy vọng @password là một văn bản rõ ràng chuỗi giá trị:

GRANT ALL PRIVILEGES 
    ON `mydb` . * TO 'username'@'localhost' IDENTIFIED 
BY 
'@password'; 

Lưu ý thiếuPASSWORD từ khóa!


đâu "chuỗi băm" là kết quả của SELECT PASSWORD('clearTextPasswd'); - xem Snowman's answer cho một ví dụ.

+1

đánh giá cao sự giải thích – matt

+1

Tốt. Lời giải thích tuyệt vời. – cbmeeks

+1

Cảm ơn bạn rất nhiều – Abdel

1

thử:

GRANT ALL PRIVILEGES ON mytestdatabase.* 
     TO [email protected] IDENTIFIED BY 'PASSWORD'; 

nơi PASSWORD là mật khẩu của bạn (trong dấu ngoặc kép).

+0

Có, nó sẽ hoạt động, nhưng tôi nghe nói nó kém an toàn hơn vì mật khẩu có thể xuất hiện trong tệp lịch sử mysql dưới dạng rõ ràng. Tôi muốn tránh giải pháp này bất cứ khi nào có thể. – ling

+0

Sau đó, bạn có thể đặt nó như tôi đã cho thấy và sau đó thay đổi nó như thế này: SET PASSWORD FOR mytestdatabase = PASSWORD ('PASSWORD'); – alfasin

+0

hình thức rõ ràng của mật khẩu vẫn xuất hiện, nhưng có thể vì nó được gọi từ một tệp, nó sẽ không được ghi trong "lịch sử mysql". Tôi có thể cố gắng để có được nhiều infos như thế nào mà "lịch sử mysql" thực sự hoạt động. Cảm ơn bạn. – ling

10

Nếu bạn không muốn lưu mật khẩu trong văn bản rõ ràng, sau đó lưu nó ở định dạng băm -

GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' 
    IDENTIFIED BY PASSWORD '*7560636C2922C05954FE6A2446AA00C84708B57B'; 

đâu mật khẩu băm là kết quả của truy vấn này -

SELECT PASSWORD('my password'); 
4

Hãy nhìn vào url sau đây và điều này sẽ giúp bạn khắc phục vấn đề:

http://linuxadministrator.pro/blog/?p=147

mysql> select password('12345'); 
+-------------------------+ 
| password('123456') | 
+-------------------------+ 
| 2ff898e158cd0311  | 
+-------------------------+ 
1 row in set (0.00 sec) 

mysql> create user test identified by password '2ff898e158cd0311'; 
Query OK, 0 rows affected (0.00 sec) 
0

Tôi mở phpMyAdmin và đi đến tab người dùng, phát hiện người sử dụng tôi đã cố gắng kết nối với các Đặc quyền Chỉnh sửa đã nhấp, cuộn xuống phần Thay đổi Thông tin Đăng nhập/Người dùng Sao chép và chọn Bất kỳ máy chủ nào cho tùy chọn Máy chủ lưu trữ, nó được đặt thành cục bộ. Khi tôi nhấp vào nút Go, nó tạo ra một kịch bản tương tự như các kịch bản được liệt kê ở đây.

GRANT ALL PRIVILEGES ON * . * TO 'james'@'%' IDENTIFIED BY PASSWORD '*780E1D13F1C7713F341A117499C6D8644464C4CF' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; 
0

Vâng mũ là lỗi bcoz bạn đã viết một cách sai lầm chỉ bạn đã viết,

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' IDENTIFIED BY PASSWORD '@password'; 

và cú pháp đúng là sau. nhìn đây.

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' IDENTIFIED BY '@password'; 

vì mật khẩu của bạn gây ra lỗi đó. nó phải được như được hiển thị.

4

Tôi cũng gặp vấn đề tương tự, nó được giải quyết chỉ bằng cách đặt mật khẩu bằng truy vấn được đề cập bên dưới.

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('MyNewPass');

Các vấn đề liên quan