SET ROLE을 실행하면 한 쿼리에서는 역할이 변경된 것처럼 보이지만, 다음 쿼리에서는 원래 역할로 되돌아갈 수 있습니다. 쿼리와 세션 전반에서 권한을 유지해야 한다면 사용자별 SQL 콘솔 역할을 사용하십시오.
증상
SET ROLE sql_console_developer를 실행한 후에도 이후 쿼리가 계속sql_console_read_only역할로 실행됩니다.- 쿼리마다
currentRoles,enabledRoles,defaultRoles의 결과가 달라집니다. SET ROLE와 다른 쿼리를 함께 실행하면 선택한 역할이 항상 유지되는 것은 아닙니다.SHOW GRANTS에 예상한 역할이 표시되지만, 해당 권한은 활성화되지 않습니다.
이 문제가 발생하는 이유
SET ROLE은 현재 세션에서 활성화된 역할을 변경합니다. 하지만 이후 SQL 콘솔 요청에서도 세션 상태가 유지되지는 않습니다. 따라서 후속 쿼리는 이전 요청에서 활성화한 역할 없이 실행될 수 있습니다.
따라서 SQL 콘솔에서는 SET ROLE을 영구적인 액세스 제어 수단으로 사용하지 마십시오.
SQL 콘솔 사용자 역할의 작동 방식
영구 권한 구성
sql_console_admin 역할이 있는 SQL 콘솔 사용자 또는 ACCESS MANAGEMENT 권한이 있는 사용자 등, 서비스에 대한 관리자 권한이 있는 사용자로 다음 SQL 문을 실행하십시오.
1
사용자 지정 역할 만들기
다음 예시는 사용자 지정
sql_console_developer 역할을 만들고 my_database에 대한 권한을 부여합니다.sql_console_developer는 기본 제공되는 ClickHouse Cloud 역할이 아닌 예시 역할입니다. 대신 사용자에게 필요한 권한이 부여된 기존 사용자 지정 역할을 사용할 수 있습니다.2
사용자별 SQL 콘솔 역할 만들기
이름에 사용자의 정확한 이메일 주소가 포함된 역할을 만드십시오.역할 이름에 특수 문자가 포함되어 있으므로 백틱이 필요합니다.
3
사용자 지정 역할 부여
원하는 역할을 사용자별 SQL 콘솔 역할에 부여하십시오.필요에 따라 여러 역할을 부여할 수 있습니다.
4
새 SQL 콘솔 세션 시작
사용자에게 SQL 콘솔에서 로그아웃한 후 다시 로그인하거나 브라우저 탭을 새로 고치도록 안내하십시오. 새 세션에서는 ClickHouse Cloud가 결과에는
sql-console-role:user@example.com을 sql-console:user@example.com에 적용하므로 SET ROLE SQL 문을 실행할 필요가 없습니다.활성 역할을 확인하십시오.sql-console-role:user@example.com을 통해 부여된 권한이 포함되어야 합니다.관리형 역할을 수정하지 마십시오
sql_console_admin 또는 sql_console_read_only를 수정하지 마십시오. 이러한 기본 제공 역할은 ClickHouse Cloud에서 관리합니다. 대신 사용자별 권한에는 sql-console-role:<email>을 사용하십시오.
일반적인 역할 관리 예시는 일반적인 액세스 관리 쿼리를 참조하십시오.