Files
inquiry_robot/deploy/_remote_mysql_root_probe.ps1
T

56 lines
2.0 KiB
PowerShell

# Probe local MySQL root auth without printing secrets.
$ErrorActionPreference = "Stop"
$iniPath = "C:\yutongda\tools\mysql-8.0.39-winx64\my.ini"
$mysql = "C:\yutongda\tools\mysql-8.0.39-winx64\bin\mysql.exe"
Write-Output "=== my.ini password line shape ==="
$ini = Get-Content $iniPath -Raw
$hasPwdLine = [regex]::IsMatch($ini, "(?im)^\s*password\s*=")
$m = [regex]::Match($ini, "(?im)^\s*password\s*=\s*(.*)$")
$len = if ($m.Success) { $m.Groups[1].Value.Trim().Length } else { -1 }
Write-Output ("hasPwdLine=" + $hasPwdLine + " valueLen=" + $len)
Write-Output "=== try bare root (no -p) ==="
& $mysql -uroot -e "SELECT 'bare_ok' AS r" 2>&1 | Select-Object -First 4
$candidates = @(
"root", "Root@123", "Mysql@2026", "mysql", "admin",
"Ytd@2026", "YTD@2026", "Postgres@2026", "Redis@2026"
)
# Also try password from my.ini if present (do not print)
if ($m.Success -and $len -gt 0) {
$fromIni = $m.Groups[1].Value.Trim().Trim('"').Trim("'")
$candidates = @($fromIni) + $candidates
}
Write-Output "=== try candidate passwords (only report hit) ==="
$hit = $false
foreach ($p in $candidates) {
$out = & $mysql -uroot "-p$p" -e "SELECT 'try_ok' AS r" 2>&1 | Out-String
if ($LASTEXITCODE -eq 0 -and $out -match "try_ok") {
Write-Output ("HIT valueLen=" + $p.Length + " fromIni=" + ($p -eq ($candidates[0] -and $len -gt 0)))
# stash for next script via protected file (ACL ytd_extdev only)
$stash = "E:\wwwroot\ops\.mysql_root_stash.tmp"
Set-Content -Path $stash -Value $p -Encoding ascii -NoNewline
icacls $stash /inheritance:r | Out-Null
icacls $stash /grant:r "${env:USERNAME}:(R)" | Out-Null
$hit = $true
break
}
}
if (-not $hit) { Write-Output "NO_HIT" }
Write-Output "=== look for other credential files ==="
@(
"C:\yutongda\secure\*",
"C:\yutongda\config\*mysql*",
"C:\yutongda\config\*db*",
"E:\wwwroot\ops\*mysql*",
"E:\wwwroot\ops\*secret*"
) | ForEach-Object {
Get-ChildItem $_ -ErrorAction SilentlyContinue | ForEach-Object {
Write-Output $_.FullName
}
}