Tại sao “HỖ TRỢ SỬ DỤNG” được tạo vào lần đầu tiên tôi cấp đặc quyền cho người dùng?


100

Tôi mới làm quen với phía quản trị viên của DBMS và đang thiết lập một cơ sở dữ liệu mới vào tối nay (sử dụng MySQL) thì tôi nhận thấy điều này. Sau khi cấp cho người dùng một đặc quyền lần đầu tiên, một khoản trợ cấp khác sẽ được tạo ra trông giống như

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

Tài liệu nói rằng USAGEđặc quyền có nghĩa là "không có đặc quyền", vì vậy tôi đang suy luận rằng các khoản cấp hoạt động theo thứ bậc và có lẽ người dùng phải có một số loại đặc quyền cho tất cả các cơ sở dữ liệu, vì vậy điều này coi như là một nắm bắt tất cả?

Tôi cũng không hiểu tại sao dòng này có một IDENTIFIED BYđiều khoản trong đó khi khoản trợ cấp tôi tạo không có (chủ yếu là vì tôi không hiểu mục đích của IDENTIFIED BYđiều khoản này).

Chỉnh sửa: Xin lỗi vì đã không nói rõ điều này ban đầu, các khoản tài trợ là

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user

bạn có thể xin vui lòng cho chúng tôi biết việc cấp bạn đã chạy
Pentium10

Câu trả lời:


143

Như bạn đã nói, trong MySQL USAGEđồng nghĩa với "không có đặc quyền". Từ Hướng dẫn tham khảo MySQL :

Bộ chỉ định đặc quyền USAGE là viết tắt của "không có đặc quyền". Nó được sử dụng ở cấp độ toàn cầu với GRANT để sửa đổi các thuộc tính tài khoản như giới hạn tài nguyên hoặc đặc tính SSL mà không ảnh hưởng đến các đặc quyền tài khoản hiện có.

USAGElà một cách để cho MySQL biết rằng tài khoản tồn tại mà không cần cấp bất kỳ đặc quyền thực sự nào cho tài khoản đó. Do đó, họ chỉ có quyền sử dụng máy chủ MySQL USAGE. Nó tương ứng với một hàng trong `mysql`.`user`bảng không có đặc quyền nào được đặt.

Các IDENTIFIED BYkhoản chỉ ra rằng một mật khẩu được thiết lập cho người dùng đó. Làm thế nào để chúng tôi biết người dùng là người mà họ nói? Họ tự nhận dạng bằng cách gửi mật khẩu chính xác cho tài khoản của họ.

Mật khẩu của người dùng là một trong những thuộc tính tài khoản cấp toàn cầu không gắn với cơ sở dữ liệu hoặc bảng cụ thể. Nó cũng sống trong `mysql`.`user`bảng. Nếu người dùng không có bất kỳ đặc quyền nào khác ON *.*, họ sẽ được cấp USAGE ON *.*và băm mật khẩu của họ được hiển thị ở đó. Đây thường là một tác dụng phụ của một CREATE USERtuyên bố. Khi người dùng được tạo theo cách đó, ban đầu họ không có đặc quyền nên chỉ được cấp USAGE.


10
Tôi nghĩ đó là do họ được phép xác thực. Nếu bạn thử với một người dùng hoặc / và mật khẩu sai, bạn không thể xác thực. Người dùng có đặc quyền USAGE có thể chạy các lệnh SQL nhất định như 'chọn 1 + 1' và 'hiển thị danh sách xử lý'.
Mircea Vutcovici

11

Tôi đã cố gắng tìm ý nghĩa của GRANT USAGE on *.* TOvà tìm thấy ở đây. Tôi có thể làm rõ điều đó GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordsẽ được cấp khi bạn tạo người dùng bằng lệnh sau ( CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Khi bạn cấp đặc quyền với GRANT, các đặc quyền mới sẽ được thêm vào trên đó.


3

Ngoài ra, mật khẩu mysql khi không sử dụng IDENTIFIED BYmệnh đề, có thể là giá trị trống, nếu không trống, chúng có thể được mã hóa. Nhưng yes USAGEđược sử dụng để sửa đổi tài khoản bằng cách cấp các giới hạn tài nguyên đơn giản, chẳng hạn như MAX_QUERIES_PER_HOUR, điều này cũng có thể được chỉ định bằng cách sử dụng mệnh đề WITH, trong liên kết với GRANT USAGE(không thêm đặc quyền) hoặc GRANT ALL, bạn cũng có thể chỉ định GRANT USAGEở cấp toàn cục, cấp cơ sở dữ liệu, cấp bảng, v.v.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.