Quyền người dùng MySQL về thủ tục lưu trữ


8

Tôi đã tạo một thủ tục lưu trữ đơn giản:

mysql> CREATE FUNCTION hello (s CHAR(20))
    -> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected, 1 warning (0.00 sec)

Nhưng không thể chạy nó:

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

Có thể tên người dùng của tôi là một chuỗi trống? Làm cách nào để tạo người dùng và cấp đặc quyền? Tôi có thể cấp cho người dùng tất cả các đặc quyền trên tất cả các thực thể trong cơ sở dữ liệu không?

Câu trả lời:


3

Như chính thông báo lỗi nói rằng người dùng không có quyền thực thi.

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

Bạn cần cấp Quyền thực thi cho người dùng đó. Cho rằng bạn cần phải đăng nhập với tư cách người dùng root và cấp quyền như

 grant execute on db.* to user@localhost;

Đối với các truy vấn khác của bạn:

  1. Có Có thể tên người dùng của bạn là một chuỗi trống nhưng không an toàn khi tạo người dùng như thế này.

  2. Để tạo và cấp các đặc quyền một cách ngắn gọn, hãy xem Liên kết này.

  3. Có, bạn có thể cấp tất cả các đặc quyền trên tất cả các thực thể trong cơ sở dữ liệu . để làm điều này, bạn có thể thực thi một lệnh như

Đăng nhập với tư cách người dùng root và ra lệnh

GRANT ALL ON DB_NAME.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
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.