2010-11-09 1 views
0

Я хочу создать пользователя базы данных, который будет использовать мои предопределенные функции (логин (пароль, логин), get_users_you_are_in_charge_off (логин, пароль) и т. Д.).Могу ли я создать роль группы/пользователя в postgres, чтобы он мог выполнять только предопределенные функции?

Поскольку это должно быть открыто для всех, я хочу создать роль пользователя/группы db, которая позволила бы только пользователю выполнять мои предопределенные функции.

Проблема в том, что эти функции используют SELECT, UPDATE, INSERT. И когда я только даю права на выполнение функций, они бросают ошибки, что у них нет разрешений на это.

Любые идеи? (Может быть, я мог бы статически изменить роль внутри функций?)

// Ответ на некоторые комментарии К 1-му комментарию: Хорошо, я посмотрю на него и ответим, может ли он мне помочь. Благодарю. Хорошо, спасибо за ваш ответ, это ТОЧНО, что мне нужно. Спасибо пользователю «plundra»!

2-й комментарий: У меня уже есть таблица или пользователи (с их логинами). Но если я создаю функцию checkLogin (name, pass), эта функция должна выбирать из пользователей таблицы. И если я не даю право пользователю делать SELECT, это не сработает. Если я даю права, тогда пользователь может просто сделать SELECT * у пользователей; и посмотреть, что такое пароли.

ОК, спасибо за ответы, первый комментарий ТОЧНО, что мне нужно. Спасибо пользователю «plundra»!

+5

Отметьте «ОПРЕДЕЛЕНИЕ БЕЗОПАСНОСТИ» по адресу http://www.postgresql.org/docs/current/static/sql-createfunction.html – plundra

+1

Рассмотрите возможность разделения пользователей в * домене * от Повествование пользователя PostgreSQL. (Например, создайте таблицу 'users' и сначала попросите аутентификацию вашего приложения, используя это. Все сеансы PostgreSQL будут подключаться с использованием одного пользователя PostgreSQL.) –

ответ

0

Заканчивать "DEFINER БЕЗОПАСНОСТИ" на postgresql.org/docs/current/static/sql-createfunction.html - plundra

Ответил пользователя plundra. То, что мне было нужно, спасибо :)

1

Ответ: не храните пароли в базе данных.

Вместо этого храните соли и хэши паролей (оба текстовых поля).

При создании нового пользователя вы произвольно создаете соль, хешируете свой выбранный пароль и сохраняете хэш.

Чтобы подтвердить подлинность кого-либо, введите пароль, который они вводят, соль, сохраненная в их пользовательской записи, запускает их через ваш алгоритм хеширования (SHA1 и т. Д.) И сравнивает его с сохраненным хэшем.

Хотя это легко понять, детали могут вас укусить, поэтому для этого стоит использовать someone else's code.

+0

Хорошо, это звучит неплохо для управления аутентификацией. И я добавлю соль, чтобы сделать пароли еще более безопасными, но вопрос о том, был ли мой недоиспользуемый пользователь моей базы данных, не может выполнять функции, которые используют некоторые вещи, которые пользователь не может. И первый комментарий на самом деле был именно тем, что я искал. Тем не менее, я очень ценю вашу помощь. – HouseMD