Trong bài viết này, chúng ta sẽ tìm hiểu cách quản lý vai trò và tài khoản người dùng trong ClickHouse. Môi trường sử dụng ba máy chủ CentOS 7 với thông số cấu hình sau:
| Tên Máy | IP | Chương trình Cài Đặt | Cổng |
|---|---|---|---|
| centf8118.sharding1.db | 192.168.81.18 | clickhouse-server, clickhouse-client | 9000 |
| centf8119.sharding2.db | 192.168.81.19 | clickhouse-server, clickhouse-client | 9000 |
| centf8120.sharding3.db | 192.168.81.20 | clickhouse-server, clickhouse-client | 9000 |
Để tạo vai trò và tài khoản mới, bạn cần có quyền cao hơn vì các lệnh sau sẽ báo lỗi nếu không đủ đặc quyền.
Tạo Vai Trò
CREATE ROLE IF NOT EXISTS my_role;
Tạo Tài Khoản Người Dùng
CREATE USER IF NOT EXISTS user_name IDENTIFIED WITH sha256_password BY 'password';
Một số ví dụ khi chạy lệnh trên:
-- Tạo vai trò DBA
CREATE ROLE DBA;
-- Tạo tài khoản dba_u
CREATE USER dba_u@'192.168.%' IDENTIFIED WITH sha256_password BY '123456';
Nếu không có đủ quyền, hệ thống sẽ trả về lỗi: "Not enough privileges".
Cấu Hình File users.xml
Thay vì sử dụng lệnh SQL trực tiếp, bạn có thể thêm vai trò và tài khoản qua file cấu hình /etc/clickhouse-server/users.xml. Một ví dụ cấu hình như sau:
<user>
<dba>
<password>my_secure_password</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</dba>
<readonly_user>
<password_sha256_hex>hash_of_password</password_sha256_hex>
<networks>
<ip>::/0</ip>
</networks>
<profile>readonly</profile>
<quota>default</quota>
</readonly_user>
</user>
Sinh Mật Khẩu Bằng Lệnh Shell
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
Kết quả:
RandomPassword ## Mật khẩu rõ
e2fc714c4727ee9395f324cd2e7f331f ## Mật khẩu đã mã hóa
Profiles - Định Nghĩa Quyền Hạn
Bạn có thể định nghĩa profile trong phần <profiles> của file users.xml. Ví dụ:
<profiles>
<default>
<max_memory_usage>10000000000</max_memory_usage>
</default>
<read_only_profile>
<readonly>1</readonly>
</read_only_profile>
</profiles>
Quotas - Giới Hạn Tài Nguyên
Phần <quotas> cho phép giới hạn tài nguyên theo khoảng thời gian nhất định.
<quotas>
<hourly_quota>
<interval>
<duration>3600</duration>
<queries>1000</queries>
<errors>10</errors>
</interval>
</hourly_quota>
</quotas>
SQL-Driven Configuration
Ngoài cách cấu hình bằng file XML, bạn cũng có thể quản lý người dùng và quyền hạn thông qua câu lệnh SQL.
Tạo Vai Trò Và Phân Quyền
CREATE ROLE admin_role;
GRANT SELECT, INSERT ON *.* TO admin_role;
CREATE USER sql_user IDENTIFIED WITH sha256_password BY 'password';
GRANT admin_role TO sql_user;
Tạo Quota Bằng SQL
CREATE QUOTA sql_quota FOR INTERVAL 1 DAY MAX QUERIES 500;