Обратите внимание!
Перед выполнением скриптов на рабочей базе данных всегда делайте резервную копию! Если вы не уверены в правильности параметров, проконсультируйтесь с администратором базы данных.
Пример SQL-скрипта в виде файла можно скачать тут: set_product_feature_flags.sql
Описание скрипта
Этот скрипт обновляет специальные флаги для продуктов в базе данных. Он отключает функцию «one session key» (бит 256) и включает новую функцию защиты от RDP (бит 4096). Скрипт применяется только к продуктам определенного вендора и может быть дополнительно отфильтрован по конкретным ID продуктов.
Инструкция для Microsoft SQL Server
Пошаговая инструкция:
1. Подготовка к выполнению скрипта:
- Откройте SQL Server Management Studio (SSMS)
- Подключитесь к вашему серверу баз данных
- Убедитесь, что у вашей учетной записи есть права на изменение данных в таблицах
2. Параметры:
grd- имя схемы базы данных1в условииWHERE grd.[Products].[Vendors_VendorId] = 1- ID вендора, для которого нужно обновить флаги. Убедитесь, что соответствует вашему ID в базе данных.2в условииAND (grd.[Products].[ProductId] = 2)- ID продукта для обновления. Замените на ID вашего продукта или раскомментируйте дополнительные условия для нескольких продуктов.
3. Скрипт изменения флагов для SQL Server:
UPDATE pf SET pf.[Flags] = pf.[Flags] & ~256 | 4096 FROM [grd].[ProductFeatures] pf JOIN [grd].[Products] p ON pf.[Products_ProductId] = p.[ProductId] WHERE p.[Vendors_VendorId] = 1 AND (p.[ProductId ] = 2)
4. Выполнение:
Скопируйте скрипт в новое окно запроса SSMS
Сначала выполните скрипт в режиме “только чтение”, добавив в начало:
BEGIN TRANSACTION; -- ваш скрипт здесь SELECT @@ROWCOUNT AS 'UpdatedRows'; ROLLBACK TRANSACTION;
- Проверьте количество обновленных строк (выведется в результатах)
- Если результат вас устраивает, выполните скрипт без транзакции (уберите BEGIN/ROLLBACK)
5. Проверка результатов:
- Выполните SELECT-запрос для проверки обновленных данных:
SELECT pf.[ProductId], pf.[Flags] FROM [grd].[ProductFeatures] pf JOIN [grd].[Products] p ON pf.[Products_ProductId] = p.[ProductId] WHERE p.[Vendors_VendorId] = 1 AND p.[ProductId] = 2
Инструкция для PostgreSQL
Пошаговая инструкция:
1. Подготовка к выполнению скрипта:
- Откройте pgAdmin или любой другой клиент для PostgreSQL (например, DBeaver)
- Подключитесь к вашему серверу баз данных
- Убедитесь, что у вашей учетной записи есть права UPDATE на соответствующие таблицы
2. Параметры:
grd- имя схемы базы данных1в условииWHERE grd."Products "."Vendors_VendorId " = 1- ID вендора, для которого нужно обновить флаги. Убедитесь, что соответствует вашему ID в базе данных.2в условииAND (grd."Products "."ProductId " = 2)- ID продукта для обновления. Замените на ID вашего продукта или раскомментируйте дополнительные условия для нескольких продуктов.
3. Скрипт изменения флагов для PostgreSQL:
UPDATE grd."ProductFeatures" SET grd."ProductFeatures"."Flags" = grd."ProductFeatures"."Flags" & ~256 | 4096 -- *** see Remark FROM grd."ProductFeatures" JOIN grd."Products" on grd."ProductFeatures"."Products_ProductId" = grd."Products"."ProductId" WHERE grd."Products"."Vendors_VendorId" = 1 -- optional filter AND (grd."Products"."ProductId" = 2 -- optional filter -- OR grd."Products"."ProductId" = 11 OR ... -- optional filter ) /* *** Remark: "& ~256" - this part of SQL disables flag "one session key" in product features; "| 4096" - this part of SQL enables new flag for RDP protection in product features; */
4. Выполнение скрипта:
- Скопируйте адаптированный скрипт в окно запроса pgAdmin
- Сначала выполните скрипт в режиме “только чтение”, добавив в начало:
BEGIN; -- ваш скрипт здесь SELECT COUNT(*) AS updated_rows FROM grd."ProductFeatures " WHERE "ProductFeatures "."Products_ProductId " IN (SELECT "ProductId " FROM grd."Products " WHERE "Vendors_VendorId " = 1 AND "ProductId " = 2); ROLLBACK;
Проверьте количество обновленных строк в результатах
Если результат вас устраивает, выполните скрипт без транзакции (уберите BEGIN/ROLLBACK)
5. Проверка результатов:
Выполните SELECT-запрос для проверки обновленных данных:
SELECT pf."ProductId ", pf."Flags " FROM grd."ProductFeatures " pf JOIN grd."Products " p ON pf."Products_ProductId " = p."ProductId " WHERE p."Vendors_VendorId " = 1 AND p."ProductId " = 2