Skip to content

@stratum-hq/mysql

@stratum-hq/mysql adds multi-tenant row isolation for applications using MySQL. Three isolation strategies are available: shared table, table-per-tenant, and database-per-tenant. Includes integrations for TypeORM, Knex, and Sequelize.

npm install @stratum-hq/mysql mysql2
import mysql from "mysql2/promise";
import { MysqlSharedAdapter } from "@stratum-hq/mysql";
const pool = mysql.createPool(process.env.MYSQL_URL!);
const adapter = new MysqlSharedAdapter({ pool, databaseName: "myapp" });
// Structured methods auto-inject tenant_id
const users = await adapter.scopedSelect("acme", "users");
await adapter.scopedInsert("acme", "users", { name: "Alice" });
  • Three isolation strategies: shared table, table-per-tenant, database-per-tenant
  • Structured query methods: scopedSelect, scopedInsert, scopedUpdate, scopedDelete with automatic tenant_id injection
  • TypeORM subscriber: auto-injects tenant_id on insert via AsyncLocalStorage
  • Knex helper: withTenantScope() wraps query builders with automatic WHERE clause
  • Sequelize adapter: withMysqlTenantScope() with try/finally session variable cleanup
  • MySQL View utilities: createTenantView() is deprecated and throws, because MySQL views cannot read session variables; dropTenantView() and setTenantSession() remain
  • GDPR purge: purgeTenantData() across all three strategies
  • LRU pool manager: active query tracking, idle timeout, configurable eviction

See the MySQL Multi-Tenancy guide for strategy selection, ORM integration details, security considerations, and performance tuning.