2017-07-28 17 views
5

Używam klasycznej ASP i MySQL (użycie PHP nie zmieni punktu pytania).Ustaw zmienną w mysql tylko raz

muszę ustawić zmienną na mojej stronie:

SET block_encryption_mode = 'aes-256-cbc' 

nie mogę ustawić go jako zmienną globalną, jak inni użytkownicy korzystają z serwera i może użyć domyślnego block_encryption_mode.

Wiem, że mogę korzystać z oświadczenia przy użyciu ASP/PHP na początku każdej strony internetowej, ale wydaje się, że za dużo zasobów; każdy użytkownik będzie wykonywał instrukcję SET na każdej stronie ...

Czy istnieje sposób na ustawienie zmiennej lub wykonanie jakiejś innej instrukcji SQL na początku każdej sesji, tak jak zdarzenie onstart, takie jak ASP, może? Albo jak mogę osiągnąć mój cel bez wykonywania zapytania dla każdego użytkownika na każdej stronie, którą mam?

Odpowiedz

2

Bezpieczne jest wywoływanie SET na każdej stronie wykonywanej w kolejności mikrosekund. Nie ma dosłownie żadnego napowietrznego połączenia SET na już otwartym połączeniu.

Jeśli nie można zastosować tego ustawienia na całym świecie, nie zawracałbym sobie głowy. Wystarczy ustawić block_encryption_mode (wraz z collation i timezone) bezpośrednio po uzyskaniu uchwytu połączenia z bazą danych.

+1

Ale ten ciąg wykonywany na każdego klienta, także z innych stron internetowych, które nie chcą tego zestawu będzie obecny ... – Jerry2

+0

Jak daleko jak wiem block_encryption_mode jest zmienną sesji, więc używanie SET nie powinno wpływać na innych klientów. Zakładam też, że potrzebujesz uprawnień administratora, aby ustawić wartość dalej niż twoja sesja. –

3

Można użyć zmiennej init_connect.

Ciąg znaków, który ma być wykonywany przez serwer dla każdego łączącego się klienta. Ciąg składa się z jednego lub więcej instrukcji SQL oddzielonych średnikami.

Można również wyróżnić użytkownikom kodu tak:

IF (CURRENT_USER() = '[email protected]') THEN 
    SET SESSION block_encryption_mode = 'aes-256-cbc'; 
END IF;