Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql

14.12.11

Администрирование - Информационная безопасность

T-SQL скрипт, позволяющий определить монопольно ли запущена база на сервере SQL,  а также перевести базу в multi user

Когда имеется целый зоопарк баз на SQL (да и в других случаях) бывает необходимо определить запущена база монопольно или нет из другой программы (будь то 1С или скрипт автоматического обмена)

Как известно 7-ка при монопольном режиме ставит SQL базу в single user. Получив значение этой переменной SQL Server для базы можно определить монопольно ли кто-либо в ней или нет (хотя конечно single user может быть включен и другими средствами, но опустим это как частный случай). Получить значение данного свойства от SQL Server можно выполнив запрос: 

EXEC sp_dboption 'BASE', 'single user'

Для этого для SQL версии можно воспользоваться следующим кодом 1С 7.7:

Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "EXEC sp_dboption 'BASE', 'single user'";
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Попытка 
 Если СокрЛП(Врег(ТЗ.ПолучитьЗначение(1, 2))) = "ON" Тогда 
 Сообщить("Монопольно"); 
 Иначе 
 Сообщить("Не монопольно"); 
 КонецЕсли; 
Исключение 
 Сообщить(ОписаниеОшибки()); 
КонецПопытки; 

Манипулируя этой переменной можно из запущенной 1С снять single user для текущей базы данных, при этом 1С при запуске будет воспринимать базу как запущенную монопольно и не даст войти другим пользователям. Это возможно сделать используя следующий T-SQL скрипт:

declare @CurDBName sysname
set @CurDBName = db_name()
exec sp_dboption @CurDBName, 'single user', 'false'

В 1С это выглядит так:

Если МонопольныйРежим() = 1 Тогда
   
ТекстЗапроса = "
    |declare @CurDBName sysname
    |set @CurDBName = db_name()
    |exec sp_dboption @CurDBName, 'single user', 'false'
    |"
;
   
ЗапросТекущаяБаза = СоздатьОбъект("ODBCRecordset");
    Если
ЗапросТекущаяБаза.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить(
"Не удалось снять Single User Mode" + РазделительСтрок + ЗапросТекущаяБаза.ПолучитьОписаниеОшибки(), "!");
        СтатусВозврата(
0);
        Возврат;
    КонецЕсли;
КонецЕсли;

 

См. также

Проверка часового пояса

Информационная безопасность Универсальные функции Платформа 1С v7.7 Бесплатно (free)

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    12780    kudenzov    3    

10

Злоумышленник зашифровал базы 1С и другие файлы

Информационная безопасность Защита ПО и шифрование Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Звонит пользователь, на экране сообщение ваши данные зашифрованы, введите пароль, пишите письма и т.д.

1 стартмани

08.11.2014    40153    44    aleksch21    85    

47

Отчет по правам пользователей для любой конфигурации "1С:Предприятия 7.7"

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Инструмент для наглядного анализа и сравнения наборов прав доступа в 1С 7.7 Работает в любых конфигурациях. В одной из обслуживаемых мной баз 40 наборов прав пользователей (120 пользователей). Этим отчетом очень наглядно выходит анализировать разницу в правах и просто описывать права пользователей в документации. Обновлено: - В новой версии отчета добавил сравнение двух разных баз и анализ внешней БД. - объекты метаданных представлены в виде дерева (объект "Дерево-Таблица значений" FormEx)

1 стартмани

11.02.2014    25192    162    Amel2010    15    

14

Проверка прав доступа текущего пользователя. 1с 7.7

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Украина Абонемент ($m)

Показывает права доступа текущего пользователя в базе 1с 7.7 .

1 стартмани

10.06.2013    20882    49    demon_sw    11    

6

Индивидуальная установка даты запрета редактирования документов в торговле 1С 7.7

Информационная безопасность Закрытие периода Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Абонемент ($m)

