MariaDB qua VPN: máy chủ thấy user@host nào?
Tài khoản được chọn theo người dùng và máy chủ cùng nhau. Tìm nguồn mà máy chủ đã thấy, đọc CURRENT_USER(), rồi sửa hàng đó, không phải quyền.
Nhập cùng một tên người dùng qua hai đường khác nhau và MariaDB có thể xác thực bạn là hai tài khoản khác nhau. Tài khoản được khóa theo người dùng và máy chủ cùng nhau, nên 'reporter'@'localhost' và 'reporter'@'10.90.0.23' là các hàng riêng với mật khẩu riêng và quyền riêng. Qua VPN, câu hỏi thú vị không phải là người dùng đã gõ tên nào, mà là địa chỉ nguồn nào máy chủ đã thấy.
Xác định nguồn mà máy chủ thực sự thấy
Làm việc ngược từ máy chủ cơ sở dữ liệu, không phải từ laptop. Địa chỉ mà máy khách nghĩ mình có chỉ là một trong vài khả năng:
| Path | Source MariaDB sees |
|---|---|
| Routed tunnel, no translation | The client's inner VPN address |
| Gateway source translation | The gateway's translated address |
| SSH local forward | The SSH server's address |
| Public exit, no tunnel | Whatever the ISP handed out |
Dùng bằng chứng phía máy chủ để quyết định. Nhật ký kết nối, danh sách phiên đang hoạt động hoặc một mục tạm thời trong nhật ký chung cho thấy địa chỉ mà máy chủ đã chấp nhận. IP công cộng của laptop nhìn từ trình duyệt là một sự thật khác và thường gây hiểu nhầm.
Khớp tài khoản mà MariaDB đã chọn
Việc chọn tài khoản tuân theo thứ tự được ghi lại chứ không phải hợp của các quyền. Khớp chính xác máy chủ được ưu tiên hơn ký tự đại diện, và các hàng người dùng ẩn danh tham gia khớp theo cách khiến những người cho rằng chỉ tên quyết định phải ngạc nhiên. Máy chủ chọn một hàng; nó không hợp nhất đặc quyền của mọi hàng cùng tên. Đọc tài liệu tham khảo một lần đáng giá hơn một buổi chiều thử phỏng đoán.
Điều đó có nghĩa là thêm quyền vào 'reporter'@'%' có thể không thay đổi gì nếu phiên đã xác thực là 'reporter'@'10.90.0.23'. Bản sửa phải rơi vào hàng đã được chọn, vì vậy việc xác định tài khoản đi trước việc sửa quyền.
Đọc tài khoản mà phiên thực sự dùng
SELECT USER(), CURRENT_USER();
SHOW GRANTS;
CURRENT_USER() nêu tên tài khoản đã xác thực phiên; USER() báo cáo điều máy khách yêu cầu và có thể khác. Chạy chúng như truy vấn cấp cao nhất thông thường, không phải từ bên trong một thủ tục lưu trữ có ngữ cảnh định nghĩa, nếu không câu trả lời sẽ mô tả chủ sở hữu thủ tục thay vì phiên của bạn.
Đăng nhập thất bại không thể chạy bất cứ điều gì trong số này, và đó là trường hợp quản trị viên phải kiểm tra định nghĩa tài khoản và bằng chứng kết nối của máy chủ. Hãy lên kế hoạch cho điều đó: người gỡ lỗi một lần đăng nhập bị từ chối thường không có phiên SQL để hỏi.
Tách khả năng tiếp cận khỏi xác thực
Văn bản lỗi cho bạn biết bạn đang ở lớp nào. Kết nối bị từ chối hoặc hết thời gian chờ nghĩa là máy khách chưa bao giờ tới được trình lắng nghe, nên tài khoản và mật khẩu của nó chưa phải là vấn đề. Trả lời truy cập bị từ chối nghĩa là máy chủ đã trả lời, điều đó chứng minh khả năng tiếp cận và chỉ vào tài khoản, khớp máy chủ hoặc thông tin đăng nhập.
Các điều kiện tiên quyết về mạng là danh sách riêng: một trình lắng nghe gắn với địa chỉ dự định chứ không chỉ với loopback, lưu lượng được phép tới cổng đã cấu hình và tuyến quay lại cho câu trả lời. Mỗi điều có thể thất bại độc lập, và một đường hầm hoạt động không hàm ý bất kỳ điều nào trong số đó. Trình lắng nghe trên loopback chấp nhận kết nối cục bộ và từ chối mọi kết nối từ xa, tạo ra kết nối bị từ chối trông giống như bị tường lửa chặn.
Kiểm tra địa chỉ liên kết trước khi mở phiếu với nhóm mạng. ss -lntp trên máy chủ cơ sở dữ liệu cho thấy địa chỉ và cổng nào thực sự đang lắng nghe, và dòng duy nhất đó loại bỏ cả một hạng phỏng đoán.
Sửa hẹp, rồi kiểm tra lại cả hai chiều
Tạo tài khoản đủ điều kiện theo máy chủ dự định thông qua quy trình đã được tổ chức phê duyệt, với thông tin đăng nhập từ kho được hỗ trợ thay vì thông tin dùng chung bị dán vào phiếu. Chỉ cấp các thao tác lược đồ mà nhiệm vụ cần. Biến một lần đăng nhập từ xa thất bại thành tài khoản root, chính sách cấp tất cả hoặc máy chủ ký tự đại diện chung sẽ làm bài kiểm tra đạt và loại bỏ biện pháp kiểm soát mà bạn đang kiểm tra. Quyền bạn thêm vội vàng là quyền không ai gỡ bỏ sau này.
Kiểm tra lại với phiên mới theo đường dự định, rồi xem các trường hợp phủ định. Đường lẽ ra phải bị chặn vẫn phải bị chặn, và thao tác không được cấp vẫn phải bị từ chối. Hai lần kiểm tra đó là điều phân biệt một tài khoản đã sửa với một tài khoản bị mở rộng.
Cuối cùng, ghi lại địa chỉ nguồn quan sát được và tên tài khoản cùng nhau. Đường hầm cung cấp khả năng tiếp cận; MariaDB vẫn tự chọn và cấp quyền cho tài khoản của nó, và người tiếp theo cần cả hai sự thật để tái tạo kết quả của bạn.