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';
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
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 ... –
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