Установка даты запрета редактирования документов индивидуально для каждого пользователя,а также предоставление в индивидуальном порядке разрешения изменения конкретных документов в определенные периоды или в конкретные дни.Срок действия установок устанавливается вами. Вы можете спокойно настроить и уехать в отпуск.

1 стартмани

17.01.2013    30975    50    agent007_1    10    

4

Управление правами в 7.7 - "на лету" до каждой кнопочки!

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Система управления правами доступа "на лету" для конфигураций на платформе 1С:Предприятие 7.7. - Онлайн :: Не требует выхода пользователей. - Умная :: Позволяет управлять доступом хоть к каждой кнопке на форме. - Универсальная :: Встраивается в любую конфигурацию за 1 минуту! - Преемственная :: Сохраняет настройки существующих наборов прав.

1 стартмани

22.11.2012    34434    171    gavlexx    48    

39

Блокиратор запуска Информационной Базы

Инструменты администратора БД Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Блокирует запуск Информационной базы при входе пользователя

1 стартмани

25.10.2012    15125    14    sam-soft    9    

6
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Alias 176 11.03.11 18:45 Сейчас в теме
Простите, я чего-то не понял.
А нельзя для этой цели воспользоваться стандартной функцией МонопольныйРежим()?

МонопольныйРежим()
Синтаксис:
МонопольныйРежим()
Назначение:
Возвращает значение режима работы программы: 1 - программа запущена в монопольном режиме; 0 - программа запущена в сетевом режиме.
2. d0dger 82 11.03.11 21:02 Сейчас в теме
(1) Имелось ввиду смотреть монопольный ли режим не из текущей базы, запущенной монопольно. Например, у меня есть скрипт обмена данными, и из него запускается база, я могу с помощью этого скрипта определить запущена ли внешняя база монопольно.
3. Altair777 644 12.03.11 14:41 Сейчас в теме
А что вернет этот код ксли база совсем не открыта?
4. d0dger 82 14.03.11 10:02 Сейчас в теме
(3) вернет "не монопольно"
6. Altair777 644 14.03.11 10:52 Сейчас в теме
(4) думаю что это неправильно с точки зрения здравого смысла ;)
7. vip 14.03.11 11:53 Сейчас в теме
(6) Думаю, что абсолютно правильно.
Т.к. данный запрос просто показывает возможность работы базы в разделенном режиме.
5. virs 14.03.11 10:32 Сейчас в теме
Полезная обработка для тех, кто понимает, как использовать...
Однозначно +
8. Altair777 644 14.03.11 12:15 Сейчас в теме
с доработкой он сможет показывать возможность работы и в монопольном режиме
9. d0dger 82 14.03.11 16:49 Сейчас в теме
(8) vip прав, писалось для этих целей, как правило для всяких sql скриптов и vbs. Не представляю пока задачу, когда мне нужно знать можно ли запустить базу монопольно, а вот могу ли я к базе обратиться прямым запросом из вне - частая потребность. То о чем Вы говорите проще делать опираясь на данные, хранимые в файле ..\SYSLOG\links.tmp - так делает к примеру mlg_speed_viever
В общем истина в
virs пишет:
Полезная обработка для тех, кто понимает, как использовать...
Smith Iron; +1 Ответить
10. Altair777 644 14.03.11 17:20 Сейчас в теме
d0dger пишет:
Не представляю пока задачу, когда мне нужно знать можно ли запустить базу монопольно

Например, проверить возможность запуска пакетого режима конфигуратора (выгрузка).
Для этого база должна быть никем не открыта.

d0dger пишет:
То о чем Вы говорите проще делать опираясь на данные, хранимые в файле ..\SYSLOG\links.tmp

да, наверно так и есть :)
11. d0dger 82 14.03.11 18:56 Сейчас в теме
(10) можно настроить чтобы конфигуратор делал выгрузку даже если в базе кто-то есть. Хотя в принципе если там только монопольно можно, то обмен не пройдет и об появится запись в журнале регистрации, поэтому какой смысл анализировать есть ли кто-то в базе если задание обмена и так не застопорится?
Оставьте свое сообщение