2013-02-22 6 views
1

У нас есть PostgreSQL, работающий на unix-боксе, и несколько пользователей с отдельными учетными записями unix и отдельными входами в базу данных. Вид процесса мы пытаемся включить для этих пользователей:Доступ к файловой системе через соединение с удаленным сервером PostgreSQL

  1. Передача большого файла на сервер (обычно через Samba)
  2. установить удаленное соединение с ПК пользователя к PostgreSQL
  3. Читать большой файл в таблицу (желательно временную) и сделать некоторый анализ

Камнем преткновения является доступ к файлу во время входа в PostgreSQL. На первый взгляд это кажется невозможным сделать безопасно, поскольку база данных работает под учетной записью postgres, которая даже не имеет доступа к файлам, принадлежащим другим учетным записям unix. Я полагаю, что единственным способом, с помощью которого пользователи PostgreSQL могли обращаться к локальным файлам, было бы: (a) сделать файлы доступными для чтения учетной записью unix postgres и (b) предоставить пользователям прав доступа к базе данных, чтобы они могли использовать COPY FROM команда в Postgres. Об этом не может быть и речи; пользователи не могут читать данные друг друга.

Обходной путь, который мы в настоящее время используем, заключается в оболочке на сервер и запуске psql, что позволяет пользователю обрабатывать данные из локального файла, используя мета-команду \copy. Но это усложняет рабочий процесс и не очень удовлетворяет наших пользователей, которые в основном не знакомы с UNIX. Вместо этого они хотели бы управлять всем процессом из пакета аналитики на базе ПК под названием SAS, который может напрямую подключаться к Postgres через ODBC.

Я ищу творческое решение этой проблемы. Очевидно, что наивный рабочий процесс, описанный выше, полностью противоречит модели безопасности unix. Но есть ли альтернатива, которая будет функционировать аналогично с точки зрения пользователя? Мы с удовольствием рассмотрим хранимые процедуры, прокси-серверы «человек-в-середине» и т. Д.

ответ

1

Если ваши пользователи подключаются через SAS, могут ли они сами загружать файлы через соединение SAS-PSQL? Говорить как пользователь SAS это, безусловно, возможно; что-то вроде

libname psql odbc (connection-string); 
data psql.mytable; 
set sastable; 
run; 

Конечно, это требует, чтобы он сначала считывался в SAS, но это, вероятно, тривиально. Главной потенциальной проблемой здесь является время - это, несомненно, медленнее, чем передача SAMBA; но, возможно, время, затраченное на простоту?

+0

Да, мы начали с чего-то подобного, но для файлов с миллионами строк мы испытываем серьезные замедления. Абсолютно соглашайтесь с вами о простоте! –

+0

Миллионы строк должны по-прежнему быть управляемыми, если они вставлены правильно. Имеет ли PostgreSql возможность объемной вставки? Не уверен, поддерживает ли SAS или нет (он поддерживает некоторые объемные вставки, а не другие), но если это может сработать. Если нет, вы хотя бы вставляете во временную (промежуточную) таблицу, которая пуста и не имеет ограничений? Затем SAS может перейти в режим SQL (выдавая команды PostgreSQL непосредственно на своем языке, а не используя команды SAS). – Joe

+0

Это может быть проблема с корнем. Я смотрю на какую-то документацию по SAS, которая, кажется, говорит, что драйвер ODBC поддерживает только массовую загрузку для подключений к SQL Server? И я уверен, что для Postgres нет драйвера SAS, поэтому мы используем ODBC. –

Смежные вопросы