LINUX.ORG.RU

банальный вопрос


0

0

где и как клиентскому пириложению сохранить пароль от БД?

вот если с пехепе все понятно, и какой нить config.php должны видеть только избранные, то как это сделать на обычном десктопе? кроме как спрашивать пароль каждый раз, есть варианты?

Перемещено cavia_porcellus из Talks

шифровать пароль, не?

anonymous
()
Ответ на: комментарий от phasma

>KDE/Gnome хранит в своей какой-то замуте пароли.

бумажник кажись называется

еслиб еще кроссплатформенное, хотя в офтопике кажется чето тоже такое есть, еще думал шифровать, но блин имея на руках прогу в случае чего расшифровать легко будет

z0D5e8n7x
() автор топика
Ответ на: комментарий от in_dance

>я думал чел вводит и коннектится

видимо, так и придется сделать, ибо окромя кдешного бумажника больше вариантов не вижу

z0D5e8n7x
() автор топика
Ответ на: комментарий от in_dance

>ldap?

интересный вариант, в моем случае не подходит, но на будущее учту, спасибо

z0D5e8n7x
() автор топика
Ответ на: комментарий от true

>А кто мешает в обычном конфиге хранить? Права доступа поставить - и всё.

навреное то, что, лично я стараюсь избегать прог, которые хранят пасс в открытом виде

z0D5e8n7x
() автор топика
Ответ на: банальный ответ от ubuNToo

Банальный ответ

>спросить в толксах

Не-не-не. ХРАНИТЬ в толксах. Пусть клиентская машина стучится в инет и берёт пароль из специально темы в толксах :-]

Camel ★★★★★
()
Ответ на: комментарий от bakagaijin

>Анонимусы подскажут.

анонимусы у меня в игноре

z0D5e8n7x
() автор топика
Ответ на: комментарий от Sectoid

>Мускул какой версии? Если >=5.0, то именно хэш ему и отправь -- http://dev.mysql.com/doc/refman/5.0/en/old-client.html

мммм, или я неправильно вопрос сформулировал, или я чего то не знаю

вот смотри, подключаемся к mysql:
db.setHostName(server);
db.setDatabaseName(database);
db.setUserName(user);
db.setPassword(pass);

вот этот pass надо или спрашивать каждый раз, или один раз ввести и хранить где-то, по ссылке немного не то

z0D5e8n7x
() автор топика
Ответ на: комментарий от z0D5e8n7x

>с++, linux, qt4, mysql 5

Я бы написал своего наследника (назовём его, например, HashedMYSQLDriver) от QMYSQLDriver в котором вручную (через C'шный интерфейс mysqlclient) создавал бы MySQL-соединение, используя хэш. Потом бы передавал созданное соединение родителю (QMYSQLDriver, у него есть соотв. конструктор).

В основной программе я бы создавал экземпляр и передавал его статической функции QSqlDatabase::addDatabase ( описание тут -- http://doc.trolltech.com/4.4/qsqldatabase.html#addDatabase-2 ) и от неё получал бы экземпляр QSqlDatabase, через который бы и работал. Собственно, весь код получения экземпляра QSqlDatabase можно засунуть в какую-нибудь фабрику.

Но тут есть одна проблема: C'шная функция mysql_real_connect() принимает пароль Plain-Text'ом и в документации (http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html) указано, что она осуществляет взятие хэша уже внутри. Из решений навскидку могу предложить посмотреть исходники mysql_real_connect(), и на их основе написать свою функцию mysql_real_connect_2(), которая будет делать то-же самое, но будет принимать хэш.

Если есть вопросы -- задавайте. "Кого поразил убогостью мысли -- извиняйте" (с) ...

Sectoid ★★★★★
()
Ответ на: комментарий от z0D5e8n7x

>большое спасибо

На здоровье, обращайтесь;)

>я думал по сети тоже передается Plain-Text'ом, а так уже намного проще жить

Дык по первой приведённой мной ссылке (первое предложение):

>MySQL 5.0 uses an authentication protocol based on a password hashing algorithm...

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

>MySQL 5.0 uses an authentication protocol based on a password hashing algorithm...

каюсь, невнимательно читал

z0D5e8n7x
() автор топика
Ответ на: комментарий от z0D5e8n7x

>избегать прог, которые хранят пасс в открытом виде

Если прогу не нужно автозагружать -- то на бумажке в сейфе, или в памяти. Секурно -- хранить безвылазно в каком-то криптооборудовании, но тут вопрос совместимости с методами аутентификации. Остальные случаи эквивалентны файлу с паролями, т.ч. нечего заморачиваться -- выставь права, включи аудит, если не лень -- настрой что-то типа selinux-а на чтение только одной прогой, лучше всё равно не будет.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

ну тем не менее Sectoid предложил хороший вариант, так пароль будет вводится один раз и хранится в виде хэша, что, в принципе, уже очень хорошо

З.Ы. если честно, не очень понимаю почему этого изначально нет в libmysqlclient-dev

z0D5e8n7x
() автор топика
Ответ на: комментарий от z0D5e8n7x

>ну тем не менее Sectoid предложил хороший вариант, так пароль будет вводится один раз и хранится в виде хэша, что, в принципе, уже очень хорошо

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

cvb
()
Ответ на: комментарий от z0D5e8n7x

>почему этого изначально нет в libmysqlclient-dev

По описанной выше cvb причине -- это не добавляет "секретности". Зато, как мы видим, может создавать иллюзию таковой -- что ещё опаснее.

DonkeyHot ★★★★★
()
Ответ на: комментарий от cvb

ну как бэ, я сильно надеюсь что там хэш необратимый, то есть вытащить из него пасс - только брутфорсом

z0D5e8n7x
() автор топика
Ответ на: комментарий от z0D5e8n7x

>хэш необратимый, то есть вытащить из него пасс

Читай ещё раз: если тебе достаточно хеша, то и потенциальному взломщику тоже.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>Читай ещё раз: если тебе достаточно хеша, то и потенциальному взломщику тоже.

черт, а ведь он может сделать то же самое что и я...
не подумал
ты прав, оставлю как есть

z0D5e8n7x
() автор топика
Ответ на: комментарий от z0D5e8n7x

создай пользователя в mysql без пароля но с правами ограниченными ровно для достаточной работы программы

tesla
()
Ответ на: комментарий от tesla

>создай пользователя в mysql без пароля но с правами ограниченными ровно для достаточной работы программы

не прет, посторонние не должны ниче видеть

z0D5e8n7x
() автор топика

Постановка задачи какая-то странная. Если на клиенте есть пароль, зашифрованый или нет, то вытащить его оттуда не составит труда. Считай что в твоем клиентском приложении есть кнопка "запустить mysql клиент и приконнектить его к базе".

Если ты не доверяешь клиенту, то должен настраивать секьюрити в БД или, что лучше, вообще не давать клиенту SQL а перейти на набор каких нибудь вызовов а-ля веб сервисы или RPC или что-то такое, где клиенту будет предоставлены только явно тобой заданные операции.

gods-little-toy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.