Skip to main content

🔔 Notable Changes

  • Saved queries (renamed from Worksheets) — SQL Editor’s Worksheets are renamed to Saved Queries, with a new sharing model. You can now share a saved query with specific users or groups as Viewer or Editor, organize saved queries into folders, and star favorites for quick access.
    • Sharing is per-object: grant Viewer or Editor access to individual users or groups, instead of an all-or-nothing visibility toggle.
    • Manage permissions are now split by action (create / search / list / manage) instead of one bundled permission.
    • Folders and stars replace the previous flat worksheet list; drag-and-drop move and multi-select move to the root folder now work correctly.
    • See change details.
  • Project-scoped instances — Previously, a database instance could only be managed at the workspace level. You can now assign an instance to a specific project.
    • Instances can be scoped to one project instead of shared workspace-wide.
    • Archiving or restoring an instance with active task runs now requires those runs to be canceled or completed first.
    • Terraform provider 3.22.1 manages project-scoped instances through a new optional parent argument on bytebase_instance — see the Terraform section.
    • See change details.
  • Sign-in restrictions are enforced for every account — disallow_password_signin and enforce_identity_domain now apply uniformly to all accounts, including workspace admins. If either setting is enabled, confirm before upgrading that at least one admin keeps a working sign-in path — SSO, or an email inside the enforced domain. If an admin does get locked out, the new bytebase recovery CLI command is the break-glass path: run on the server against the metadata database, it can re-enable password sign-in or reset a user’s password without going through the UI. See change details.
  • Monitoring endpoints have new access rules — Check your monitoring setup before upgrading; both endpoints an external monitor might poll are affected.
    • /metrics now answers only requests originating from the server host (loopback). Keep a remote scraper working by running it — or a relay agent — on the same host, or start Bytebase with --metrics-remote-access if the endpoint is protected by a gateway, firewall, or NetworkPolicy. A Prometheus job pointed directly at the server address stops collecting on upgrade.
    • /v1/actuator/info now requires authentication — update any monitoring script that polls it to include a credential.

🚀 Features

  • Login attempt lockout — Repeated failed sign-in attempts — password, emailed code, or MFA code — now lock the targeted credential for a cooldown period, on both Bytebase Cloud and self-hosted.
  • Operational health metrics — /metrics now carries product health metrics alongside the existing runtime ones: schema sync health, runner cycles, license expiry, and instance capacity. Note the access change above before pointing a scraper at it.
  • Data Explorer — Browse table and collection data in SQL Editor without writing a query, especially useful for document databases. Filter with a native predicate for the connected engine — a WHERE clause for SQL databases, a filter document for MongoDB, a query expression for Elasticsearch — and click any row to see its full detail, including nested JSON documents.

🎄 Enhancements

  • Admin account recovery is separated from self-service profile editing: resetting another user’s forgotten password or lost authenticator is now a row-menu action on the Users page, and a reset shows the generated password once for you to relay out of band. Editing your own profile no longer bundles a password change in with your name and phone.
  • Bytebase Cloud — Clearer instance connection error messages: no longer suggests a Docker-only hostname, and now recognizes a loopback or private address and suggests using a public IP instead.

🐞 Bug Fixes

  • Fix Sync Schema generating duplicate statements for partitioned tables, and creating new MySQL tables without their partitioning.
  • Doris/StarRocks — Fix SQL Editor rejecting valid read-only queries that use EXTRACT(unit FROM expression).
  • Redis — Recognize RedisJSON and other module read commands (e.g. JSON.GET) as read-only, so they’re no longer blocked in SQL Editor, exports, or JIT access grant requests.
  • TiDB — Fix instance sync failing against TiDB Cloud Essential’s version string.
  • SQL Editor — Fix a workspace configured to land on SQL Editor instead redirecting to the workspace page after re-authentication.
  • CosmosDB — Fix Run from an active JIT access grant losing the selected container and schema, and fix query results not returning the executed statement.
  • Oracle — Fix valid constraint_state syntax (USING INDEX LOCAL, ENABLE/DISABLE, VALIDATE/NOVALIDATE, RELY/NORELY, EXCEPTIONS INTO) being rejected in partitioned-table DDL.
  • MySQL — Fix affected-rows estimates for DML driven by another table (e.g. UPDATE ... WHERE EXISTS) being wildly overstated, which could incorrectly trigger the affected-rows SQL review rule.

🏗️ Terraform

  • Upgrade to provider 3.22.1 after upgrading the server — Migration Guide. New: the optional parent argument on bytebase_instance and its data sources creates and queries project-scoped instances. Breaking: the cluster field in instance data_sources blocks and the computed service_key attribute on bytebase_user are removed — delete any references from configs. Behavior: project webhook URLs are now write-only; data sources read back an empty webhooks.url.

📃 Change Details

Saved Queries API

WorksheetService becomes SavedQueryService. Every RPC and message is renamed with no compatibility aliases. Visibility is removed; sharing is per-object IAM. The visibility field (PRIVATE / PROJECT_READ / PROJECT_WRITE) is gone. On upgrade, every existing saved query migrates to owner-private — nothing stays silently shared. Re-share from the SQL Editor dialog, or via SetIamPolicy with VIEWER / EDITOR bindings to user: and group: principals. Per-verb permissions replace bb.worksheets.*. The new family is bb.savedQueries.{create, search, list, get, getIamPolicy, setIamPolicy, update, delete} — update any custom role that referenced bb.worksheets.*. The creator holds every per-object permission; VIEWER carries get + getIamPolicy; EDITOR adds update. setIamPolicy is in no predefined role — sharing stays with the creator unless a custom role grants it (also the path to reassign a departed user’s queries).

Project Instances

Two Instance-/Database-level organization-policy API endpoints that were unsupported for project-scoped instances are removed. Archiving or restoring an instance now returns an error if it has task runs that are still PENDING, AVAILABLE, or RUNNING — cancel or wait for those to finish first.

Account Security

Before upgrading, check whether disallow_password_signin or enforce_identity_domain is enabled in your workspace profile. Both settings are enforced for every account. If your only admin signs in with a password, or with an email outside the enforced domain, that account loses its sign-in path on upgrade. The bytebase recovery CLI command is the break-glass path for a password sign-in lockout. It is an interactive session that connects to the metadata database directly rather than through the API, so it works while the UI is inaccessible. It can’t bypass an enforced domain: that lockout needs an administrator whose email is inside the domain. See Recover Administrator Access for the procedure.

Legacy Export-Data Issue Workflow Removed

The old async “export data” issue workflow — deprecated in a prior release — is fully removed. JIT access-grant exports and synchronous SQL Editor export are unaffected. Any integration still polling the old export-issue API needs to move to one of those two paths.

⚙️ Install and Upgrade

Before upgrading: 1) Back up the metadata — in-place downgrade is not supported. 2) Do not run multiple containers on the same data directory. 3) Terraform users: upgrade Bytebase server first, then apply the new Terraform config.