Эксперимент по блокировке записей UPDLOCK в MS SQL Server

Дано: MS SQL Server 2014.
Цель эксперимента: выяснить реакцию sql-сервера на попытку одновременного доступа на редактирование записи от конкурентных запросов без использования транзакций.
Эксперимент проводился в связи со следующей задачей: есть таблица ваучеров на доступ к сети WiFi. Эти ваучеры выдаются определенным людям по запросу (с предъявлением документа, удостоверяющего личность). Оператор (сотрудник, непосредственно выдающий ваучеры на руки) делает запрос к базе через веб-приложение на выдачу ваучера. Информация о самом ваучере и о том, что он выдан находится в одной таблице. Данный запрос реализуется при помощи следующего алгоритма, состоящего из 2х этапов:

1) SELECT-запрос - запрос на наличие свободного ваучера и получения его идентификатора (ID):
SELECT TOP 1 intID FROM tblVouchers WHERE blnIsGiven = 0

2) UPDATE-запрос - обновление информации о ваучере (указание, что он выдан и когда выдан на базе полученного в предыдущем запросе идентификатора).
UPDATE tblVouchers 
SET blnIsGiven = 1, dtGivenDate = GetDate() 
WHERE intID = @IntID

Проблема: если два оператора одновременно сделают подобный запрос на выдачу ваучера, то может случиться такое, что пока не выполнен UPDATE-запрос ваучер остается условно свободным и может быть случайно выдан два раза (см. эксперимент 1).

Сбербанк онлайн ошибка проверки ПП: требует реквизиты как налогового платежа

Дано: Из 1С выгружено платежное поручение в Сбербанк бизнес-онлайн (СББОЛ).
Проблема: при проверке документа система выдает ошибки о незаполненных полях, которые обычно заполняют только при налоговых платежах:
Результаты проверки документов
 - Поле «Показатель статуса (101)» не заполнено.
 - Поле «КПП плательщика (102)» не заполнено.
 - Поле «КПП получателя (103)» заполнено некорректно. Поле должно содержать 9 цифр.
 - Поле «КБК (104)» не заполнено.
 - Поле «ОКТМО (105)» не заполнено.
 - Поле основание платежа (106) не заполнено.
 - Поле «Номер документа (108)» не заполнено.
 - Поле «Дата документа (109)» не заполнено.

IIS Редирект HTTP на HTTPS (правило URL Rewrite)

Дано: сайт на IIS 8.5 (SSL сертификат уже установлен и сайт настроен на работу по HTTPS). На IIS установлен модуль URL Rewrite.
Задача: необходимо настроить перенаправление всех запросов сайта (редирект) с HTTP на HTTPS.


pfSense 2.3 форма входа (login) и выхода (logout) (Captive Portal)

Дано: на сервере установлен pfSense 2.3 с модулем Captive Portal (кэптив портал для контроля входа пользователей в Интернет через WiFi - wifi-hotspot).
Задача: настроить собственную страницу ввода логина-пароля (или номера ваучера) взамен встроенной (login page form), а также отображать собственную страницу выхода (logout page, отсоединения сесии), а также обойти проблему всплывающего окна формы выхода (popup window, которая зачастую блокируется в браузере).

Т.к. мы хотим позволить пользователю не только вводить логин-пароль, но и иметь возможность войти в сеть по выданному ваучеру, нам необходимо было совместить обе формы входа, т.к. по умолчанию pfSense отображает только форму ввода логина.

Как загрузить свои шаблоны форм?
Делается это на странице настроек Captive портала в блоке "HTML Page Contents" (Services - Captive Portal - Имя зоны - Configuration):

FreeBSD 10: настройка FreeRadius 3 на доменную авторизацию (Samba 4.4, Active Directory). Хождение по мукам…

Дано: существующий домен-контроллер (DC) на Windows Server 2012 R2, заполненный Active Directory (AD) каталог пользователей.
Задача: поднять бесплатный RADIUS сервер и настроить его на аутентификацию пользователей через вышеуказанный AD.

Предыстория такова, что первоначальная задача, это не радиус, а Caprive Portal (о котором напишу в другой статье), который будет авторизовывать (показывать страницу логина-пароля) и контролировать пользователей, подключающихся к корпоративному WiFi.
В качестве источника бесплатного готового решения Caprive портала был выбран pfSense 2.3, которому для сторонней (в том числе доменной) авторизации пользователей нужен радиус-сервер.
Статья больше является неким логом действий и ошибкок от закоренелого Windows-админа, поэтому не судите строго, это заметка для unix-чайников от unix-чайников.

В качестве радиус сервера был выбран бесплатный FreeRadius версии 3.
В качестве операционной системы для него - FreeBSD 10.3

