![]() |
|
|
![]()
|
|
| RinOSpro |
|
|||
|
Unregistered |
Всем привет!
Есть БД на MySQL, есть моя программа. Можно ли сделать как ни будь, так что бы сервер соединялся только с моей программой, при этом, к нему нельзя было подключится из других (phpMyAdmin, и т.п.) Сделайте пожалуйста зеркало на ветку по MySQL. |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
||||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Kbl4AH смешно
База много пользовательская. Есть моменты когда одни пользователи могут в просматривать только свои записи. В программе естественно стоит условие. Но вот теперь представим что кто то особо умный кто имея пароль подключился к БД через phpMyAdmin и посматрел все что ему не положено было бы смотреть. Поэтому я и хочу ограничиться подключением только из своей программы. Есть идеи? |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
я серьезно Я пока в таких тонкостях не разбираюсь... Но в общем... есть же привилегии... и как это пользователь с админскими привилегиями не сможет просмотреть твои данные? сможет... значит у особо умного должны быть привилегии для своих данных, у тебя - для своих... координировать должен админ, который имеет доступ ко всем данным... значит админ должен ограничить права особо умного... ты, наверное, ничего не сможешь поделать... |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Kbl4AH есть 10 пользователей. У каждого есть логин и пароль. Есть определенный набор дейсвий которые они могут выполнять. Права расставлены.
Есть скажем таблица Messages. Пользователи могут и должны работать с этой таблицей, но только со своими записями. Смотреть и уж тем более изменять чужие они не должны. Через программу так оно и есть. Но проблема в том что можно зайти не через мою программу (( а через phpMyAdmin к примеру. |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
так я про это же... твой пользователь значит должен иметь права на запись в Messages, а другой пользователь (любой кроме тебя) не должен заходить под твоим логином/паролем, а должен заходить под своими и не должен иметь прав чтения Messages... БД ведь не знает через какое приложение к ней подцепились... она только знает кто подцепился и какие он имеет права... ЗЫ. и я совсем не представляю как ты собираешься скрыть свои данные скажем от админа БД... |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
||||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Тогда лучше не давать пользователям прав на прямое чтение этой таблицы(!). А создать View или Stored Procedure, которая будет возвращать, только те записи, которые разрешено видеть текущему пользователю. В программе выводить данные через этот View/Stored Procedure. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 3 Всего: 133 |
Сделай эти логины и пароли данными доступа к программе. А логин и пароль доступа к БД зашей в саму программу. На основании введенного логина и делай фильтрацию. Вот и получишь что пароль к БД будет "знать" только твоя программа, а пользователи будут иметь доступ к этой программе по своим, персональным логинам, никак не связанным с доступом к БД.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Bose как вариант да, но это не решает проблему, ведь я образно привел одну таблицу хотя на деле их поболее.
Вот еще если если на таблицу нет прав, а на хранимку поставить, то разве будет работать хранимка? Poseidon пароль из программы вытащить не так уж и сложно. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 3 Всего: 133 |
Ну если так рассуждать, то и сервер не так уж сложно заставить думать, что к нему подключается именно твоя программа, когда на самом деле это не так. Против взлома ты вообще не защитишься.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| insoft |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 14.2.2007 Где: Тюменская область , г.Тобольск Репутация: 3 Всего: 3 |
RinOSpro
а метод шифрования данных тебе не подойдёт? потому что пароль как ты не крути никак не спрячешь, администратор в любом случае должен его знать.. |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
insoft как реализовать шифрование средствами MySQL?
ps Администратор я. Добавлено через 3 минуты и 58 секунд
Для начала надо научить его так думать)) Я вот пока не знаю как) И пока не услышал) Единственное что более похоже на реальное использование, так это хранимки или вьюхи. Добавлено через 9 минут и 26 секунд С таблицей Messages ни чего нельзя делать ни читать ни писать. Читать можно через View а как писать? Через хранимки? |
|||
|
||||
| RinOSpro |
|
||||
|
Unregistered |
Хотя через вьюхи тоже не получится (((
Вот смотрите:
Мы создали пользователя и отключили у него все права (даже на чтение)!!! теперь он не может даже видеть базу по SHOW DATABASE! Но если мы включим ему разрешение на SELECT то потом для отдельных таблиц перекрыть не сможем. тк нельзя перекрыть права более высокого уровня.
|
||||
|
|||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 3 Всего: 133 |
RinOSpro, думаю тут только средствами php получится. На подобии как данный форум реализован. Т.е., как вариант, делаешь php-скрипт, который лезет в БД и возвращает данные. А программой же ты эти данные получаешь и обрабатываешь. Прокраммой, кстати, может стать и браузер. Но можно и свою научить. Иначе я не вижу варианта как защититься от взлома и получения пароля и при этом ограничить доступ.
Да, при использовании php можно ведь поставить в настройках сервера мускула доступ только с локалхоста. Тогда точно поотваливаются всякие майадмины и прочее. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Обратил внимание на это 'user'@'%'? это значит что юзеры могут подключаться с любого хоста. Программа написана на Delphi то есть в процессе написания. Хотя на счет 3 звенной авторизации идея хороша! Пользователь не имеет пароля к БД но имеет пароль авторизации, который в месте с логином отправляется в скрипт кторый в свою очередь возвращается пароль к БД и программа коннектиться. ![]() плюсы: человек не сможет подключится к БД тк этот пароль не является паролем БД. минусы: снифер еще ни кто не отменял, проще будет получить даже чем из зашифрованного экзешника. сложно будет поддерживать много пользователей. Так народ, хорошие идеи стали появляться)) Высказываем не стесняемся) Это сообщение отредактировал(а) RinOSpro - 24.4.2009, 16:29 |
|||
|
||||
| Bose |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Честно скажу, я с MySql в таком плане работал. А вообще, я подразумевал, что можно выдать права на SELECt из вьюх/хранимов, не давая юзерам прав на чтение таблиц. А для вьюх и хранимок выдать права на работу с таблицами. Модификация данных через триггеры/хранимки (если в MySql такое есть). Ещё возможен вариант, когда пользователь вводит пароль, пароль шифруется(или тупо берётся хэш) каким-то образом, и к БД подключается уже с помощью зашифрованного пароля. Но при создании пользователя/смене пароля, введённый пользователем пароль тоже должен быть зашифрован. Таким образом, зная свой пароль пользователь может войти в программу, но не может подключится к БД, потому что работа с БД ведётся уже через другой пароль. Который, зная алгоритм, может быть получен из пользовательского. |
||||
|
|||||
| RinOSpro |
|
|||
|
Unregistered |
Bose да тоже не плохой вариант
Это сообщение отредактировал(а) RinOSpro - 27.4.2009, 09:36 |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Нет. Идея в том, что зашифрованный пароль передаётся прямо на сервер. И пароль нигде не расшифровывается. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Bose хм... тогда я ни чего не понял... Вот смотри есть ADOConnection там есть параметры login password. И куда подсовывать зашифрованнный пароль?
|
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Например:
Есть юзер, который знает свой логин: user1 и пароль test1 Есть функция шифрующая пароль. Зашифрованный пароль test1 будет выглядеть например так: 1tset. В базе данных создаётся аккаунт для этого пользователя: логин: user1 пароль: 1tset (уже зашифрованный) Получается, программа стартует, юзер вводит логин: user1 и пароль: test1. Программа шифрует этот пароль и получает 1tset. В ADOConnection передаётся user1 и 1tset. Получается, что если юзер подключается к БД через программу, то всё ок. А если захочет напрямую, то ничего у него не выйдет. |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Bose, так ведь в екзешнике пароль этот посмотреть можно...
RinOSpro, наверное, это имеет ввиду... |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Мне кажется, Bose имеет ввиду шифрование паролей пользователей, а не соединения ADO.
Добавлено через 2 минуты и 12 секунд В этом случае есть 2 варианта:
|
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Kbl4AH в точку =) В отладчике можно будет увидеть это зашифрованный пароль.
Bose когда я на лету буду шифровать и передавать в ADOConnection пароль то человек отлаживающий программу скажем через OllyDbg тоже ее увидит 1tset тот самый пароль передающийся на сервер. Но в целом очень даже не плохой метод =) Легко реализуемый. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Ну знаешь со всех сторон соломки не подстелишь! И вообще, какова вероятность того, что кто-то из пользователей: 1) умеет пользоваться phpMyAdmin 2) догадается каким образом сделана защита 3) будет специально дебажить программу в OllyDbg(кстати, а как им пользоваться 4) будет иметь время и желание для того чтобы этим заниматься 5) всё вышеперечисленное вместе взятое В том и прелесть, что легко реализуемый. |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Bose я боюсь утечки пароля), а уж желающие поломать найдутся)) специфика ПО такая))
Ну может в голове у когото родилась еще какая гениальная идея? )) |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Тогда как вариант - сервер приложений. Пароль передаётся туда и шифруется уже там. В этом случае доступ к базе данных вообще можно закрыть снаружи. |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Не совсем понял смысл "сервера приложений"... Ты предлагаешь 3-х звенную архитектуру? Типа DataSnap, SOAP? Нет такой вариант не подходит. Единственное что возможно так это криптор написанный на php (хотя бы скроем алгоритм шифрования) что бы усложнить жизнь взломщикам. Это сообщение отредактировал(а) RinOSpro - 30.4.2009, 16:02 |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |