Quản lý quyền truy cập trong ClickHouse

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;

Thẻ: ClickHouse UserManagement AccessControl

Đăng vào ngày 24 tháng 6 lúc 18:56