Skip to content

[OpenStack] RDBMS admin user lacks database privileges due to duplicated port formatting in grantAdminPrivileges #1825

Description

@yunkon-kim

배경 및 현상
Tumblebug RDBMS 라이프사이클 테스트 중 OpenStack 환경에서 데이터베이스(sampledb) 생성 이후, Remote 및 Internal Data I/O 테스트 단계에서 아래와 같이 MySQL Error 1044 (Access Denied)가 발생하며 실패하는 현상을 확인했습니다.

open: Error 1044 (42000): Access denied for user 'admin'@'%' to database 'sampledb'

(타 8종 CSP(AWS, Azure, GCP, Alibaba, Tencent, IBM, NCP, NHN): 완전관리형 DB 플랫폼 차원에서 마스터 계정에 전역 관리자 권한(ALL PRIVILEGES)이 자동 부여되므로 Data I/O 테스트가 정상 통과(Pass))

원인 분석 및 관련 로그

OpenStack Trove는 사용자 생성 시 기본적으로 권한이 없는 상태(GRANT USAGE ON *.*)로 생성됩니다. Spider 드라이버는 이를 타 CSP와 맞추기 위해 grantAdminPrivileges()를 통해 root로 접속하여 admin에게 GRANT ALL PRIVILEGES ON *.*를 부여하도록 구현되어 있으나, 주소 조합 시 포트가 중복되는 버그로 인해 실패하고 있습니다.

  1. 포트 중복 포맷팅:

    • convertInstanceToRDBMSInfo (L845)에서 이미 rdbmsInfo.Endpoint에 기본 포트가 붙어 "183.111.177.152:3306" 형태로 반환됩니다.
    • CreateRDBMS (L458)에서 grantAdminPrivileges(rdbmsInfo.Endpoint, defaultPort, ...)를 호출하면서 포트가 한 번 더 결합되어 DSN이 tcp(183.111.177.152:3306:3306) 형태로 생성됩니다.
  2. 발생하는 오류 및 로그:

    • grantAdminPrivileges 내부에서 sql.Open/ExecContext 실행 시 다음과 같은 네트워크 주소 파싱 오류가 발생합니다:

      dial tcp: address 183.111.177.152:3306:3306: too many colons in address
      
    • 이로 인해 CreateRDBMS (L459)에서 다음 경고 로그가 남게 됩니다:

      CreateRDBMS: could not grant admin privileges to 'admin': grantAdminPrivileges: GRANT failed: dial tcp: address 183.111.177.152:3306:3306: too many colons in address
      
  3. 결과:

    • admin 계정에 전역 권한이 부여되지 못했고, 이후 CreateDatabase로 새 데이터베이스(sampledb)가 생성되어도 admin에게 해당 DB 권한이 없어 실제 SQL 접근 시 Error 1044가 발생합니다.

검토 요청

grantAdminPrivileges 호출 또는 내부 주소 조합 시 이미 포트가 포함된 엔드포인트를 안전하게 파싱하도록 보완하는 방향에 대해 검토 부탁드립니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions