Скрипт создания логина DEPO: пароль из поля мастера подставляется в скрипт (передаётся только в теле POST, не сохраняется, кавычки экранируются)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-05 13:21:51 +03:00
parent cb047b93f6
commit 2999eaf189
3 changed files with 60 additions and 22 deletions
+15 -3
View File
@@ -6,19 +6,31 @@ import (
)
func TestDepoLoginScript(t *testing.T) {
ms := depoLoginScript(false, "CLIENT_DEPO", "bj_svc")
ms := depoLoginScript(false, "CLIENT_DEPO", "bj_svc", "")
for _, w := range []string{"CREATE LOGIN [bj_svc]", "USE [CLIENT_DEPO]", "CREATE USER [bj_svc] FOR LOGIN [bj_svc]", "db_datareader", "ALTER USER [bj_svc] WITH LOGIN = [bj_svc]"} {
if !strings.Contains(ms, w) {
t.Fatalf("MS SQL: нет %q", w)
}
}
pg := depoLoginScript(true, "depo", "bj_svc")
pg := depoLoginScript(true, "depo", "bj_svc", "")
for _, w := range []string{`CREATE ROLE "bj_svc" LOGIN`, `GRANT CONNECT ON DATABASE "depo"`, `GRANT SELECT ON ALL TABLES`} {
if !strings.Contains(pg, w) {
t.Fatalf("PostgreSQL: нет %q", w)
}
}
if s := depoLoginScript(false, "bad;db", "x'; DROP"); !strings.Contains(s, "[BJ_DEPO_DATA]") || !strings.Contains(s, "[bj_user]") {
if s := depoLoginScript(false, "bad;db", "x'; DROP", ""); !strings.Contains(s, "[BJ_DEPO_DATA]") || !strings.Contains(s, "[bj_user]") {
t.Fatal("недопустимые имена — подставляются значения по умолчанию")
}
}
func TestDepoLoginScriptPassword(t *testing.T) {
if s := depoLoginScript(false, "D", "u", "Pa'ss"); !strings.Contains(s, "PASSWORD = N'Pa''ss'") || strings.Contains(s, "N'ЗАМЕНИТЕ_НА_ПАРОЛЬ'") {
t.Fatal("MS SQL: пароль из поля с экранированием кавычки")
}
if s := depoLoginScript(true, "d", "u", "p'w%x"); !strings.Contains(s, "PASSWORD 'p''w%x'") {
t.Fatal("PostgreSQL: пароль из поля")
}
if s := depoLoginScript(false, "D", "u", ""); !strings.Contains(s, "N'ЗАМЕНИТЕ_НА_ПАРОЛЬ'") {
t.Fatal("пустой пароль — заглушка")
}
}