ClickHouse Cloud 서비스에는 서비스가 생성될 때 함께 생성되는 default라는 Admin 사용자가 있습니다. 비밀번호는 서비스 생성 시 제공되며, Admin 역할을 가진 ClickHouse Cloud 사용자가 재설정할 수 있습니다.
ClickHouse Cloud 서비스에 추가 SQL 사용자를 생성하면 각 사용자에게 SQL 사용자 이름과 비밀번호가 필요합니다. 이들에게 관리자 수준 권한을 부여하려면 새 사용자에게 default_role 역할을 할당하십시오. 예를 들어 clickhouse_admin 사용자를 추가하는 경우는 다음과 같습니다:
CREATE USER IF NOT EXISTS clickhouse_admin
IDENTIFIED WITH sha256_password BY 'P!@ssword42!';
GRANT default_role TO clickhouse_admin;
참고
SQL Console에서 실행하는 SQL 문은 default 사용자로 실행되지 않습니다. 대신, sql-console:${cloud_login_email}라는 이름의 사용자로 실행되며, 여기서 cloud_login_email은 현재 쿼리를 실행 중인 사용자의 이메일입니다.
이와 같이 자동으로 생성되는 SQL Console 사용자는 default 역할을 가집니다.
SQL 콘솔에는 두 가지 역할이 있습니다. default_role과 동일한 권한을 가진 sql_console_admin과 읽기 전용 권한을 가진 sql_console_read_only입니다.
관리자 사용자는 기본적으로 sql_console_admin 역할이 할당되므로 별도 변경 사항은 없습니다. 그러나 sql_console_read_only 역할을 사용하면 비관리자 사용자에게도 어떤 인스턴스에 대해서든 읽기 전용 또는 전체 접근 권한을 부여할 수 있습니다. 이 접근 권한은 관리자가 구성해야 합니다. 인스턴스별 요구 사항에 더 잘 맞도록 GRANT 또는 REVOKE 명령을 사용해 역할을 조정할 수 있으며, 이러한 역할에 대해 수행한 모든 변경 사항은 그대로 유지됩니다.
이 액세스 제어 기능은 사용자 단위로 세밀하게 수동 구성할 수도 있습니다. 새 sql_console_* 역할을 사용자에게 할당하기 전에, 네임스페이스 sql-console-role:<email>과(와) 일치하는 SQL 콘솔 사용자별 데이터베이스 역할을 먼저 생성해야 합니다. 예를 들면 다음과 같습니다.
CREATE ROLE OR REPLACE sql-console-role:<email>;
GRANT <some grants> TO sql-console-role:<email>;
일치하는 역할이 확인되면, 기본 제공 역할 대신 해당 역할이 사용자에게 부여됩니다. 이를 통해 sql_console_sa_role, sql_console_pm_role과 같은 역할을 생성하고 특정 사용자에게 부여하는 등, 보다 복잡한 액세스 제어 구성을 할 수 있습니다. 예를 들면 다음과 같습니다:
CREATE ROLE OR REPLACE sql_console_sa_role;
GRANT <whatever level of access> TO sql_console_sa_role;
CREATE ROLE OR REPLACE sql_console_pm_role;
GRANT <whatever level of access> TO sql_console_pm_role;
CREATE ROLE OR REPLACE `sql-console-role:christoph@clickhouse.com`;
CREATE ROLE OR REPLACE `sql-console-role:jake@clickhouse.com`;
CREATE ROLE OR REPLACE `sql-console-role:zach@clickhouse.com`;
GRANT sql_console_sa_role to `sql-console-role:christoph@clickhouse.com`;
GRANT sql_console_sa_role to `sql-console-role:jake@clickhouse.com`;
GRANT sql_console_pm_role to `sql-console-role:zach@clickhouse.com`;
CREATE ROW POLICY allow_other_users_filter
ON db1.table1 FOR SELECT USING 1 TO clickhouse_admin, column1_users;
참고
테이블에 정책을 연결하면 시스템이 해당 정책을 적용하며, 정의된 사용자와 역할만 테이블 작업을 수행할 수 있고 그 외의 모든 사용자는 모든 작업이 거부됩니다. 제한적인 ROW POLICY가 다른 사용자에게 적용되지 않도록 하려면, 다른 사용자와 역할이 일반 접근 또는 다른 유형의 접근을 할 수 있도록 별도의 정책을 정의해야 합니다.
Query id: 5576f4eb-7450-435c-a2d6-d6b49b7c4a23
0 rows in set. Elapsed: 0.006 sec.
Received exception from server (version 22.3.2):
Code: 497. DB::Exception: Received from localhost:9000.
DB::Exception: column_user: Not enough privileges.
To execute this query it's necessary to have grant
SELECT(id, column1, column2) ON db1.table1. (ACCESS_DENIED)
참고
사용자에게 id와 column1에만 접근 권한이 있으므로, 모든 컬럼을 지정하면 접근이 거부됩니다.
Query id: 8cdf0ff5-e711-4cbe-bd28-3c02e52e8bc4
0 rows in set. Elapsed: 0.005 sec.
Received exception from server (version 22.3.2):
Code: 497. DB::Exception: Received from localhost:9000.
DB::Exception: row_and_column_user: Not enough privileges.
To execute this query it's necessary to have grant
SELECT(id, column1, column2) ON db1.table1. (ACCESS_DENIED)
Query id: 6a73a3fe-2659-4aca-95c5-d012c138097b
┌─GRANTS FOR row_and_column_user───────────────────────────┐
│ GRANT A_rows_users, column1_users TO row_and_column_user │
└──────────────────────────────────────────────────────────┘