SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.03.2010 22:08:31

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Информация о пользователе. Триггер.

Как в триггере, навешанном например на вставку в таблицу, получить информацию о пользователе, который эту вставку совершает(ip-адрес, параметры сессии...)?
Может кто даст ссылку на пример такого триггера, или на документацию.

Заранее спасибо!

Неактивен

 

#2 30.03.2010 01:10:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Информация о пользователе. Триггер.

Никак, так как MySQL эту информацию не хранит. Максимум, что вы можете это определить пользователя (имя и хост), который эту вставку совершает.
select user();

Неактивен

 

#3 30.03.2010 09:16:44

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Информация о пользователе. Триггер.

Хм... Если не ошибаюсь, в MySQL есть возможность использования "внешних" процедур, написанных на компилируемом языке?
Плюс, открытый исходный код... Где-то, вроде, был пример того как список стандартных функций дополняли (типа COUNT(), MAX() и т.д.).

Т.е., теоретически возможно сделать такую функцию, которая будет возвращать данные о пользователе?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#4 30.03.2010 09:28:02

byterus
ISV
MySQL Ready Partner
Зарегистрирован: 02.02.2010
Сообщений: 39

Re: Информация о пользователе. Триггер.

Можно после создания соединения сохранить в пользовательских переменных необходимую информацию. А из триггера к ним обращаться.

Неактивен

 

#5 31.03.2010 00:02:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Попробую объяснить другими словами smile

У Вас есть такая схема:
Компьютер пользователя — Веб-сервер — Сценарий — База данных.

Вы хотите в триггере в базе данных записать информацию, которая
доступна на уровне веб-сервера. Проблема в том, что веб-сервер
может передать эту информацию максимум сценарию, и никакими
средствами, если сценарий *явно* не передаст эту информацию базе,
она об этом не узнает. Даже если напишете стороннюю функцию.
Просто потому что веб-сервер не соединяется с базой напрямую.

Неактивен

 

#6 31.03.2010 22:08:24

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Тогда так:
Есть приложение которое работает через веб-сервер с БД.
Может ли злоумышленник каким-либо образом послать запрос к БД в обход приложения?
На каком уровне можно поймать запрос, чтобы получить информацию о злоумышленнике?

Неактивен

 

#7 31.03.2010 22:12:10

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Информация о пользователе. Триггер.

Может, если знает имя пользователя и пароль.

Дополнительная степень защиты может быть достигнута, если Вы настроите сервер MySQL так, чтобы он устанавливал соединение только на localhost - тогда соединяться с ним смогут только те приложения, которые запущены на вашем сервере (соответственно, злоумышленник должен будет получить доступ к одному из них, что уже сложнее).

Неактивен

 

#8 05.04.2010 22:21:29

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

А что за запрос "select user();"?
Как получить имя пользователя и хост?

И вообще что и где читать на счёт взаимодействия веб-сервера и сервера БД?

Неактивен

 

#9 05.04.2010 22:43:45

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Информация о пользователе. Триггер.

А что за запрос "select user();"?
Как получить имя пользователя и хост?

Вот как раз этот запрос выполните - и получите smile

И вообще что и где читать на счёт взаимодействия веб-сервера и сервера БД?

Начните, например, с http://php.net/manual/en/function.mysql-connect.php

Неактивен

 

#10 09.04.2010 00:25:30

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Информация о пользователе. Триггер.

paulus написал:

Вы хотите в триггере в базе данных записать информацию, которая
доступна на уровне веб-сервера.

Изначально про web-сервер ничего не говорилось. "Сессия" возможно по-разному понимать. smile


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#11 09.04.2010 02:33:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Тем не менее, он там есть. Можно считать это проявлением телепатических
способностей smile

Неактивен

 

#12 27.04.2010 20:28:48

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Снова вопрос: как на уровне веб-сервера отловить запрос идущий к серверу БД,
и получить информацию о пользователе, её отправившем?

То есть злоумышленник знает имя пользователя и пароль для доступа к схеме БД,
и пытается совершить какие-то действия с ней, а мы должны вычислить, например, его IP-адрес.

Неактивен

 

#13 28.04.2010 04:53:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Никак, злоумышленник, имеющий доступ к БД, не пойдет через веб-сервер.
Если же он пойдет через вебсервер, то воспользуется, например, torом.

Неактивен

 

#14 28.04.2010 20:26:46

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Ну если всё-таки предположить существование такого незадачливого "злоумышленника".
Меня интересует, если он тупо отправит запрос на веб-сервер, не используя никакого сокрытия собственного IP.
Интерес чисто исследовательский, ну вот нужно именно в такой ситуации (так поставлена задача) получить сведения об отправителе.

