спасибо.
мне Zywall попадался, несколько стареньких. Hаботал я с ним совсем немного, уже не помню почему поменяли на микротики.
проблем не было, но настройка фаервола в виде матрицы мне категорически не понравились:)
по части DFL — интерфейс там на самом деле логичный и удобный, просто непривычный. в WW-прошивках старых, и теперь и в RU-новых так иещё удобнее — импорт скрипта через вебморду, сниффер с отображением через вебморду.
а вот по части стабильности… с 210-800-260-800-1600 проблем не было, погонял новый свежий славный 870 — там проблемы пока есть. оригинальный Clavister багфикс выпустил, D-link пока не шевелится.
; =============================================================================
; _Crypto_GetRandomString($iLen[, $iFlag])
; — ; Получение случайной символьной строки заданной длины
;
; $iLen: длина получаемой строки
; $iFlag: какие символы используются при генерации строки
;: 1 — цифры
;: 2 — большие английские буквы
;: 4 — малые английские буквы
;: 8 — основные спецсимволы
;: 16 — дополнительные спецсимволы
;: 32 — русские буквы
;
; При успехе: возвращает бинарную строку
;
; При неудаче: пустая строка:
;: error, extended — код ошибки _Crypto_GetRandomBinary()
;
;: AutoIT v3.3.0.0
; =============================================================================
Func _CryptoGetRandomString($iLen, $iFlag = 15)
Local $iMid, $sABC = "", $sOut = ""
If BitAND($iFlag,1) Then $sABC &= "0123456789"
If BitAND($iFlag,2) Then $sABC &= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If BitAND($iFlag,4) Then $sABC &= "abcdefghijklmnopqrstuvwxyz"
If BitAND($iFlag,8) Then $sABC &= "~!@#$%^&*()"
If BitAND($iFlag,16) Then $sABC &= '`+-=",.<>/?|[]{};:'&"'"
If BitAND($iFlag,32) Then $sABC &= 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя'
Local $iABC = StringLen($sABC)
Local $bPWD = _Crypto_GetRandomBinary($iLen)
If error Then Return SetError(@error, extended, $sOut); Ошибка _Crypto_GetBinary
For $i=1 To BinaryLen($bPWD)
$iMid = Int(BinaryMid($bPWD,$i,1))*$iABC/0x100+1
$sOut &= StringMid($sABC, $iMid, 1)
Next
Return $sOut
EndFunc; ==> _Crypto_GetRandomString
; =============================================================================
; _Crypto_GetRandomBinary($iLen)
; — ; Получение случайной строки байтов заданной длины
;
; $iLen: количество байтов в бинарной строке
;
; При успехе: возвращает бинарную строку
;
; При неудаче: возвращаемое значение не является бинарной строкой:
;: error=1, extended=1 — ошибка открытия advapi32.dll
;: error=1, extended=2 — ошибка открытия kernel32.dll
;: error=2 — RunTime ошибка API, extended — код ошибки
;
;: AutoIT v3.3.0.0
; =============================================================================
Func _Crypto_GetRandomBinary($iLen)
Local $phProv = DllStructCreate("ulongptr"), $aRet
Local $pbBuffer = DLLStructCreate("byte[" & $iLen & "]")
; Открытие DLL
Local $hAdvApi = DllOpen("advapi32.dll"), $hKernel = DllOpen("kernel32.dll")
If $hAdvApi=-1 Then Return SetError(1, 1, DllClose($hKernel)); Ошибка открытия advapi32.dll
If $hKernel=-1 Then Return SetError(1, 2, DllClose($hAdvApi)); Ошибка открытия kernel32.dll
; Создание описателя криптохранилища
$aRet = DllCall($hAdvApi, "int", "CryptAcquireContext",
"ptr", DllStructGetPtr($phProv), "ptr", 0, "ptr", 0, "dword", 1, "dword", 0xF0000000)
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
If UBound($aRet)=1 And $aRet[0]=0x80090016 Then
$aRet = DllCall($hAdvApi, "int", "CryptAcquireContext", "ptr", DllStructGetPtr($phProv), "ptr", 0, "ptr", 0, "dword", 1, "dword", 0xF0000008)
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
EndIf
If UBound($aRet)>1 Then
; Генерация случайной последовательности байтов
$aRet = DllCall($hAdvApi, "int", "CryptGenRandom",
"ptr", DllStructGetData($phProv, 1), "dword", $iLen, "ptr", DllStructGetPtr($pbBuffer))
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
; Закрытие описателя криптохранилища
DllCall($hAdvApi, "long", "CryptReleaseContext", _
"ulong_ptr", DllStructGetData($phProv, 1), "dword", 0)
EndIf
DllClose($hKernel)
DllClose($hAdvApi)
If UBound($aRet)=1 Then Return SetError(2, $aRet[0], 0) ; Ошибка API RunTime
Return DllStructGetData($pbBuffer, 1) ; Возврат строки
что там винапи, что там винапи. только павершелл на старых системах нужно ставить отдельно и часть модулей не работает, дотнет местами работает медленно, ну и собирать в ехе нужно сомнительным софтом. впрочем, плюсы павершелла сложно недооценить.
а вот чем вам не угодили DFL и Zywall? просто любопытно.
если база на поддержке — то штатным механизмом (запуск с ключом /UpdateCfg). вообще штатный механизм обновления из предприятия типовых баз весьма неплох — скачивается .hta файл, оттуда ком-соединениями управляется база (выгоняются пользователи. делается бэкап, последовательно применяются нужные .cf). или вы имеете ввиду обновление нетиповых\снятых с поддержки баз?
я читал про эту методику, но пока не применял — негде. если есть возможность выкинуть людей из базы на время бэкапа, то вопроса не стоит, тут можно чем угодно бэкапить:)
в моей практике хорошие 1с-специалисты бежали от такой рутины как от огня, а плохих… лучше не брать вовсе :) Это как заставить ведущего сисадмина, короля Active Directory, заводить в ней пользователей. другое дело, что структура пользователей и групп должна быть чёткой, а не сотня дополнительных свойств и хардкода имён пользователей в обработках.
Хорошая тема создавать пользователей отделу кадров, при приёме на работу. сразу и в 1с, и в AD (автоматически). но такое может привести к безумию в наших реалиях =(
согласен. как я уже писал, я не могу позволить себе монопольный доступ к базе… поэтому где нужно бэкапить — я копирую с vss-снапшота. на озвученных точках бэкапить очень хочется, но было не реально — и монопольного доступа не получить, и железо дряхлое и тухлое. поэтому и chdbfl в обёртке.
в последствии там переехали на мини-сервачки с линуксом и постгре.
на эту тему много копий сломано, можно ли бэкапить выгрузкой, спорить не буду. 1С не рекомендует, поскольку не может гарантировать, что dt-шка загрузится обратно.
на моей практике проблемы были только при бэкапе уже битой базы или если пытаться выгрузить базу, где размер какой-нибудь таблицы больше 4гб.
вам нужно чтоб она была закрыта. использование vss при копировании (я так делаю) ситуацию спасает, но не до конца — есть шанс получить битую базу за счёт копирования снапшота, сделанного в момент записи.
единственный православный вариант бэкапа файловой базы — выгрузка в .dt. Ну или хотя бы гарантировать отсутствие рабочих процессов в базе. оба варианта не всегда реальны (отключение электричества в нерабочие часы).
не, как было написано — когда обычный клиент с 2-4 базами всякие затейства не нужны (ну максимум — заведение пользователей и какие-нибудь хитрые регламентные задачи). Но вот у меня был клиент — бухгалтерский аутсорс, пара сотен файловых баз и сотня скулёвых. согласовать с пользователями регулярные обновления конфигураций в автоматическом режиме не реально, руками обновлять — свихнёшься, но сами пользователи вполне бодро обновляют базы (в том числе и скулевые), как через конфигуратор, так и через предприятие. так же как и классификаторы:) тут правда пришлось повозится с SRP и нагородить ещё костылей (грёбаный bnk.exe!), но это уже детали.
отвечу по пунктам:)
1. далеко не все настройки хранятся в кэше. + представьте две сотни файловых баз, каждая из которых регулярно обновляется, причем самими пользователями.
2. об этом и есть предупреждение. опять же, представьте РИБ c файловыми базами в магазинах. бэкап файловой базы — это отдельная песня (а необходимо держать и архив бэкапов), выгрузка нового образа занимает время, а проверка на физ. целостность занимает полчаса от силы — и в 95% случаев магазин может торговать. да и в случае повреждения документов можно перепровести их в центральном узле.
4. пример приведен для бухгалтерии, доработать можно и до любой другой конфигурации. а на счет текучки… контора на контору не приходится:)
5. да, всё верно. или когда сотню баз нужно разово перенести — написать скрипт быстрее, чем руками:)
БП 2.0 и УТ 10.3 не поддерживают управляемые формы и следовательно работу в тонком клиенте.
именно про это я и написал)
Кроме того я бы не сказал что тонкий клиент в обычном режим (не через HTTP) менее требовательный к соединению чем толстый.
ощутимо менее требовательный, особенно к latency. ну по крайней мере, в моей практике на относительно тонких каналах с относительно высоким пингом тонкий клиент в обычном режиме выручал.
а вот если нужен именно толстый, тут да, или доставлять приложение, так или иначе (remoteapp, ulteo, xenapp, etc), или пускать на полноценный терминал.
у 7.7 была такая фишка — что если хоть один из компов клиентов тугой, тупить начинают все. в 8ке этого нет (ну если не свалится в блокировки конечно).
Исключительно дело привычки.
согласен. ну уже не раз и не два звонили люди в ужасе, обновив случайно до 3.0. впрочем, кому-то даже нравится, но их, по крайней мере у меня, меньшинство:)
1с 7.7 была более требовательна к каналу и к железу всех участников работы.
а в 8.х уже придумали тонкий клиент\веб клиент для работы в том числе и через WAN.
одна проблема — в 11 торговле нет порционного учета, а от бух-ии 3.0 бухи сходят с ума
то даже с высокими портами ломятся, хоть и реже. без fail2ban никуда (ts_block, evlwatcher, или свои скрипты).
да, raid1 c hotspare, или как в достижении кучи девяток после запятой уменьшить память в три раза:)
можно намутить свою поставку обновления а-ля штатная — https://its.1c.ru/db/metod8dev#content:4727:hdoc
спасибо.
мне Zywall попадался, несколько стареньких. Hаботал я с ним совсем немного, уже не помню почему поменяли на микротики.
проблем не было, но настройка фаервола в виде матрицы мне категорически не понравились:)
по части DFL — интерфейс там на самом деле логичный и удобный, просто непривычный. в WW-прошивках старых, и теперь и в RU-новых так иещё удобнее — импорт скрипта через вебморду, сниффер с отображением через вебморду.
а вот по части стабильности… с 210-800-260-800-1600 проблем не было, погонял новый свежий славный 870 — там проблемы пока есть. оригинальный Clavister багфикс выпустил, D-link пока не шевелится.
прикольнее СДИ1 (Система\Сервер Доменных Имен) и безпи (Безопасность Протокола Интернет). правильнее наверное Сохранность Межесетевого Протокола…
о! СерДомИм и СохМежПрот.
по тексту есть ссылка..
`
; =============================================================================
; _Crypto_GetRandomString($iLen[, $iFlag])
; — ; Получение случайной символьной строки заданной длины
;
; $iLen: длина получаемой строки
; $iFlag: какие символы используются при генерации строки
;: 1 — цифры
;: 2 — большие английские буквы
;: 4 — малые английские буквы
;: 8 — основные спецсимволы
;: 16 — дополнительные спецсимволы
;: 32 — русские буквы
;
; При успехе: возвращает бинарную строку
;
; При неудаче: пустая строка:
;: error, extended — код ошибки _Crypto_GetRandomBinary()
;
;: AutoIT v3.3.0.0
; =============================================================================
Func _CryptoGetRandomString($iLen, $iFlag = 15)
Local $iMid, $sABC = "", $sOut = ""
If BitAND($iFlag,1) Then $sABC &= "0123456789"
If BitAND($iFlag,2) Then $sABC &= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If BitAND($iFlag,4) Then $sABC &= "abcdefghijklmnopqrstuvwxyz"
If BitAND($iFlag,8) Then $sABC &= "~!@#$%^&*()"
If BitAND($iFlag,16) Then $sABC &= '`+-=",.<>/?|[]{};:'&"'"
If BitAND($iFlag,32) Then $sABC &= 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя'
Local $iABC = StringLen($sABC)
Local $bPWD = _Crypto_GetRandomBinary($iLen)
If error Then Return SetError(@error, extended, $sOut); Ошибка _Crypto_GetBinary
EndFunc; ==> _Crypto_GetRandomString
; =============================================================================
; _Crypto_GetRandomBinary($iLen)
; — ; Получение случайной строки байтов заданной длины
;
; $iLen: количество байтов в бинарной строке
;
; При успехе: возвращает бинарную строку
;
; При неудаче: возвращаемое значение не является бинарной строкой:
;: error=1, extended=1 — ошибка открытия advapi32.dll
;: error=1, extended=2 — ошибка открытия kernel32.dll
;: error=2 — RunTime ошибка API, extended — код ошибки
;
;: AutoIT v3.3.0.0
; =============================================================================
Func _Crypto_GetRandomBinary($iLen)
Local $phProv = DllStructCreate("ulongptr"), $aRet
Local $pbBuffer = DLLStructCreate("byte[" & $iLen & "]")
; Открытие DLL
Local $hAdvApi = DllOpen("advapi32.dll"), $hKernel = DllOpen("kernel32.dll")
If $hAdvApi=-1 Then Return SetError(1, 1, DllClose($hKernel)); Ошибка открытия advapi32.dll
If $hKernel=-1 Then Return SetError(1, 2, DllClose($hAdvApi)); Ошибка открытия kernel32.dll
; Создание описателя криптохранилища
$aRet = DllCall($hAdvApi, "int", "CryptAcquireContext",
"ptr", DllStructGetPtr($phProv), "ptr", 0, "ptr", 0, "dword", 1, "dword", 0xF0000000)
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
If UBound($aRet)=1 And $aRet[0]=0x80090016 Then
$aRet = DllCall($hAdvApi, "int", "CryptAcquireContext", "ptr", DllStructGetPtr($phProv), "ptr", 0, "ptr", 0, "dword", 1, "dword", 0xF0000008)
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
EndIf
If UBound($aRet)>1 Then
; Генерация случайной последовательности байтов
$aRet = DllCall($hAdvApi, "int", "CryptGenRandom",
"ptr", DllStructGetData($phProv, 1), "dword", $iLen, "ptr", DllStructGetPtr($pbBuffer))
If $aRet[0]=0 Then $aRet = DllCall($hKernel, "int", "GetLastError")
; Закрытие описателя криптохранилища
DllCall($hAdvApi, "long", "CryptReleaseContext", _
"ulong_ptr", DllStructGetData($phProv, 1), "dword", 0)
EndIf
DllClose($hKernel)
DllClose($hAdvApi)
EndFunc; ==> _Crypto_GetRandomBinary
`
а вот чем вам не угодили DFL и Zywall? просто любопытно.
в моей практике хорошие 1с-специалисты бежали от такой рутины как от огня, а плохих… лучше не брать вовсе :) Это как заставить ведущего сисадмина, короля Active Directory, заводить в ней пользователей. другое дело, что структура пользователей и групп должна быть чёткой, а не сотня дополнительных свойств и хардкода имён пользователей в обработках.
Хорошая тема создавать пользователей отделу кадров, при приёме на работу. сразу и в 1с, и в AD (автоматически). но такое может привести к безумию в наших реалиях =(
в последствии там переехали на мини-сервачки с линуксом и постгре.
на моей практике проблемы были только при бэкапе уже битой базы или если пытаться выгрузить базу, где размер какой-нибудь таблицы больше 4гб.
единственный православный вариант бэкапа файловой базы — выгрузка в .dt. Ну или хотя бы гарантировать отсутствие рабочих процессов в базе. оба варианта не всегда реальны (отключение электричества в нерабочие часы).
1. далеко не все настройки хранятся в кэше. + представьте две сотни файловых баз, каждая из которых регулярно обновляется, причем самими пользователями.
2. об этом и есть предупреждение. опять же, представьте РИБ c файловыми базами в магазинах. бэкап файловой базы — это отдельная песня (а необходимо держать и архив бэкапов), выгрузка нового образа занимает время, а проверка на физ. целостность занимает полчаса от силы — и в 95% случаев магазин может торговать. да и в случае повреждения документов можно перепровести их в центральном узле.
4. пример приведен для бухгалтерии, доработать можно и до любой другой конфигурации. а на счет текучки… контора на контору не приходится:)
5. да, всё верно. или когда сотню баз нужно разово перенести — написать скрипт быстрее, чем руками:)
именно про это я и написал)
ощутимо менее требовательный, особенно к latency. ну по крайней мере, в моей практике на относительно тонких каналах с относительно высоким пингом тонкий клиент в обычном режиме выручал.
а вот если нужен именно толстый, тут да, или доставлять приложение, так или иначе (remoteapp, ulteo, xenapp, etc), или пускать на полноценный терминал.
согласен. ну уже не раз и не два звонили люди в ужасе, обновив случайно до 3.0. впрочем, кому-то даже нравится, но их, по крайней мере у меня, меньшинство:)
а в 8.х уже придумали тонкий клиент\веб клиент для работы в том числе и через WAN.
одна проблема — в 11 торговле нет порционного учета, а от бух-ии 3.0 бухи сходят с ума