|
| 1 | +namespace Trion.Core.Database; |
| 2 | + |
| 3 | +/// <summary> |
| 4 | +/// SQL executed once immediately after MySQL is initialized for the first time. |
| 5 | +/// Creates the root password, the 'phoenix' application user, and all |
| 6 | +/// expansion-specific database schemas. |
| 7 | +/// </summary> |
| 8 | +public static class MySqlInitSql |
| 9 | +{ |
| 10 | + /// <summary> |
| 11 | + /// Password assigned to <c>root@localhost</c> during first-run setup. |
| 12 | + /// Used by DatabaseService.PingAsync to verify MySQL connectivity |
| 13 | + /// with known-good credentials regardless of the application user configuration. |
| 14 | + /// </summary> |
| 15 | + public const string RootPassword = "FlyingPhoenix"; |
| 16 | + |
| 17 | + /// <summary> |
| 18 | + /// Full first-run initialization script for MySQL 8. |
| 19 | + /// Run via <c>mysql.exe --user=root --host=127.0.0.1 --port=3306 --protocol=TCP</c> |
| 20 | + /// with this text piped to stdin (Windows). |
| 21 | + /// On Linux use <see cref="FirstRunSetupLinux"/> instead (MariaDB-compatible syntax). |
| 22 | + /// </summary> |
| 23 | + public const string FirstRunSetup = """ |
| 24 | + -- ── Root account ────────────────────────────────────────────────────── |
| 25 | + ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'FlyingPhoenix'; |
| 26 | +
|
| 27 | + -- ── Application user ─────────────────────────────────────────────────── |
| 28 | + DROP USER IF EXISTS 'phoenix'@'localhost'; |
| 29 | + CREATE USER 'phoenix'@'localhost' |
| 30 | + IDENTIFIED WITH 'caching_sha2_password' BY 'phoenix' |
| 31 | + WITH MAX_QUERIES_PER_HOUR 0 |
| 32 | + MAX_CONNECTIONS_PER_HOUR 0 |
| 33 | + MAX_UPDATES_PER_HOUR 0; |
| 34 | + GRANT ALL PRIVILEGES ON *.* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 35 | +
|
| 36 | + -- ── Classic databases ────────────────────────────────────────────────── |
| 37 | + CREATE DATABASE IF NOT EXISTS `classic_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 38 | + CREATE DATABASE IF NOT EXISTS `classic_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 39 | + CREATE DATABASE IF NOT EXISTS `classic_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 40 | + CREATE DATABASE IF NOT EXISTS `classic_logs` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; |
| 41 | +
|
| 42 | + GRANT ALL PRIVILEGES ON `classic_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 43 | + GRANT ALL PRIVILEGES ON `classic_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 44 | + GRANT ALL PRIVILEGES ON `classic_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 45 | + GRANT ALL PRIVILEGES ON `classic_logs` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 46 | +
|
| 47 | + -- ── TBC databases ────────────────────────────────────────────────────── |
| 48 | + CREATE DATABASE IF NOT EXISTS `tbc_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 49 | + CREATE DATABASE IF NOT EXISTS `tbc_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 50 | + CREATE DATABASE IF NOT EXISTS `tbc_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 51 | + CREATE DATABASE IF NOT EXISTS `tbc_logs` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; |
| 52 | +
|
| 53 | + GRANT ALL PRIVILEGES ON `tbc_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 54 | + GRANT ALL PRIVILEGES ON `tbc_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 55 | + GRANT ALL PRIVILEGES ON `tbc_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 56 | + GRANT ALL PRIVILEGES ON `tbc_logs` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 57 | +
|
| 58 | + -- ── WotLK databases ──────────────────────────────────────────────────── |
| 59 | + CREATE DATABASE IF NOT EXISTS `wotlk_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 60 | + CREATE DATABASE IF NOT EXISTS `wotlk_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 61 | + CREATE DATABASE IF NOT EXISTS `wotlk_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 62 | + CREATE DATABASE IF NOT EXISTS `wotlk_playerbots` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; |
| 63 | +
|
| 64 | + GRANT ALL PRIVILEGES ON `wotlk_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 65 | + GRANT ALL PRIVILEGES ON `wotlk_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 66 | + GRANT ALL PRIVILEGES ON `wotlk_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 67 | + GRANT ALL PRIVILEGES ON `wotlk_playerbots` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 68 | +
|
| 69 | + -- ── Cataclysm databases ──────────────────────────────────────────────── |
| 70 | + CREATE DATABASE IF NOT EXISTS `cata_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 71 | + CREATE DATABASE IF NOT EXISTS `cata_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 72 | + CREATE DATABASE IF NOT EXISTS `cata_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 73 | +
|
| 74 | + GRANT ALL PRIVILEGES ON `cata_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 75 | + GRANT ALL PRIVILEGES ON `cata_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 76 | + GRANT ALL PRIVILEGES ON `cata_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 77 | +
|
| 78 | + -- ── MoP databases ────────────────────────────────────────────────────── |
| 79 | + CREATE DATABASE IF NOT EXISTS `mop_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 80 | + CREATE DATABASE IF NOT EXISTS `mop_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 81 | + CREATE DATABASE IF NOT EXISTS `mop_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 82 | +
|
| 83 | + GRANT ALL PRIVILEGES ON `mop_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 84 | + GRANT ALL PRIVILEGES ON `mop_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 85 | + GRANT ALL PRIVILEGES ON `mop_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 86 | +
|
| 87 | + -- ── Custom core databases ───────────────────────────────────────────── |
| 88 | + CREATE DATABASE IF NOT EXISTS `custom_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 89 | + CREATE DATABASE IF NOT EXISTS `custom_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 90 | + CREATE DATABASE IF NOT EXISTS `custom_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci; |
| 91 | +
|
| 92 | + GRANT ALL PRIVILEGES ON `custom_world` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 93 | + GRANT ALL PRIVILEGES ON `custom_characters` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 94 | + GRANT ALL PRIVILEGES ON `custom_auth` .* TO 'phoenix'@'localhost' WITH GRANT OPTION; |
| 95 | +
|
| 96 | + -- ── Flush ────────────────────────────────────────────────────────────── |
| 97 | + FLUSH PRIVILEGES; |
| 98 | + """; |
| 99 | + |
| 100 | + /// <summary> |
| 101 | + /// First-run initialization script compatible with both MySQL 8 and MariaDB. |
| 102 | + /// Uses <c>IDENTIFIED BY</c> without specifying an auth plugin, which works on |
| 103 | + /// both MySQL 8 (defaults to caching_sha2_password) and MariaDB. |
| 104 | + /// Used by <c>LinuxMySqlService</c>. |
| 105 | + /// </summary> |
| 106 | + public static readonly string FirstRunSetupLinux = |
| 107 | + FirstRunSetup.Replace( |
| 108 | + "IDENTIFIED WITH 'caching_sha2_password' BY", |
| 109 | + "IDENTIFIED BY"); |
| 110 | +} |
0 commit comments