không thể loại bỏ việc sử dụng GRANT


15

Tôi đã thử nghiệm một số thứ và thêm:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

vì vậy bây giờ khi tôi làm

show grants for cptnotsoawesome@localhost;

Tôi có thể thấy rằng một trong số họ là:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Bây giờ tôi muốn xóa nó vì tôi nghĩ đó là một mối nguy hiểm bảo mật, vì vậy tôi làm:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Nhưng nó vẫn cho thấy USAGE cấp trong danh sách tài trợ.

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Bất cứ ý tưởng tại sao? Tôi đang làm gì sai?

Câu trả lời:


19

Trong phần mềm này, khi bạn thấy một người dùng chỉ sử dụng USAGE, người dùng đó được viết trong bảng mysql.user với tất cả các đặc quyền toàn cầu bị tắt.

Ban đầu bạn đã nói người dùng có cái này:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

Bạn sẽ thấy một hàng mysql.uservới mật khẩu MD5 và tất cả các thông tin riêng tư được đặt thành N. Bạn cũng sẽ thấy một hàng trong mysql.db với

  • người dùng = 'cptnotsoawgie'
  • máy chủ = 'localhost'
  • db = 'thống kê'
  • tất cả các mức DB được đặt thành 'Y'

Bạn sẽ có thể thấy chúng với truy vấn này

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

Khi bạn chạy lệnh REVOKE, bạn chỉ cần xóa hàng khỏi mysql.db. Điều này đã không chạm vào hàng trong mysql.user. Vì vậy, bạn vẫn có thể đăng nhập vào mysql và chỉ có quyền riêng tư để chạy

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Nếu có một cơ sở dữ liệu kiểm tra được gọi testhoặc cơ sở dữ liệu có 5 ký tự đầu tiên test_, (hãy tìm nó bằng cách sử dụng SELECT * FROM mysql.db WHERE db LIKE 'test%';) thì người dùng chỉ cần SỬ DỤNG có thể có toàn quyền đối với cơ sở dữ liệu kiểm tra. Tôi đã viết về điều này trong ServerFault tháng 9 năm 2011 .

Nếu bạn muốn xóa hàng khỏi mysql.user, bạn có thể chạy

DROP USER cptnotsoawesome@localhost;

hoặc là

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;

9

SỬ DỤNG có nghĩa là người dùng không có bất kỳ đặc quyền.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Bạn thực sự không thể thu hồi SỬ DỤNG, mà không bỏ người dùng .USAGE là một đặc quyền cấp toàn cầu.

hãy xem Liên kết này .


Tôi sẽ làm điều đó, nếu điều đó làm bất cứ điều gì sai với cơ sở dữ liệu, như nếu đó là mối đe dọa bảo mật hoặc một cái gì đó tương tự, nếu không - tôi có thể để nó
Katafalkas

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.