Cách cấp đặc quyền tạo cơ sở dữ liệu cho người dùng trong MySQL


10

Lệnh sau cung cấp tất cả các đặc quyền trong tất cả các cơ sở dữ liệu cho Người dùng 'quản trị viên'. Nhưng nó không cho phép 'quản trị viên' tạo cơ sở dữ liệu.

GRANT ALL ON * . * TO 'admin'@'localhost'; 

Làm cách nào tôi có thể cung cấp quyền truy cập cho 'quản trị viên' để tạo cơ sở dữ liệu?

Khi tôi đang cố gắng tạo cơ sở dữ liệu, tôi gặp phải lỗi sau -

LRI 1044 (42000): Truy cập bị từ chối đối với người dùng 'admin' @ 'localhost' vào cơ sở dữ liệu 'newdb'


Bạn đã sử dụng GRANT ALL ON *.* TO 'admin'@'localhost';? Trong ví dụ của bạn, bạn nói rằng bạn đã chạy : GRANT ALL ON * . * TO 'admin'@'hostname';, nhưng hostnamelà một máy chủ khác biệt hơn localhost.
oNare

tên máy chủ là 'localhost'.
Abhishek

Bạn đã kết nối là "root" khi bạn chạy nó GRANTchưa?
Rick James

Đúng. Tôi đã được kết nối là "root" khi tôi chạy GRANT đó.
Abhishek

Bạn đã thử flush privileges;làm root chưa?
dwjv

Câu trả lời:


5

TẤT CẢ các đặc quyền bao gồm "TẤT CẢ" trong số chúng ngoại trừ "WITH GRANT OPTION" ... Vì vậy, lệnh trên sẽ cho phép người dùng quản trị viên tạo cơ sở dữ liệu.

Bạn có thể muốn hiển thị lỗi mà bạn đang gặp phải. Lưu ý rằng trong GRANT ở trên, bạn cũng không chỉ định mật khẩu cho người dùng quản trị.

Cập nhật:

Bạn sẽ có thể làm như sau:

đăng nhập bằng root và tạo người dùng:

$] mysql -uroot -p
mysql> grant all privileges on *.* to 'admin'@'localhost';

đăng nhập với tư cách quản trị viên (không có mật khẩu):

$] mysql -uadmin -p
mysql> create database admin;

Khi bạn đăng nhập, bạn có thể xác minh các đặc quyền của mình như sau:

mysql> show grants;

hoặc là

mysql> show grants for current_user();

mysql> select current_user() sẽ hiển thị cho bạn, người dùng bạn đã đăng nhập như.


Tôi đã thêm lỗi trong câu hỏi của tôi.
Abhishek

@abhishek cập nhật câu trả lời .... btw lệnh nào gây ra lỗi trên? Kiểm tra những gì tài trợ người dùng của bạn đang có? Bạn có chắc chắn bạn đang kết nối với tư cách là người dùng quản trị viên?
mysql_user

Có, tôi chắc chắn 100% rằng tôi đang kết nối với tư cách là người dùng quản trị.
Abhishek

mysql hiển thị các khoản tài trợ; + ------------------------------------------------- ---------------------------- + | Tài trợ cho admin @ localhost | + ------------------------------------------------- ---------------------------- + | SỬ DỤNG CẤP TRÊN . ĐẾN 'admin' @ 'localhost' được xác định bởi PASSWORD <secret> | | CẤP TẤT CẢ CÁC ƯU ĐÃI TRÊN newdb. * ĐẾN 'admin' @ 'localhost' | + ------------------------------------------------- ---------------------------- + 2 hàng trong bộ (0,00 giây)
Abhishek

Lưu ý rằng bạn chỉ có tất cả quyền riêng tư trên mbdb ... vì vậy bạn sẽ không thể làm việc với bất kỳ db nào khác!
mysql_user

0

Một người dùng mới không có quyền làm bất cứ điều gì với cơ sở dữ liệu. Trên thực tế, nếu người dùng mới thậm chí cố gắng đăng nhập (bằng mật khẩu, mật khẩu), họ sẽ không thể truy cập vào trình bao MySQL.

Do đó, bạn cần cung cấp cho người dùng quyền truy cập

GRANT ALL PRIVILEGES ON * . * TO 'admin'@'localhost'; 

Các dấu hoa thị trong lệnh này đề cập đến cơ sở dữ liệu và bảng (tương ứng) rằng chúng có thể truy cập vào lệnh này, lệnh này cho phép người dùng đọc, chỉnh sửa, thực thi và thực hiện tất cả các tác vụ trên tất cả các cơ sở dữ liệu và bảng.

Khi bạn đã hoàn tất các quyền mà bạn muốn thiết lập cho người dùng mới của mình, hãy luôn đảm bảo tải lại tất cả các đặc quyền.

FLUSH PRIVILEGES;

Bây giờ, tất cả các thay đổi sẽ có hiệu lực.


Đặc quyền flush là không cần thiết cho các lệnh GRANT.
mysql_user

Có..Tôi đồng ý .... Nhưng cần có QUYỀN RIÊNG TƯ khi chúng tôi sửa đổi trợ cấp trực tiếp trên các bảng bằng cách sử dụng các câu lệnh như INSERT, UPDATE hoặc DELETE ... Cảm ơn @mysql_user
Mathew
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.