Archiwum kategorii ‘DB’

FortiAnalyzer i MySQL

piątek, 9 Kwiecień 2010

W dokumencie FortiAnalyzer v4.0 MR2 Release Notes w rozdziale ’1.1 Summary of Enhancements Provided by FortiAnalyzer v4.0 MR2 Release’ można znaleźć między innymi coś takiego:

  • Remote SQL database (MySQL) support
  • SQL DB PostgreSQL support

Przyznam, że zaintrygowało mnie to na tyle, że postanowiłem od razu sprawdzić z czym to się je i co można z tego wycisnąć.
(więcej…)

LOCATE() na innym podwórku

czwartek, 18 Marzec 2010

Rozpędziłem się z tym wpisem dot. Blind SQL injection i nie wspomniałem o innych bazach. LOCATE() to oczywiście funkcja MySQL. PostgreSQL ma swoją POSITION(substing in string), a MS SQL – CHARINDEX(substring, string[, position]). Jest jeszcze INSTR(string, substring [,position [,occurrence]]) dla Oracle.

Innych nie znam, bo nie używałem. No, ale co tam z PHP może jeszcze być? SQLite? Ten akurat ma ograniczoną w ogóle liczbę funkcji (w dokumentacji nie znalazłem żadnego odpowiednika).

Koło fortuny (Blind SQL injection)

czwartek, 18 Marzec 2010

Od wczoraj przeglądam blog Michała Ławickiego i w komentarzach uzupełniam artykuły dot. baz danych (vide Analiza struktury bazy danych czy Obsługa plików, a SQL Injection). Dziś przyjrzałem się jego podejściu do Blind SQL injection czyli ataku na stronę, która nie wyświetla błędów.
Metoda na odgadywanie hasła znak po znaku jest rzeczywiście toporna. Biorąc pod uwagę 95 dostępnych znaków i hasło o długości 16, możliwych kombinacji jest dość sporo. Wysyłanie 1k5 zapytań zajmie trochę czasu. Dlatego można to zmodyfikować wstawiając pomiędzy LENGTH(passwd), a SUBSTRING(passwd, x, y) funkcję LOCATE(char, passwd), która pokaże jakie znaki mamy w ogóle dostępne (jak w teleturnieju – stąd temat wiadomości).
(więcej…)

MySQL: konwersja daty i import plików – studium przypadku

środa, 13 Styczeń 2010

Niniejszy wpis powstał przy rozwiązywaniu konkretnego problemu. Jest tu opis polecenia LOAD DATA INFILE (import danych z pliku) oraz sposób wykonania konwersji daty podczas importu danych, co może komuś się przydać (niekoniecznie przy walce z takim samym problemem).
(więcej…)

Trochę Lua w mysql-proxy

poniedziałek, 2 Listopad 2009

Replikacja baz MySQL działa jako tako. Jeśli to typ MASTER – SLAVE, to na ogół ten drugi serwer się nudzi. Skoro się nudzi, można wykorzystać go do zapytań, które nie zmieniają niczego (SELECT). Jeśli oddamy go w takim stanie programiście, to pewne jest, że prędzej czy później będzie to jego serwer testowy i dziać się będą na nim różne rzeczy.
(więcej…)

nagios: check_mysql-replication.pl

czwartek, 22 Październik 2009

Do monitorowania replikacji MySQL pod Nagios postanowiłem użyć wtyczki mysql_check-replication.pl, ktrej autorem jest Erwan Labynocle Ben Souiden. Instrukcja mówi o nadaniu prawa REPLICATION CLIENT użytkownikowi, który łączył się będzie z bazą. Sam skrypt napisany jest w Perl, gdzie w DSN podana jest baza, do której użytkownik będzie się podłączał. Wspomniane prawa dają tylko możliwość wywołania SHOW MASTER STATUS oraz SHOW SLAVE STATUS i nie dają praw do żadnej bazy. Tym samym skrypt się nie wykona.

Proponuję (wersja 0.1) przerobić DSN (linia 298) i wyrzucić nazwę bazy zupełnie (pozostawić `:’ – dwukropek) lub zmienić nazwę na information_schema, bo do tego prawo ma każdy użytkownik (dla wersji > 5.0).

--- /usr/lib64/nagios/plugins/check_mysql-replication.pl 2009-10-22 13:17:26.000000000 +0200
+++ check_mysql-replication.pl 2009-10-22 13:17:33.000000000 +0200
@@ -295,7 +295,7 @@ EOT
# ------------------------------
sub request_executor() {
my ($host,$port,$user,$pwd,$request) = @_;
- my $dsn = "DBI:mysql:mysql;host=$host:$port";
+ my $dsn = "DBI:mysql:;host=$host:$port";
my $dbh = DBI->connect($dsn, $user, $pwd) or die "connexion failed $DBI::errstr\n";
my $sth = $dbh->prepare($request);
$sth->execute();

Autor obiecał, że wprowadzi stosowną poprawkę – tymczasem można łatać.

MS SQL 2008

wtorek, 1 Wrzesień 2009

Przeniosłem bazy Płatnika i Pudełko z MSDE 2000 na MS SQL 2008 (Express). Nic trudnego, ale dostawcy obu rozwiązań nie wspierają (jeszcze) oficjalnie tej bazy, wiec można mieć wątpliwości. Działa poprawnie, łącznie ze zmianą poziomu kompatybilności baz.

ALTER DATABASE [platnik] SET COMPATIBILITY_LEVEL = 100
GO
ALTER DATABASE [pudelko] SET COMPATIBILITY_LEVEL = 100
GO

Przeniesienie w najprostszy z możliwych sposobów – detach i attach. Pamiętać należy, że jeśli nie uwierzytelniamy się na sa (!!!), w nowej instancji założyć trzeba login i powiązać go z użytkownikiem w bazie. Co ciekawe przy robieniu tego z GUI (Microsoft SQL Server Management Studio) możemy wybrać istniejącego użytkownika, a narzędzie będzie próbowało go założyć (CREATE) zamiast zmienić (ALTER) i zgłosi błąd (login zostanie założony, ale mapowania nie będzie). Dla niedomyślnych pomocny przykład:

USE [pudelko]
GO
ALTER USER [opek] WITH LOGIN = [opek]
GO