Есть ли при такой постановке возможность получения интересующей меня информации или нет?
Если да, то на каком уровне и как?

Неактивен

 

#15 28.04.2010 21:27:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

В таком случае смотрите в журнал обращений веб-сервера smile

Неактивен

 

#16 04.05.2010 10:18:24

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Если я правильно понимаю:

1.сценарий, например php, который обращается к серверу БД, априори лежит на веб-сервере,
а с локальной машины приходит лишь запрос на его выполнение,
таким образом нет возможности в логах обращения к веб-серверу (например AccessLog в Apache)
получить информацию об sql-запросе, находящемся в сценарии.

Если так, то злоумышленник не может написать свой php-сценарий, а может лишь запостить запрос на запуск одного из лежащих на веб-сервере (если они там вообще есть), в таком случае есть возможность получить его ip из лога.

2.если злоумышленник, зная имя пользователя и пароль доступа к БД, посылает запрос,
например используя MySQL query browser, то получить его ip-адрес невозможно в принципе.
----------------------------------------------
Или всё-таки можно во втором случае сделать какой-нибудь слушатель порта, по которому идёт подключение к БД, и который может помочь в данной ситуации получить ip-адрес?

Неактивен

 

#17 04.05.2010 14:36:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Можете сделать слушатель порта, можете включить полный лог запросов SQL, и
вылавливать оттуда негодяя. Но если Вас заботит безопасность — я бы всё-таки
закрыл порт MySQL снаружи, а не пытался найти IP взломщика по логам.

В банках камеры, конечно, висят, но основной упор обычно делают на большую
стальную дверь с замками wink

Неактивен

 

#18 04.05.2010 14:43:20

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Ну мои вопросы носят чисто теоретический характер, и к реальной системе безопасности отношения не имеют.

Полный лог запросов SQL это где?
Получается есть возможность зафиксировать в одном логе и ip-адрес и текст sql-запроса?

Отредактированно art88 (04.05.2010 14:45:58)

Неактивен

 

#19 04.05.2010 14:54:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Полный лог запросов — это в MySQL.

А чисто теоретически — можно сделать что угодно. И даже пропатчить MySQL,
чтобы он сам отличал валидные запросы от хакерских smile Только оно не стоит
своих затрат ресурсов, разумеется.

Неактивен

 

#20 04.05.2010 15:03:43

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

То есть можно в MySql настроить лог так чтобы туда попадал ip-адрес?
Или это чисто теоретически и очень сложно?
Или это так же как в apache директиву прописал и всё?
(с логом MySql я ещё не разбирался).

Неактивен

 

#21 04.05.2010 15:09:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Можно, ключевое слово --log, поразбирайтесь.

Неактивен

 

#22 04.05.2010 15:14:09

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Хорошо, спасибо большое!

Неактивен

 

#23 04.05.2010 21:55:30

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Разбирался с журналами MySQL.

Поставил denwer, прописал в my.cnf в секции
[mysqld]
log = c:/logfile.

Поставил MySQL Query Browser, настроил подключение к БД.
Отправляю запрос на выборку:
SELECT * FROM `user`

В логе:
100504 21:48:52          8 Init DB     mysql
              8 Query       SELECT @@SQL_MODE
              8 Query       SHOW FULL COLUMNS FROM `mysql`.`user`
              8 Query       SHOW CREATE TABLE `mysql`.`user`
              8 Query       SELECT * FROM `user`

Прочитал документацию:
http://www.php.ru/mysql/mysql-database- … #query-log
никаких дополнительных параметров настройки логирования там не нашёл.

Вопрос:
Ip-адреса нет в логе потому что он(лог) так настроен, или потому что и сервер БД и клиент, отправляющий запрос находятся на одной машине?

Неактивен

 

#24 04.05.2010 22:03:27

art88
Участник
Зарегистрирован: 29.03.2010
Сообщений: 16

Re: Информация о пользователе. Триггер.

Хотя нет один ключик дополнительный нашел:

--log-long-format

расширенный формат вывода в лог.
Как прописать его в my.cnf, просто:

[mysqld]
log = c:/logfile
log-long-format

что ли?

Неактивен

 

#25 05.05.2010 00:18:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Информация о пользователе. Триггер.

Смотрите там, где идет соединение, а не там, где сам запрос.
log-long-format, вроде бы, включен по умолчанию.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson