You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

Обратите внимание!

Перед выполнением скриптов на рабочей базе данных всегда делайте резервную копию! Если вы не уверены в правильности параметров, проконсультируйтесь с администратором базы данных.

Пример 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
  • No labels