--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Можно ли SQL-запросом забрать файл с диска?

Сисадминское
3
22
С друзьями на NN.RU
В социальных сетях
Поделиться
mik-mak
12.04.2013
Есть MySQL база, в ней хранится имя бинарного файла.. Можно ли sql-запросом получить этот файл?
Круто :) А потом что-то с ним сделать?
Имя, конечно, получить можно, если оно в таблице.
В некоторых расширениях SQL можно запускать пользовательские функции, которые могут быть написаны почти на чем угодно и могут делать достаточно произвольные вещи, но это не чистый SQL.
mik-mak
12.04.2013
Хм.. Наверна, неправильный вопрос получился :)
Есть директория на диске, скажем /var/video, там есть файл 130412.avi, есть база mysql, в ней таблица video c полями:
date 12.04.13
time 12:12
path /var/video/120413.avi

Нужно запросом получить этот файл..
Лучше от объяснений не стало :)
Что вы хотите получить, если у вас уже все есть в таблице?
Как вы хотите использовать то, что хотите получить? :))) Из какой системы запрос?
mik-mak
12.04.2013
В таблице у меня путь к файлу:
название - path
тип - varchar(250)

Сам файл лежит на винте по пути, указанному в таблице.. Я хочу при помощи SQL-запроса получить этот файл к себе на винчестер и посмотреть это видео..
Клиенты есть и виндовся и линуксы..
При помощи чистого SQL нельзя. Надо на чем-то писать.
SQL по сути своей не выдает ни каких данных, лежащих вне БД. Сам файл может лежать в поле БД, но это не ваш случай. В SQL-сервер может быть заложена такая функция, но это должно быть уже написано и исполняться на самом SQL-сервере. Но и так тоже никогда не делают.
kokon
13.04.2013
БД по запросу, может ссылку на файл показать, останется только на ссылку нажать и скачать (я так думаю).
Если в БД абсолютные системные пути, то работать не будет, ибо у вас нет UNC (типа \\Server01\user\docs\something.avi или ftp://someserver.com/download/something.avi ) к нему и, скорее всего, нет прав даже на чтение.
Если можно каким-то образом вычислить часть UNC-пути, то останется только подставить имя.
kokon
13.04.2013
Я дилетант в этом вопросе. Но если бы мне локально на своем ПК нечто подобное надо было сделать (с возможностью переноса на другие ПК), то я вы наверное через Денвер only-free-soft.ru/web-development/server-and-components/129-denwer.html это осуществить бы попытался. Вроде даже с флешки он работать должен.
Проще - HFS www.rejetto.com/hfs/
или Everything www.voidtools.com/
Публицыст писал(а)
При помощи чистого SQL нельзя. Надо на чем-то писать. <br> SQL по сути своей не выдает ни каких данных, лежащих вне БД.

Что делает функция load_file(path) в таком случае?
Обычно она применяется при создании таблицы для занесения в поле таблицы данных BLOB из файлов на сервере. Допустим даже, что права на чтение у клиента есть (что ой как не факт).
1. Попробуйте, напишите запрос, который бы выдал содержимое файла в результат на клиентской стороне. Не представляю, как это сделать.
2. Размер ограничен системной переменной max_allowed_packet, которой мы не можем управлять.
Вы можете с клиента подключится напрямую к базе?
Я кажется понял моментально, у человека нет доступа к директории и он хочет командой скула копирнуть этот файл в другое место.
Так?
Похоже на то. Хакерство через SQL. :)
FreeCat
13.04.2013
... оно конечно можно) .. но не так напрямую))) ...
Да, можно.
mik-mak
12.04.2013
А как?
RealVaVa
13.04.2013
Никак! Транспорт должен чем то осуществляться! Самый простой способ - это php в данной ситуации. Но вся беда в том, что php, выполняясь на уровне сервера от имени www-data, далеко не ко всем директориям имеет доступ даже на чтение.
Если делать через php, то нужно симлинки просто мутить в веб-директорию и давать права для www-data на их чтение. В базе можно хранить относительные пути от корня веб-директории (или уже самим php-шником делать какую-то подстановку, если в базу данные были уже забиты).
Есть 2 небольших "но":
1) вопрос секурности. Оставлю без пояснений.
2) как выше было сказано, это НЕ ЧИСТЫЙ SQL - это, как минимум, два лишних сервиса на машине - web-сервер и php
Какой транспорт, какой php? Напомню, вопрос был
"Есть MySQL база, в ней хранится имя бинарного файла.. Можно ли sql-запросом получить этот файл?"
Ответ - да, можно. select load_file(path) вернет вам файл как строку. Задача решена.
RealVaVa
13.04.2013
В базе хранится имя, а не сам файл, - судя из задачи, файл лежит на локальном диске какого-то удалённого сервера (может не правильно, каэш я чот понял)
Скуль-запрос через что будем отправлять, если машина, действительно, удалённая? Навикэтом? Родной мускульной тулзой? Что получим? - имя файла, а не файл.
Если база данных локальная, то я не понимаю нахрена именно SQL.
Короче, можно смело ждать разъёснений
Meg@VaD
13.04.2013
"sql запрос" (клиент бд) получает выборку из таблиц(от сервера бд) и передает её процессу, инициировавшему запрос. Есть ли у процесса права на доступ к файлу?
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.

Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.