powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Безопасная передача строки подключения
22 сообщений из 22, страница 1 из 1
Безопасная передача строки подключения
    #35400326
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая:
Существует библиотека, которая работает с SQLServer, и приложение, которое ее использует. В БД используется SQL идентификация, значит нужно задавать логин и пароль. Парараметры подключения(в том числе логин и пароль), задаются в программе(возможно хранятся в конфиг файле программы) и передаются библиотеке. И понятное дело не хотелось бы строку подключения в виде строки передавать как параметр функции.
Вопрос:
Как грамотно и безопасно сделать так, что бы библиотека могла подключаться в БД, тогда как параметры подключения к этой БД задаются в программе?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35400608
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то тут у Вас напутано. Если библиотека подключается к базе, то зачем программе знать параметры подключения? Храните параметры подключения в окружении библиотеки, а в программе храните только некий идентификатор строки подключения, однозначно указывающий библиотеке, какую из строк подключения использовать.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35400609
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. Golubinидентификатор строки подключения
Для примера можете помотреть как работает ODBC DSN - там библиотеке ODBC передается только идентификатор (DSN), а все настройки DSN вынесены в отдельное приложение.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35401226
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman S. GolubinЕсли библиотека подключается к базе, то зачем программе знать параметры подключения? Храните параметры подключения в окружении библиотеки, а в программе храните только некий идентификатор строки подключения, однозначно указывающий библиотеке, какую из строк подключения использовать.
а если мне нужно задавать параметры подключения в программе, как быть?(предположим, что в программе есть интерфейс для задания строки подключения)
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35401266
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gentв программе есть интерфейс для задания строки подключения
И какой тогда смысл выносить работу с базой в отдельную библиотеку?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35402882
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так, наверно неправильно сформулировал..
скажем так..
Есть много методов, которые работают с БД. И много объектов, которые эти методы содержат. Скорее всего параметры подключения будут храниться в конфиг-файле программы. Как лучше передать настройки соединения этим методам? Каждому методу передавать строку подключения вообще не вариант. Можно было бы в классе хранить, а задавать например через конструктор. Но лучший ли вариант считывать каждый раз все из конфиг файла? Может есть какие-нибудь глобальные настройки, где можно все это хранить?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35403242
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давате все по порядку.
GentЕсть много методов, которые работают с БД.
Ага, в отдельной библиотеке? Замечательно.
GentИ много объектов, которые эти методы содержат.
Тут не понял, кто на ком стоял?
GentСкорее всего параметры подключения будут храниться в конфиг-файле программы.
Замечательно. Там им самое место.
GentКак лучше передать настройки соединения этим методам?
У вас методы сами по себе живут или в класс какой объединены? Если в класс, то и передавайте настройки классу, а методы при вызове будут этими настройками пользоваться. Или, как вариант, читайте конфиг из библиотеки. Так же посмотрите, как создаются и вызываются встроенные сервисы WCF - программа про их настройки вообще ничего не знает, только методы вызывать умеет.
GentКаждому методу передавать строку подключения вообще не вариант.
Ну почему, тоже вариант. Как говорится, на вкус и цвет фломастеры разные. Минус такого подхода в жесткой зависимости приложения от слоя доступа к данным.
GentМожно было бы в классе хранить, а задавать например через конструктор.
Тоже вариант. Посмотрите как в linq создается контекст.
GentНо лучший ли вариант считывать каждый раз все из конфиг файла?
Один раз на запуск программы, как минимум, считать придется. Или у Вас конфиг во время работы программы меняется? Если нет, то считайте один раз и в памяти храните в отдельном объекте.
GentМожет есть какие-нибудь глобальные настройки, где можно все это хранить?
Конечно есть - конфигурационный файл, например. Хотя, возможно, я не понял вопроса.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35405412
Sanchez911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подключусь и я :)
Собственно, есть у нас класс, в нем несколько методов работы с базой данных. Им нужна строка подключения. Надо ее как-то передать. Но в жизни объекта эти методы не всегда будут вызываться (не всегда объект будет работать с базой данных). Причем этот класс - в отдельной библиотеке и будет использоваться во множестве проектов. Получается, что в этом случае варианты решения задачи следующие:
1. Передавать в конструкторе. Недостаток - лишний параметр в случае если объект не будет работать с БД.
2. Передавать в отдельном методе. Неплохо, но можно забыть это сделать :) Хотелось бы как-то предостеречь себя, т.к. объектов будет создаваться множество.
3. Прямо в методах считывать конфиг файл; или как вариант - считать его предварительно и хранить в памяти (статический атрибут, ну или продвинутый вариант - синглтон). Здесь не нравится "глобализация", как известно, не очень хорошо иметь глобальные параметры, да и получается что наши классы зависимы от этого статического, где хранится строка подключения.

Мне больше всего пока нравится вариант 2. Но может мы что-то упустили? И есть еще какие-то способы конфигурации?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35405440
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСобственно, есть у нас класс, в нем несколько методов работы с базой данных. Им нужна строка подключения. Надо ее как-то передать. Но в жизни объекта эти методы не всегда будут вызываться (не всегда объект будет работать с базой данных). Причем этот класс - в отдельной библиотеке и будет использоваться во множестве проектов.

Может быть тогда стоит пересмотреть архитектуру?

