Учёт DEPO в мастере: поле базы, логин и пароль bj на экране, скрипт показывается на странице

База DEPO — видимое поле (необязательно: пусто — найдётся по учётным таблицам), порт заполнен
по умолчанию. «Отдать скрипт администратору»: логин и пароль bj видны и меняются, «Показать
скрипт» выводит его на странице с кнопкой «Скопировать». В начале скрипта — блок «Проверьте
перед запуском»: @db и @pass.

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-06 13:35:01 +03:00
parent 46cbebaff7
commit be83b86747
6 changed files with 155 additions and 35 deletions
+25 -12
View File
@@ -57,19 +57,30 @@ func depoSetupScript(f FancyMSSQLSettings, db, login, pass string, agentJob bool
return depoSetupScriptPG(f, db, login, pass)
}
var b strings.Builder
job := "обработку вызывает сам bj"
job := "вызывает сам bj"
if agentJob {
job = "задание SQL Server Agent «" + depoJobName + "» для обработки обмена"
job = "задание SQL Server Agent «" + depoJobName + "»"
}
fmt.Fprintf(&b, `-- Bridge&Join: подготовка базы учёта DEPO для bj. Microsoft SQL Server.
-- Один скрипт: находит базу DEPO на сервере, создаёт логин bj (%[1]s), таблицы обмена FTV_M2M*, выдаёт
-- права (чтение учёта, запись только в таблицы обмена) и %[2]s.
-- Учётные данные DEPO скрипт не меняет. Запускать в SSMS или sqlcmd под логином с правами sysadmin.
-- Можно запускать повторно: уже сделанное не повторяется. Скрипт содержит пароль логина bj — после
-- выполнения файл удалите.
SET NOCOUNT ON;
DECLARE @db sysname = N'%[3]s'; -- база DEPO; пусто — найти на сервере по таблицам OD_FACES и OD_RESTS
-- ===== Проверьте перед запуском ==========================================
-- База DEPO: пусто — скрипт найдёт её сам по таблицам OD_FACES и OD_RESTS.
DECLARE @db sysname = N'%[3]s';
-- Пароль логина bj (%[1]s). Меняете — впишите тот же пароль в bj, шаг «Учёт DEPO».
DECLARE @pass nvarchar(128) = N'%[4]s';
-- =========================================================================
-- Что делает: находит базу DEPO, создаёт логин bj и таблицы обмена FTV_M2M*, выдаёт права
-- (чтение учёта, запись только в таблицы обмена). Обработка обмена: %[2]s.
-- Учётные данные DEPO не меняет. Запускать в SSMS или sqlcmd под логином с правами sysadmin.
-- Можно запускать повторно. В скрипте пароль логина bj — после выполнения файл удалите.
IF @pass = N''
BEGIN
RAISERROR(N'Впишите пароль логина bj в @pass в начале скрипта и запустите снова.', 16, 1);
RETURN;
END
DECLARE @found int;
IF @db = N''
BEGIN
@@ -89,12 +100,12 @@ DECLARE @in nvarchar(300) = N'USE ' + QUOTENAME(@db) + N'; ';
-- 1. Логин bj
IF SUSER_ID(N'%[1]s') IS NULL
EXEC(N'CREATE LOGIN [%[1]s] WITH PASSWORD = N''%[4]s'', CHECK_POLICY = ON, DEFAULT_DATABASE = ' + QUOTENAME(@db))
EXEC(N'CREATE LOGIN [%[1]s] WITH PASSWORD = N''' + REPLACE(@pass, N'''', N'''''') + N''', CHECK_POLICY = ON, DEFAULT_DATABASE = ' + QUOTENAME(@db))
ELSE
EXEC(N'ALTER LOGIN [%[1]s] WITH PASSWORD = N''%[4]s''');
EXEC(N'ALTER LOGIN [%[1]s] WITH PASSWORD = N''' + REPLACE(@pass, N'''', N'''''') + N'''');
-- 2. Таблицы обмена FTV_M2M* (только недостающие таблицы, колонки и индексы — данные не меняются)
`, login, job, sqlStr(db), sqlStr(sqlStr(pass)))
`, login, job, sqlStr(db), sqlStr(pass))
for _, s := range depoTablesDDL(false) {
fmt.Fprintf(&b, "EXEC(@in + N'%s');\n", sqlStr(s))
}
@@ -137,6 +148,8 @@ func depoSetupScriptPG(f FancyMSSQLSettings, db, login, pass string) string {
-- Создаёт роль bj (%[2]s), таблицы обмена FTV_M2M* и права (чтение учёта, запись только в таблицы обмена).
-- Обработку обмена вызывает сам bj. Учётные данные скрипт не меняет. Можно запускать повторно.
-- Скрипт содержит пароль роли bj — после выполнения файл удалите.
-- Проверьте перед запуском: база DEPO — "%[1]s", роль bj — "%[2]s", её пароль — в строках PASSWORD ниже
-- (меняете — впишите тот же пароль в bj, шаг «Учёт DEPO»).
\set ON_ERROR_STOP on
DO $$ BEGIN