|
|
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Ситуация такая: Существует библиотека, которая работает с SQLServer, и приложение, которое ее использует. В БД используется SQL идентификация, значит нужно задавать логин и пароль. Парараметры подключения(в том числе логин и пароль), задаются в программе(возможно хранятся в конфиг файле программы) и передаются библиотеке. И понятное дело не хотелось бы строку подключения в виде строки передавать как параметр функции. Вопрос: Как грамотно и безопасно сделать так, что бы библиотека могла подключаться в БД, тогда как параметры подключения к этой БД задаются в программе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2008, 17:00 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Что-то тут у Вас напутано. Если библиотека подключается к базе, то зачем программе знать параметры подключения? Храните параметры подключения в окружении библиотеки, а в программе храните только некий идентификатор строки подключения, однозначно указывающий библиотеке, какую из строк подключения использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2008, 02:01 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubinидентификатор строки подключения Для примера можете помотреть как работает ODBC DSN - там библиотеке ODBC передается только идентификатор (DSN), а все настройки DSN вынесены в отдельное приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2008, 02:03 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Roman S. GolubinЕсли библиотека подключается к базе, то зачем программе знать параметры подключения? Храните параметры подключения в окружении библиотеки, а в программе храните только некий идентификатор строки подключения, однозначно указывающий библиотеке, какую из строк подключения использовать. а если мне нужно задавать параметры подключения в программе, как быть?(предположим, что в программе есть интерфейс для задания строки подключения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2008, 23:06 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Gentв программе есть интерфейс для задания строки подключения И какой тогда смысл выносить работу с базой в отдельную библиотеку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 01:08 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
так, наверно неправильно сформулировал.. скажем так.. Есть много методов, которые работают с БД. И много объектов, которые эти методы содержат. Скорее всего параметры подключения будут храниться в конфиг-файле программы. Как лучше передать настройки соединения этим методам? Каждому методу передавать строку подключения вообще не вариант. Можно было бы в классе хранить, а задавать например через конструктор. Но лучший ли вариант считывать каждый раз все из конфиг файла? Может есть какие-нибудь глобальные настройки, где можно все это хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 23:56 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Давате все по порядку. GentЕсть много методов, которые работают с БД. Ага, в отдельной библиотеке? Замечательно. GentИ много объектов, которые эти методы содержат. Тут не понял, кто на ком стоял? GentСкорее всего параметры подключения будут храниться в конфиг-файле программы. Замечательно. Там им самое место. GentКак лучше передать настройки соединения этим методам? У вас методы сами по себе живут или в класс какой объединены? Если в класс, то и передавайте настройки классу, а методы при вызове будут этими настройками пользоваться. Или, как вариант, читайте конфиг из библиотеки. Так же посмотрите, как создаются и вызываются встроенные сервисы WCF - программа про их настройки вообще ничего не знает, только методы вызывать умеет. GentКаждому методу передавать строку подключения вообще не вариант. Ну почему, тоже вариант. Как говорится, на вкус и цвет фломастеры разные. Минус такого подхода в жесткой зависимости приложения от слоя доступа к данным. GentМожно было бы в классе хранить, а задавать например через конструктор. Тоже вариант. Посмотрите как в linq создается контекст. GentНо лучший ли вариант считывать каждый раз все из конфиг файла? Один раз на запуск программы, как минимум, считать придется. Или у Вас конфиг во время работы программы меняется? Если нет, то считайте один раз и в памяти храните в отдельном объекте. GentМожет есть какие-нибудь глобальные настройки, где можно все это хранить? Конечно есть - конфигурационный файл, например. Хотя, возможно, я не понял вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2008, 10:09 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Подключусь и я :) Собственно, есть у нас класс, в нем несколько методов работы с базой данных. Им нужна строка подключения. Надо ее как-то передать. Но в жизни объекта эти методы не всегда будут вызываться (не всегда объект будет работать с базой данных). Причем этот класс - в отдельной библиотеке и будет использоваться во множестве проектов. Получается, что в этом случае варианты решения задачи следующие: 1. Передавать в конструкторе. Недостаток - лишний параметр в случае если объект не будет работать с БД. 2. Передавать в отдельном методе. Неплохо, но можно забыть это сделать :) Хотелось бы как-то предостеречь себя, т.к. объектов будет создаваться множество. 3. Прямо в методах считывать конфиг файл; или как вариант - считать его предварительно и хранить в памяти (статический атрибут, ну или продвинутый вариант - синглтон). Здесь не нравится "глобализация", как известно, не очень хорошо иметь глобальные параметры, да и получается что наши классы зависимы от этого статического, где хранится строка подключения. Мне больше всего пока нравится вариант 2. Но может мы что-то упустили? И есть еще какие-то способы конфигурации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2008, 00:29 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
авторСобственно, есть у нас класс, в нем несколько методов работы с базой данных. Им нужна строка подключения. Надо ее как-то передать. Но в жизни объекта эти методы не всегда будут вызываться (не всегда объект будет работать с базой данных). Причем этот класс - в отдельной библиотеке и будет использоваться во множестве проектов. Может быть тогда стоит пересмотреть архитектуру? Если не хочется, тогда я склоняюсь к перегруженому конструктору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2008, 01:48 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Ну дак библиотека не сама по себе живёт, а грузится в какой либо процесс. Вот в конфиге екзешника этого процесса и укажешь строку соединения - либа будет иметь к ней доступ :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 01:06 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Roman S. GolubinТак же посмотрите, как создаются и вызываются встроенные сервисы WCF Roman S. GolubinПосмотрите как в linq создается контекст. Забыли ещё COM+, MSMQ, XML и SOA Похоже, на свет рождается очередной двенадцатилейерно-восьмитайерный распределённый интырпрайз-дирижабль, единственная реальная задача которого - это выборка нескольких строк из БД обычным select-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 01:14 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Чорный Бадареальная задача которого - это выборка нескольких строк из БД обычным select-ом Странно, но я всегда думал, что ради нескольких строк из БД не создают отдельных библиотек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 02:52 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Чорный БадаЗабыли ещё COM+, MSMQ, XML и SOAНу да, конечно, забыли Вас спросить Спрашиваем. Объясните, как XML может помочь в передаче строки подключения в библиотеку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 03:05 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Чорный БадаНу дак библиотека не сама по себе живёт, а грузится в какой либо процесс. Вот в конфиге екзешника этого процесса и укажешь строку соединения - либа будет иметь к ней доступ :-) ну да, не сама по себе она живет) но это отдельный проект и там тоже можно создать конфиг файл) будет хорошо, если строка подключения будет хранится в конфиг файле программы, но как сделать так, что бы "либа имела к нему доступ" и могла оттуда че-то считывать?) кстати, для расширения кругозора... вот если я возьму и просто передам строку подключения как параметр в какой-нить метод или как параметр в какой-нить конструктор - будет ли это безопасно с точки зрения возможностей декомпиляции .net приложений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 15:43 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Кстати тема удобного глобального хранилища строки подключения затрагивалась здесь /topic/449353&hl=connection+string+settings Там используют Settings(я ошибаюсь, либо это тот же конфиг файл, но просто с удобным интерфейсом и вынесенный в отдельный компонент?)), при этом так там свойство ConnectionString там readonly, то перегружают событие загрузки настроек и впихивают туда свою строку подключения) только вот как эти сеттингс приловчить для использования в двух проектах) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 15:57 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Gentну да, не сама по себе она живет) но это отдельный проект и там тоже можно создать конфиг файл) будет хорошо, если строка подключения будет хранится в конфиг файле программы, но как сделать так, что бы "либа имела к нему доступ" и могла оттуда че-то считывать?) Ну так а ConfigurationManager для чего? Или написать в коде Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 21:32 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Посмотрите, как устроен DbManager в BLToolkit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 08:50 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Ну так а ConfigurationManager для чего? Или написать в коде Код: plaintext так как заставить ConfigurationManager работать не со своим конфигом? если я запишу строку подключения в программе, она запишет ее в свой конфиг, а если в библиотеке считаю как вы показали, то считается строка из библиотечного конфига. так или не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 13:57 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
ИзопропилПосмотрите, как устроен DbManager в BLToolkit. ага, там конфиг файл в библиотеке и есть метод, который туда записывает.. в принципе вариант. Gentкстати, для расширения кругозора... вот если я возьму и просто передам строку подключения как параметр в какой-нить метод или как параметр в какой-нить конструктор - будет ли это безопасно с точки зрения возможностей декомпиляции .net приложений? ну так безопасно или я уж слишком загоняюсь?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 14:26 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Gentтак как заставить ConfigurationManager работать не со своим конфигом? Грубо говоря, ConfigurationManager, вызываемый из либы, работает с конфигом того приложения в которое либа в данный момент загружена (если точнее, то путь к файлу конфига хранится в свойствах текущего домена и общий для всех сборок в нём). Это по умолчанию. А при желании им можно открыть любой произвольный файл конфига. Т.е. если у вас либа mylib.dll, использует её myprog.exe с конфигом myprog.exe.config, то ConfigurationManager.ConnectionStrings даст вам строки именно из myprog.exe.config. Либо из web.config, если либа будет вызываться из ASP.NET приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 21:20 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Чорный Бада Грубо говоря, ConfigurationManager, вызываемый из либы, работает с конфигом того приложения в которое либа в данный момент загружена (если точнее, то путь к файлу конфига хранится в свойствах текущего домена и общий для всех сборок в нём). Это по умолчанию. А при желании им можно открыть любой произвольный файл конфига. Т.е. если у вас либа mylib.dll, использует её myprog.exe с конфигом myprog.exe.config, то ConfigurationManager.ConnectionStrings даст вам строки именно из myprog.exe.config. Либо из web.config, если либа будет вызываться из ASP.NET приложения. о, так это ж меняет дело) надо затестить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2008, 00:34 |
|
||
|
Безопасная передача строки подключения
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за помощь! действительно, если в конфиг определен и в библиотеке, и в проге, то по умолчанию грузится тот, который в проге, а уж если его нет, то уже тот, что в библиотеке. И я правильно понял, что компонент Settings, в отличие от конфига, распространяется только на один проект(там создается класс, отвечающий за настройки, который доступен только внутри проекта) или можно как-то его использовать и в других проектах? но в общем-то проблема решена, еще раз спасибо за помощь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2008, 13:46 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=81&tid=1352214]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 355ms |

| 0 / 0 |
