-- Run as a MySQL administrator after replacing the host pattern and generated -- passwords. Keep both users restricted to the private application subnet. CREATE USER 'osg_account_runtime'@'10.20.%' IDENTIFIED BY 'REPLACE_WITH_RUNTIME_PASSWORD'; CREATE USER 'osg_account_migrator'@'10.20.%' IDENTIFIED BY 'REPLACE_WITH_MIGRATION_PASSWORD'; -- Flyway owns schema evolution. This account is not used by the Hikari runtime pool. GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, REFERENCES, TRIGGER ON osg_account.* TO 'osg_account_migrator'@'10.20.%'; -- Runtime reads are explicit so the account cannot read Flyway metadata or future -- tables until an administrator reviews and grants access. GRANT SELECT ON osg_account.accounts TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.apple_credentials TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.sessions TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.apple_event_receipts TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.credit_accounts TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.credit_rate_versions TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.credit_reservations TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.referral_campaigns TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.referral_campaign_budgets TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.referral_codes TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.referral_bindings TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.credit_usage_records TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.credit_ledger TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.provider_requests TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.usage_records TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.gateway_grants TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.gateway_grant_scopes TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.gateway_refresh_tokens TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.devicecheck_trial_claims TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.app_attest_challenges TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.app_attest_keys TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.account_identity_tombstones TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.apple_revocation_outbox TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.account_profiles TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.admin_operators TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.admin_sessions TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.admin_audit_log TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.admin_credit_grants TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.storekit_credit_purchases TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.product_analytics_installations TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.product_analytics_events TO 'osg_account_runtime'@'10.20.%'; GRANT SELECT ON osg_account.product_analytics_daily_counters TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE, DELETE ON osg_account.accounts TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.apple_credentials TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.sessions TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.apple_event_receipts TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.credit_accounts TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.credit_reservations TO 'osg_account_runtime'@'10.20.%'; GRANT UPDATE ON osg_account.referral_campaign_budgets TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.referral_codes TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.referral_bindings TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.credit_usage_records TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.credit_ledger TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.provider_requests TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.usage_records TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.gateway_grants TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.gateway_grant_scopes TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.gateway_refresh_tokens TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.devicecheck_trial_claims TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.app_attest_challenges TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.app_attest_keys TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.account_identity_tombstones TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.apple_revocation_outbox TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.account_profiles TO 'osg_account_runtime'@'10.20.%'; -- Operators and sessions are mutable authentication state. Audit and grant -- records remain append-only and deliberately receive no UPDATE or DELETE. GRANT INSERT, UPDATE ON osg_account.admin_operators TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE, DELETE ON osg_account.admin_sessions TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.admin_audit_log TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.admin_credit_grants TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.storekit_credit_purchases TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE, DELETE ON osg_account.product_analytics_installations TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT ON osg_account.product_analytics_events TO 'osg_account_runtime'@'10.20.%'; GRANT INSERT, UPDATE ON osg_account.product_analytics_daily_counters TO 'osg_account_runtime'@'10.20.%'; -- Deliberately absent: global privileges, GRANT OPTION, FILE, PROCESS, SUPER, -- CREATE USER, and UPDATE/DELETE on immutable ledger or usage-history tables. SHOW GRANTS FOR 'osg_account_runtime'@'10.20.%'; SHOW GRANTS FOR 'osg_account_migrator'@'10.20.%';