Переход с DirSync на Azure AD Connect - видео

Дано: локальный Active Directory, синхронизируемый с корпоративным Office 365 (Exchange Online) при помощи утилиты DirSync.
Задача: В связи с тем, что поддержка утилиты DirSync прекращается, требуется мигрировать синхронизацию на новую утилиту Azure AD Connect с конвертированием существующих настроек синхронизации.

Exchange Online импорт ящика и писем из PST файла

Дано: файл формата PST с данными, а также корпоративный Exchange Online (Office 365), к которому имеется административный доступ.
Задача: загрузить данные из PST файла в ящик определенного пользователя в Exchange Online.

Такая задача может возникнуть, например, в случае увольнения сотрудника (когда содержимое ящика надо передать другому сотруднику), а также допустим если нужно осуществить миграцию с локального сервера Exchange Server на облачный сервер Exchange Online.
Файл PST был получен либо выгрузкой из MS Outlook, либо выгружен администратором из Exchange Online через механизм eDiscovery (предварительно такой файл желательно очистить от удаленных писем).


Exchange Online экспорт ящика в PST-файл через eDiscovery (Office 365)

Дано: корпоративный Exchange Online (Office 365), к которому имеется административный доступ.
Задача: выгрузить содержимое одного из пользовательских ящиков в файл формата PST без использования Oultook (например, если сотрудник уволен или подразделение упразднено и нужно их корпоративные почтовые ящики передать другому сотруднику, например, см. Загрузка/импорт ящика из PST в Exchange Online).

Многие советуют делать выгрузку через Outlook. Но этот способ хорош лишь тогда, когда это Ваш ящик. Если же Вы администратор и необходимо выгрузить несколько ящиков, то авторизоваться под каждым пользователем, полностью загружать в свой Outlook содержимое их ящиков - очень неудобно.
Для таких административных задач можно использовать механизм eDiscovery (доступен по лицензированию Exchange Online Plan 1).

Очистка хранилища удаленных писем (Dumpster) в ящике Exchange Online (Office 365) при помощи PowerShell

Дано: корпоративный Exchange Online (Office 365), к которому имеется административный доступ. В ящиках пользователей имеется специальное временное хранилище удаленных писем (Dumpster, не видное самим пользователям), из которого в случае необходимости можно восстановить "окончательно" удаленные пользователем письма. Это хранилище занимает определенное место в ящике.
Задача: очистить данное хранилище (очистка deletions и purges папок).

Moodle: Защита теста при тестировании студентов в аудитории

Дано: система электронного обучения Moodle 3. Студенты проходят итоговое тестирование в аудитории под контролем преподавателя. Студентам выдается один логин на весь срок обучения (пароль они могут менять сами).
Задача: защитить процесс прохождения тестирования от действий студентов, направленных на обман и обход правил тестирования для успешного прохождения теста.


Обход дерева данных в таблице MS SQL Server (рекурсивный запрос)

Дано: база на MS SQL Server с таблицей, где перечислены разделы (подразделения или другие данные, которые можно представить в виде иерархии).
Задача: запросом по идентификатору раздела получить:
1) список всех дочерних элементов
2) список всех родительских элементов
Решение: использовать рекурсивные запросы при помощи команды WITH Recursive
Рассмотрим пример…

Access: построение дерева разделов - TreeView и VBA

Дано: База данных Access 2016 с таблицей, где перечислены разделы (подразделения или другие данные, которые можно представить в виде иерархии).
Задача: на Access-форме построить иерархическое дерево на базе указанной выше таблице.

ASP.Net Не запускается приложение. Регистрация компонентов в IIS 8.5

Дано: Windows Server 2012 R2, IIS 8.5, на нем установлен сайт - приложение ASP.Net.
Проблема: при запуске сайта выдается ошибка 404.3.

HTTP Error 404.3 - Not Found
The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.
Error Code 0x80070032

C# Перенос строки в коде (символы @ и +)

Дано: текст кода на языке C#
Задача: перенести длинные строки на новую строку для улучшения визуального удобства чтения кода.

Если это длинная строка, содержащая определенный набор команд, то перенос можно сделать обычным нажатием Enter - дополнительных спецсимволов не требуется. В синтаксисе языка C# разрешается разносить команды на разные строки, однако не разрывая имен.
Например, есть следующие строки кода:

Генерирование файлов по шаблону из csv при помощи PowerShell

Задача: сгенерировать 300 конфигурационных файлов по шаблону с заполнением полей из CSV при помощи PowerShell.

Задача возникла в связи с тем, что понадобилось создать конфигурационные файлы для настройки IP-телефонов в количестве примерно 300. Таким образом, рассмотрим такой пример: