Cấu hình tài khoản người dùng và mật khẩu mạnh
Bạn cần tạo tài khoản mới với mật khẩu phức tạp thay vì sử dụng user mặc định 'default' không có mật khẩu.
File cấu hình users.xml nằm ở /etc/clickhouse-server/users.xml. Chúng ta sẽ thêm một profile người dùng mới có tên analyst với quyền hạn hạn chế và bắt buộc xác thực.
Trước tiên, sao lưu file cấu hình hiện tại để phòng ngừa lỗi.
sudo cp /etc/clickhouse-server/users.xml /etc/clickhouse-server/users.xml.backup
Kết quả mong đợi: File backup được tạo thành công, không có thông báo lỗi.
Sửa file /etc/clickhouse-server/users.xml để thêm cấu hình người dùng mới. Bạn có thể dùng nano hoặc vim.
sudo nano /etc/clickhouse-server/users.xml
Kết quả mong đợi: Editor mở ra, hiển thị nội dung XML.
Thêm đoạn cấu hình sau vào trong thẻ (thường nằm ở giữa file), trước thẻ đóng . Đảm bảo mật khẩu được mã hóa bằng SHA256 hoặc MD5. Ở đây dùng SHA256 với mật khẩu ví dụ "ClickHouseSecure2024!".
4c8a6b3f2d1e9c0b7a5f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f
random_salt_value_for_security
::/0
1073741824
0
3600
1000
100
100000000
3600
Kết quả mong đợi: File được lưu, không có lỗi cú pháp XML.
Khởi động lại ClickHouse Server để áp dụng cấu hình mới.
sudo systemctl restart clickhouse-server
Kết quả mong đợi: Service restart thành công, trạng thái là active (running).
Verify bằng cách đăng nhập với user mới và mật khẩu đã đặt.
clickhouse client --user analyst --password 'ClickHouseSecure2024!' --query "SELECT 'Login successful' AS status;"
Kết quả mong đợi: Trả về "Login successful". Nếu sai mật khẩu sẽ báo lỗi "Authentication failed".
Cấu hình quyền truy cập Database và Table
Sau khi tạo user, bạn cần cấp quyền cụ thể cho user đó trên database và table để tuân thủ nguyên tắc Least Privilege.
Đăng nhập với user admin (default) để thực hiện cấp quyền.
clickhouse client --query "CREATE DATABASE IF NOT EXISTS real_time_data;"
Kết quả mong đợi: Database được tạo thành công.
Tạo một bảng mẫu trong database vừa tạo để thực hành cấp quyền.
clickhouse client --query "CREATE TABLE IF NOT EXISTS real_time_data.metrics (timestamp DateTime, metric_name String, value Float64) ENGINE = MergeTree() ORDER BY timestamp;"
Kết quả mong đợi: Bảng metrics được tạo thành công.
Cấp quyền SELECT (đọc) cho user 'analyst' trên toàn bộ database real_time_data.
clickhouse client --query "GRANT SELECT ON real_time_data.* TO analyst;"
Kết quả mong đợi: Command chạy xong, không trả về dữ liệu, nghĩa là quyền đã được cấp.
Cấp quyền INSERT (ghi) cho user 'analyst' chỉ trên bảng metrics cụ thể.
clickhouse client --query "GRANT INSERT ON real_time_data.metrics TO analyst;"
Kết quả mong đợi: Command chạy xong thành công.
Verify quyền bằng cách đăng nhập lại với user 'analyst' và thử thực hiện các thao tác.
clickhouse client --user analyst --password 'ClickHouseSecure2024!' --query "SELECT * FROM real_time_data.metrics LIMIT 1;"
Kết quả mong đợi: Trả về dữ liệu (hoặc bảng rỗng nếu chưa có dữ liệu), không bị lỗi Permission denied.
Thử nghiệm quyền bị từ chối (Revoke test): Thử xóa bảng hoặc sửa cấu trúc bảng với user analyst.
clickhouse client --user analyst --password 'ClickHouseSecure2024!' --query "DROP TABLE real_time_data.metrics;"
Kết quả mong đợi: Báo lỗi "DB::Exception: Access denied for user 'analyst'". Điều này xác nhận quyền hạn đã bị giới hạn đúng ý.
Để xem danh sách quyền của user analyst, sử dụng query sau.
clickhouse client --query "SELECT * FROM system.grants WHERE grantee = 'analyst';"
Kết quả mong đợi: Hiển thị danh sách các quyền đã cấp cho user analyst.
Bật SSL/TLS để mã hóa kết nối
Mã hóa kết nối giữa Client và Server là bắt buộc cho môi trường Production để ngăn chặn sniffing dữ liệu.
Bước 1: Tạo thư mục chứa chứng chỉ SSL và tạo Self-Signed Certificate cho mục đích phát triển/test.
sudo mkdir -p /etc/clickhouse-server/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/clickhouse-server/ssl/server.key -out /etc/clickhouse-server/ssl/server.crt -subj "/C=VN/ST=HoChiMinh/L=District1/O=MyCompany/OU=IT/CN=clickhouse.local"
Kết quả mong đợi: Hai file server.key và server.crt được tạo trong thư mục ssl.
Bước 2: Cấu hình ClickHouse Server để yêu cầu SSL. Sửa file /etc/clickhouse-server/config.xml.
sudo nano /etc/clickhouse-server/config.xml
Kết quả mong đợi: Editor mở ra.
Thêm hoặc sửa đoạn cấu hình trong file config.xml. Đặt đúng đường dẫn đến file key và cert vừa tạo.
/etc/clickhouse-server/ssl/server.crt
/etc/clickhouse-server/ssl/server.key
none
true
true
3600
256000
9440
Kết quả mong đợi: File được lưu với cấu hình SSL và cổng bảo mật 9440.
Bước 3: Cấu hình yêu cầu SSL cho tất cả người dùng trong file /etc/clickhouse-server/users.xml.
sudo nano /etc/clickhouse-server/users.xml
Kết quả mong đợi: Editor mở ra.
Thêm thẻ vào bên trong thẻ user (ví dụ user 'analyst' và user 'default') để buộc họ phải kết nối qua SSL.
default
::/0
true
... (cấu hình cũ) ...
true
Kết quả mong đợi: File được lưu, đảm bảo tag true hiện diện trong các user.
Bước 4: Khởi động lại ClickHouse Server để áp dụng cấu hình SSL.
sudo systemctl restart clickhouse-server
Kết quả mong đợi: Server chạy lại thành công.
Bước 5: Verify bằng cách kết nối qua cổng bảo mật 9440 với chế độ bảo mật.
clickhouse client --host 127.0.0.1 --port 9440 --secure --user analyst --password 'ClickHouseSecure2024!' --query "SELECT 'SSL Connection OK' AS status;"
Kết quả mong đợi: Trả về "SSL Connection OK".
Verify việc từ chối kết nối không bảo mật: Thử kết nối qua cổng thường 9000 với user đã bật secure=true.
clickhouse client --host 127.0.0.1 --port 9000 --user analyst --password 'ClickHouseSecure2024!' --query "SELECT 1;"
Kết quả mong đợi: Báo lỗi "Authentication failed" hoặc "Connection refused" vì server yêu cầu SSL mà client không gửi flag --secure.
Điều hướng series:
Mục lục: Series: Triển khai Database Real-time với ClickHouse trên Ubuntu 24.04
« Phần 2: Cài đặt ClickHouse Server và Client trên Ubuntu 24.04
Phần 4: Thiết lập cấu trúc dữ liệu và Engine lưu trữ »