Если не хочется, тогда я склоняюсь к перегруженому конструктору.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35407736
Чорный Бада
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дак библиотека не сама по себе живёт, а грузится в какой либо процесс. Вот в конфиге екзешника этого процесса и укажешь строку соединения - либа будет иметь к ней доступ :-)
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35407741
Чорный Бада
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. GolubinТак же посмотрите, как создаются и вызываются встроенные сервисы WCF
Roman S. GolubinПосмотрите как в linq создается контекст.
Забыли ещё COM+, MSMQ, XML и SOA Похоже, на свет рождается очередной двенадцатилейерно-восьмитайерный распределённый интырпрайз-дирижабль, единственная реальная задача которого - это выборка нескольких строк из БД обычным select-ом
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35407769
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чорный Бадареальная задача которого - это выборка нескольких строк из БД обычным select-ом
Странно, но я всегда думал, что ради нескольких строк из БД не создают отдельных библиотек
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35407773
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чорный БадаЗабыли ещё COM+, MSMQ, XML и SOAНу да, конечно, забыли Вас спросить Спрашиваем. Объясните, как XML может помочь в передаче строки подключения в библиотеку?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35409261
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чорный БадаНу дак библиотека не сама по себе живёт, а грузится в какой либо процесс. Вот в конфиге екзешника этого процесса и укажешь строку соединения - либа будет иметь к ней доступ :-)

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

кстати, для расширения кругозора... вот если я возьму и просто передам строку подключения как параметр в какой-нить метод или как параметр в какой-нить конструктор - будет ли это безопасно с точки зрения возможностей декомпиляции .net приложений?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35409353
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати тема удобного глобального хранилища строки подключения затрагивалась здесь /topic/449353&hl=connection+string+settings
Там используют Settings(я ошибаюсь, либо это тот же конфиг файл, но просто с удобным интерфейсом и вынесенный в отдельный компонент?)), при этом так там свойство ConnectionString там readonly, то перегружают событие загрузки настроек и впихивают туда свою строку подключения)
только вот как эти сеттингс приловчить для использования в двух проектах)
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35410193
Чорный Бада
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gentну да, не сама по себе она живет) но это отдельный проект и там тоже можно создать конфиг файл) будет хорошо, если строка подключения будет хранится в конфиг файле программы, но как сделать так, что бы "либа имела к нему доступ" и могла оттуда че-то считывать?)
Ну так а ConfigurationManager для чего? Или написать в коде
Код: plaintext
bla-bla-bla = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString
это некошерно, потому что слишком просто?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35410579
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите, как устроен DbManager в BLToolkit.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35411498
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так а ConfigurationManager для чего? Или написать в коде
Код: plaintext
bla-bla-bla = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString
это некошерно, потому что слишком просто? [/quot]
так как заставить ConfigurationManager работать не со своим конфигом? если я запишу строку подключения в программе, она запишет ее в свой конфиг, а если в библиотеке считаю как вы показали, то считается строка из библиотечного конфига. так или не так?
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35411577
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилПосмотрите, как устроен DbManager в BLToolkit.
ага, там конфиг файл в библиотеке и есть метод, который туда записывает.. в принципе вариант.

Gentкстати, для расширения кругозора... вот если я возьму и просто передам строку подключения как параметр в какой-нить метод или как параметр в какой-нить конструктор - будет ли это безопасно с точки зрения возможностей декомпиляции .net приложений?
ну так безопасно или я уж слишком загоняюсь?)
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35412626
Чорный Бада
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gentтак как заставить ConfigurationManager работать не со своим конфигом?
Грубо говоря, ConfigurationManager, вызываемый из либы, работает с конфигом того приложения в которое либа в данный момент загружена (если точнее, то путь к файлу конфига хранится в свойствах текущего домена и общий для всех сборок в нём). Это по умолчанию. А при желании им можно открыть любой произвольный файл конфига.

Т.е. если у вас либа mylib.dll, использует её myprog.exe с конфигом myprog.exe.config, то ConfigurationManager.ConnectionStrings даст вам строки именно из myprog.exe.config. Либо из web.config, если либа будет вызываться из ASP.NET приложения.
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35412779
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чорный Бада
Грубо говоря, ConfigurationManager, вызываемый из либы, работает с конфигом того приложения в которое либа в данный момент загружена (если точнее, то путь к файлу конфига хранится в свойствах текущего домена и общий для всех сборок в нём). Это по умолчанию. А при желании им можно открыть любой произвольный файл конфига.

Т.е. если у вас либа mylib.dll, использует её myprog.exe с конфигом myprog.exe.config, то ConfigurationManager.ConnectionStrings даст вам строки именно из myprog.exe.config. Либо из web.config, если либа будет вызываться из ASP.NET приложения.
о, так это ж меняет дело) надо затестить)
...
Рейтинг: 0 / 0
Безопасная передача строки подключения
    #35412949
Gent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за помощь! действительно, если в конфиг определен и в библиотеке, и в проге, то по умолчанию грузится тот, который в проге, а уж если его нет, то уже тот, что в библиотеке.
И я правильно понял, что компонент Settings, в отличие от конфига, распространяется только на один проект(там создается класс, отвечающий за настройки, который доступен только внутри проекта) или можно как-то его использовать и в других проектах?

но в общем-то проблема решена, еще раз спасибо за помощь)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Безопасная передача строки подключения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]