2010-01-24 35 views
60

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

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

Các tài liệu nói rằng đặc ân USAGE có nghĩa là "không có đặc quyền," vì vậy tôi suy luận tài trợ thats làm việc phân cấp và có lẽ một 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, do đó, điều này phục vụ như là một bắt tất cả?

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

Edit: Xin lỗi vì đã không nêu này ban đầu, tài trợ là

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

bạn có thể vui lòng cho chúng tôi biết khoản tài trợ mà bạn đã chạy – Pentium10

Trả lời

94

Như bạn nói, trong MySQL USAGE là đồng nghĩa với "không có đặc quyền". Từ số MySQL Reference Manual:

Mã thông báo đặ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ác đặc tính SSL mà không ảnh hưởng đến các đặc quyền tài khoản hiện có.

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

Điều khoản IDENTIFIED BY cho biết rằng mật khẩu được đặt cho người dùng đó. Làm cách nào để chúng tôi biết người dùng là người họ nói họ là ai? Họ tự tự xác định bằng cách gửi đúng mật khẩu 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 được gắn với cơ sở dữ liệu hoặc bảng cụ thể. Nó cũng sống trong bảng `mysql`.`user`. Nếu người dùng không có bất kỳ đặc quyền nào khác ON *.*, họ đượ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 tuyên bố CREATE USER. Khi người dùng được tạo theo cách đó, ban đầu họ không có đặc quyền để họ chỉ được cấp USAGE.

+5

Lạ lùng: tại sao cuộc gọi lại sử dụng khi chúng có nghĩa là KHÔNG ƯU TIÊN ... – robsch

+3

Tôi nghĩ đó là vì chúng được phép xác thực. Nếu bạn thử với một người dùng sai hoặc/và mật khẩu, bạn không thể xác thực. Một người dùng có đặc quyền USAGE có thể chạy các lệnh SQL nhất định như 'select 1 + 1' và 'show processlist'. –

3

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

5

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

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

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

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