Перейти к содержанию

Полезные SQL скрипты для 1С

Материал из Wiki Sestrica
Версия от 17:17, 14 мая 2026; Администратор (обсуждение | вклад) (Новая страница: «* Создание учетки на sql-сервере и добавление в базы данных <pre> -- ============================================= -- Параметры (изменяйте только здесь) -- ============================================= DECLARE @LoginName NVARCHAR(128) = N'login_name'; DECLARE @Password NVARCHAR(128) = N'password'; DECLARE @Databases NVARCHAR(MAX) = N'base1,base2,base3,base4'; -- базы чере...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
  • Создание учетки на sql-сервере и добавление в базы данных
-- =============================================
-- Параметры (изменяйте только здесь)
-- =============================================
DECLARE @LoginName  NVARCHAR(128) = N'login_name';
DECLARE @Password   NVARCHAR(128) = N'password';
DECLARE @Databases  NVARCHAR(MAX) = N'base1,base2,base3,base4';  -- базы через запятую

-- =============================================
-- Основная логика (не меняйте)
-- =============================================

SET NOCOUNT ON;

DECLARE @SQL NVARCHAR(MAX);

-- 1. Создание логина на уровне сервера
SET @SQL = N'
USE master;
CREATE LOGIN ' + QUOTENAME(@LoginName) + N' 
    WITH PASSWORD = ' + QUOTENAME(@Password, '''') + N';';

EXEC sp_executesql @SQL;

PRINT 'Логин ' + @LoginName + ' успешно создан.';

-- 2. Предоставление права ALTER TRACE
SET @SQL = N'GRANT ALTER TRACE TO ' + QUOTENAME(@LoginName) + N';';
EXEC sp_executesql @SQL;

PRINT 'Право ALTER TRACE выдано.';

-- 3. Обработка каждой базы данных
DECLARE @DBName NVARCHAR(128);
DECLARE @Cur CURSOR;

SET @Cur = CURSOR LOCAL FAST_FORWARD FOR
    SELECT TRIM(value) 
    FROM STRING_SPLIT(@Databases, ',');

OPEN @Cur;
FETCH NEXT FROM @Cur INTO @DBName;

WHILE @@FETCH_STATUS = 0
BEGIN
    IF DB_ID(@DBName) IS NOT NULL
    BEGIN
        SET @SQL = N'
USE ' + QUOTENAME(@DBName) + N';
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ' + QUOTENAME(@LoginName, '''') + N')
    CREATE USER ' + QUOTENAME(@LoginName) + N' FOR LOGIN ' + QUOTENAME(@LoginName) + N';

ALTER ROLE db_datareader ADD MEMBER ' + QUOTENAME(@LoginName) + N';';

        EXEC sp_executesql @SQL;
        
        PRINT 'Пользователь создан и добавлен в db_datareader в базе: ' + @DBName;
    END
    ELSE
    BEGIN
        PRINT 'Предупреждение: База ' + @DBName + ' не найдена!';
    END

    FETCH NEXT FROM @Cur INTO @DBName;
END

CLOSE @Cur;
DEALLOCATE @Cur;

PRINT 'Скрипт выполнен успешно.';