2015-06-29 18 views
8

Tôi thường thấy trong nhiều hướng dẫn về MySQL mà mọi người sử dụng lệnh IDENTIFIED BY 'password' cả trong quá trình tạo người dùng và cấp đặc quyền cho anh ta."IDENTIFIED BY 'password" "trong MySQL

Ví dụ:

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

tôi đã cố gắng sử dụng GRANT mà không IDENTIFIED BY và nó hoạt động.
Ai đó có thể giải thích cho tôi lý do tại sao nó được sử dụng hai lần? Có thể có mật khẩu khác cho các đặc quyền cụ thể không?

Trả lời

3

Như cấp tự tạo người dùng như vậy, bên dưới dòng là đủ cho quyền đối với vấn

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

Lưu ý: Xác định đại diện cho mật khẩu của bạn những gì mật khẩu mà bạn muốn lưu để xác minh có khả năng.

+0

Hi Zafar, tôi vẫn không thể hiểu tại sao trong những hướng dẫn không thể là: 1.) Chúng tôi thêm người dùng và thiết lập mật khẩu: CREATE USER 'username' @ 'localhost' Được xác định bởi 'mật khẩu'; 2.) Sau đó, chúng tôi cấp quyền riêng tư (chúng tôi bỏ qua phần được xác định) CẤP TẤT CẢ CÁC QUYỀN RIÊNG VỀ cơ sở dữ liệu. * ĐỂ 'tên người dùng' @ 'localhost'; Tôi nghĩ rằng kết quả nên giống nhau? Liệu tôi có sai? – user3461823

+0

trong lần đầu tiên bạn đã tạo người dùng nhưng không được xác định loại người dùng nào yêu cầu ... trong lần thứ 2 bạn cung cấp đặc quyền, chỉ chọn hoặc cập nhật vv .... Lệnh 1 đã được bao gồm trong lệnh thứ 2 tức là nếu bạn sử dụng lệnh cấp phát thì nó sẽ tự động tạo người dùng nếu người dùng không tồn tại và nếu người dùng tồn tại thì chỉ cần thay đổi quyền ... –

+2

Chức năng này gây nhầm lẫn và không được chấp nhận trong MySQL 5.7. Mật khẩu phải được đặt bằng 'CREATE USER' hoặc' ALTER USER'. – SystemParadox

0

Đây chỉ là biện pháp bảo mật được thêm vào. Bạn có thể có các mật khẩu khác nhau cho cùng một người dùng trên các máy chủ khác nhau, ví dụ: trong môi trường máy chủ được chia sẻ. Nếu đó là máy chủ của riêng bạn và bạn và đồng nghiệp của bạn là những người duy nhất sử dụng nó thì bạn không cần phải xác định người dùng mà bạn cấp đặc quyền.

Nếu bạn xác định người dùng thì chỉ mật khẩu bạn chỉ định mới có thể được sử dụng với người dùng đó để thực hiện các đặc quyền đó.

4

GRANT có nghĩa là để thêm đặc quyền cho người dùng. Nhầm lẫn, nó cũng có khả năng tạo người dùng và thay đổi mật khẩu của họ. Chức năng này không được dùng nữa và không nên sử dụng.

Nếu bạn sử dụng GRANT với IDENTIFIED bạn có thể thay đổi mật khẩu của người dùng:

Khi xác định là hiện tại và bạn có đặc quyền cấp toàn cầu (GRANT OPTION), bất kỳ mật khẩu định trở thành mật khẩu mới cho tài khoản, ngay cả khi tài khoản tồn tại và đã có mật khẩu. Không có IDENTIFIED, mật khẩu tài khoản vẫn không thay đổi.

Kể từ MySQL 5.7.2, nếu tài khoản đã tồn tại, IDENTIFIED WITH bị cấm vì nó chỉ nhằm mục đích sử dụng khi tạo tài khoản mới.

Ngoài ra, GRANT có thể tạo người dùng nếu nó không tồn tại:

Nếu một tài khoản có tên trong một tuyên bố GRANT không tồn tại, các hành động được thực phụ thuộc vào chế độ NO_AUTO_CREATE_USER SQL:

  • Nếu NO_AUTO_CREATE_USER không được bật, GRANT sẽ tạo tài khoản. Điều này là rất không an toàn trừ khi bạn chỉ định một mật khẩu nonempty bằng cách sử dụng IDENTIFIED BY.
  • Nếu NO_AUTO_CREATE_USER được bật, GRANT không thành công và không tạo tài khoản, trừ khi bạn chỉ định mật khẩu không sử dụng IDENTIFIED BY hoặc đặt tên cho plugin xác thực bằng IDENTIFIED WITH.

Sử dụng GRANT để xác định các đặc tính xác thực tài khoản không được chấp nhận như của MySQL 5.7.6. Thay vào đó, hãy thiết lập hoặc thay đổi các đặc tính xác thực bằng cách sử dụng CREATE USER hoặc ALTER USER. Khả năng GRANT này sẽ bị xóa trong bản phát hành MySQL trong tương lai.

Xem https://dev.mysql.com/doc/refman/5.7/en/grant.html

Tóm lại, sử dụng CREATE để tạo ra một người sử dụng, và sử dụng GRANT thêm những đặc quyền:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost'; 
0

và những gì nếu tôi đã có những điều tương tự trên cửa sổ:

mysql GRANT ALL PRIVILEGES ON students_db. * TO 'students_db_user' @ 'localhost' IDENTEFIED BY 'passwo rd ';

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTEFIED BY 'password'' at line 1 
+2

Điều này không thực sự trả lời câu hỏi. Nếu bạn có một câu hỏi khác, bạn có thể hỏi nó bằng cách nhấp vào [Hỏi câu hỏi] (https://stackoverflow.com/questions/ask). Bạn cũng có thể [thêm tiền thưởng] (https://stackoverflow.com/help/privileges/set-bounties) để thu hút thêm sự chú ý đến câu hỏi này khi bạn có đủ [danh tiếng] (https://stackoverflow.com/help/ whats-danh tiếng). - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/19008435) –

+0

Câu trả lời của bạn là nhận xét hoặc câu hỏi. Trong trường hợp sau này bạn có thể đặt một câu hỏi mới và tham khảo câu hỏi hiện tại. Để đăng bình luận, hãy mua 50rep để có thể làm như vậy. – ZF007