Làm cách nào để cấp quyền truy cập từ xa vào MySQL cho toàn bộ mạng con?


93

Tôi có thể dễ dàng cấp quyền truy cập cho một IP bằng mã này:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

Nhưng tôi cần cho phép toàn bộ mạng con 192.168.1. * Truy cập cơ sở dữ liệu từ xa.

Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


100

CHỈNH SỬA: Xem xét và tán thành câu trả lời của Malvineous trên trang này. Netmasks là một giải pháp thanh lịch hơn nhiều.


Chỉ cần sử dụng dấu phần trăm làm ký tự đại diện trong địa chỉ IP.

Từ http://dev.mysql.com/doc/refman/5.1/en/grant.html

Bạn có thể chỉ định các ký tự đại diện trong tên máy chủ. Ví dụ: user_name@'%.example.com'áp dụng user_namecho bất kỳ máy chủ nào trong example.commiền và user_name@'192.168.1.%'áp dụng user_namecho bất kỳ máy chủ nào trong 192.168.1mạng con lớp C.


6
Tôi vừa làm như thế này, nhưng, giả sử, điều gì khiến nó không áp dụng cho: user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? bây giờ tôi sẽ tiếp tục, vì đây là MySQL tôi cảm thấy tôi không muốn biết câu trả lời.
Florian Heigl

+ Florian, tôi nghĩ rằng nó đánh bại chỉ đơn giản bằng cách sử dụng '%' vì nó bổ sung thêm một lớp bảo mật cần phải được khắc phục, nhưng tôi nghĩ bạn đã nói rõ về điểm yếu của nó. Tôi chắc chắn bổ sung cấu hình này bằng các phương tiện khác, chẳng hạn như khóa máy chủ cơ sở dữ liệu trong một mạng con riêng biệt mà tôi có thể kiểm soát quyền truy cập thông qua tường lửa để loại bỏ mối quan tâm của bạn, trong số những thứ khác.
Josiah

22
Các ví dụ như '192.168.1.my-hacked-rnds.killing.mysql.com' 'được giải quyết cụ thể trong dev.mysql.com/doc/refman/5.5/en/account-names.html : Để ngăn chặn những nỗ lực đó, MySQL không cho phép đối sánh tên máy chủ bắt đầu bằng chữ số và dấu chấm. ... Giá trị ký tự đại diện IP chỉ có thể khớp với địa chỉ IP, không phải tên máy chủ.
Stefan Lasiewski

118

vẻ như bạn cũng có thể sử dụng mặt nạ mạng , ví dụ:

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
Đây phải là câu trả lời được chấp nhận vì nó là câu trả lời đúng kỹ thuật duy nhất. Hỗ trợ ít nhất là từ 5.5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
Đừng cố gắng sử dụng ký hiệu CIDR như "172.16.0.0/16", điều này không hoạt động. Luôn sử dụng mặt nạ mạng đầy đủ.
Oliver R.

Có vẻ như bạn phải sử dụng địa chỉ IP đầu tiên trong dải; Sử dụng ví dụ 192.168.0.34/255.255.255.0 sẽ không thành công!
Sander

@SanderBackus: 192.160.0.34/255.255.255.0giống như 192.168.0.34/24điều không thực sự có ý nghĩa ( /24có nghĩa là số cuối cùng có thể từ 0 đến 255, bỏ qua giá trị của bạn là 34). Nó có hoạt động không nếu bạn sử dụng mặt nạ hợp lệ cho IP, như thế 192.168.0.34/255.255.255.252nào?
Malvineous

@Malvineous Đó là quan điểm của tôi. Nếu bạn sử dụng 192.160.0.34/255.255.255.0 thì mysql không cho phép 192.160.0.34. Ý tôi là cho phép đầy đủ / 24 (vâng, tôi đã sử dụng mặt nạ mạng đầy đủ, như được ghi lại), nhưng rõ ràng Nếu bạn phải sử dụng 192.160.0.0/255.255.255.0 để cho phép toàn dải.
Sander

28

Bạn chỉ cần sử dụng '%' làm ký tự đại diện của mình như sau:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

Ký tự đại diện là "%" thay vì "*"


5

Chỉ là một lưu ý về một đặc thù mà tôi phải đối mặt
:

db server:  192.168.0.101
web server: 192.168.0.102

Nếu bạn có một người dùng được xác định trong mysql.user 'user'@'192.168.0.102'với password1 và một người khác 'user'@'192.168.0.%'có password2,

sau đó,

nếu bạn cố gắng kết nối với máy chủ db từ máy chủ web với tư cách là 'người dùng' bằng password2,

nó sẽ dẫn đến lỗi 'Quyền truy cập bị từ chối' vì 'user'@'192.168.0.102'xác thực IP đơn được sử dụng thay thế 'user'@'192.168.0.%'xác thực ký tự đại diện .


2
Tôi không chắc đây là câu trả lời cho câu hỏi. Nếu nó không cung cấp câu trả lời trực tiếp cho câu hỏi ban đầu, nó nên được đăng dưới dạng bình luận.
Kmeixner

13
Kmeixner, bạn mong đợi anh ấy viết nhiều như vậy trong một bình luận? Áp dụng một số nhận thức thông thường và ngừng trở thành một người máy. Cộng đồng này nhằm giúp các nhà phát triển không gây khó khăn cho cuộc sống của họ.
user1735921,

0

sau khi bạn kết nối máy chủ và bạn muốn kết nối trên máy chủ của mình, bạn nên thực hiện các bước bên dưới:

  1. viết mysql để mở mysql
  2. viết thư ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. nhấn control và X để thoát khỏi mysql
  4. viết nano /etc/mysql/my.cnf
  5. viết # trước bind-address = 127.0.0.1 trong thư mục my.cnf
  6. # bind-address = 127.0.0.1
  7. lưu thư mục my.cnf bằng control + X
  8. viết service mysql restart
  9. bạn có thể kết nối qua navicat trên máy chủ của bạn

0

Được thúc đẩy bởi câu trả lời @Malvineaus Tôi đã tự mình thử và nhận thấy rằng nó không hiệu quả với tôi.

Bạn có thể chỉ định mặt nạ mạng con bằng '192.168.1.%' Hoặc '192.168.1.0/255.255.255.0' nhưng mạng con phải luôn ở trên các octet hoàn chỉnh. xem https://mariadb.com/kb/en/create-user/#host-name-component . Kết quả là chức năng giữa cách này và cách khác là giống nhau.

Ví dụ: '192.168.1.0/255.255.255.128' sẽ không hoạt động vì nó không nằm trên ranh giới octet hoàn chỉnh.

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.