Jaki konektor do łączenia z bazą danych MySQL?

0

Witam serdecznie.

Jestem w trakcie pisania zamkniętej aplikacji (C# .NET 3.5). Zamkniętej w taki sposób, że miałaby być ona dostępna do darmowego użytku, ale bez upubliczniania kodu źródłowego. Aplikacja ta miałaby między innymi za zadanie łączyć się z z góry zdefiniowanym serwerem i położoną na nim bazą danych. I tu rodzi się problem. W jaki sposób połączyć się z taką bazą? Za pomocą jakiego konektora (connector)?

Dla SQL Server mamy gotową przestrzeń [b]System.Data.SqlClient[/b]. Dla MySQL przetestowałem kilka opcji i nie będę ukrywał, że najwygodniejsze byłoby użycie Connector/NET1 z MySQL.com lub ewentualnie Odbc, ale tu musiałbym użyć np. Connector/ODBC2 z MySQL.com. Problemem jest jednak licencja tych bibliotek - GPL, która wymusza publikację kodu na tej samej licencji. Support MySQL niestety nie raczy odpowiadać na e-maile. Wychodzi więc na to, że jeżeli chce się stworzyć program korzystający z tego typu bazy danych, dystrybuować go darmowo, ale bez dzielenia się kodem to trzeba jednak ponieść koszty na zakup licencji.

I tu rodzi się pytanie. Jakie inne sposoby znacie i możecie polecić do obsługi MySQL z poziomu C# .NET 3.5 takie, aby można było bezproblemowo używać je w zamkniętym oprogramowaniu bez uiszczania dodatkowych opłat (jak wyżej)?

Z góry dziękuję za odpowiedzi.
m1chu

1 http://www.mysql.com/downloads/connector/net/
2 http://www.mysql.com/downloads/connector/odbc/

0

http://www.devart.com/dotconnect/mysql/editions.html
Darmowa wersja jest dość ograniczona.

Plotki chodzą, że komercyjna licencja na oficjalnego connectora zaczyna się od 250 euro.

0

Dzięki bardzo za odpowiedź. Pobrałem, muszę jeszcze znaleźć jakieś informacje o licencji tej darmowej wersji. To, że jest "darmowa" nie zawsze znaczy, że do każdego użytku.

Co do oficjalnego connectora. Może nie jest to jakaś nie wiadomo jak duża kwota (choć do małych też nie należy), ale ogranicza możliwość tworzenia. Wiem, że każdy developer ma prawo licencjonować swoje programy/biblioteki jak chce, nie mniej jednak dla kogoś kto chciałbym wykorzystać ten connector w programie dystrybuowanym darmowo (bez osiągania profitów z niego) dopłacanie do "interesu" mija się z celem. I to tylko dlatego, że nie chce udostępnić źródeł, chociażby ze względu na możliwość obniżenia bezpieczeństwa aplikacji (w tym wypadku).

Dlatego szukam wszelkich konkretnych zamienników. Nie chce mi się wierzyć, że takowych nie ma, bo za jakich korzystaliby developerzy-hobbiści na całym świecie. Wszyscy łamią licencje? ;]

0

Nie, nie wszyscy. Tylko ci, którzy dystrybuują swoje aplikacje na innej licencji niż GPL korzystając jednocześnie z oficjalnego connectora. Chciałbym tutaj zwrócić uwagę na słowo "dystrybuują". Jeżeli stworzysz aplikację webową, która będzie działała tylko na twoim serwerze to jednocześnie będąc na licencji GPL wcale nikomu jej źródeł udostępniać nie musisz.
A jeżeli poznanie źródeł tego typu darmowej aplikacji jest równoważne złamaniu jej zabezpieczeń to.. średnie to zabezpieczenia, zwłaszcza biorąc pod uwagę, że to .NET. Jak już pisałem jakiś czas temu - bezpośrednie połączenie z bazą danych w klientach nie jest najlepszym rozwiązaniem.
Powiedz może co właściwie ten twój program ma robić i czy koniecznie z MySQL korzystać musisz (są inne opcje z bardziej dostępnymi licencjami).

0
m1chu napisał(a)

I to tylko dlatego, że nie chce udostępnić źródeł, chociażby ze względu na możliwość obniżenia bezpieczeństwa aplikacji (w tym wypadku).

Jak zatem masz zamiar zabezpieczyć kod swojej aplikacji?

Nie chce mi się wierzyć, że takowych nie ma, bo za jakich korzystaliby developerzy-hobbiści na całym świecie. Wszyscy łamią licencje? ;]

Może po prostu nie używają w takiej sytuacji MySQL (bo i po co)?

0

To może po kolei:

  1. Aplikacja nie będzie aplikacją webową, a zwykłą okienkową (Windows Forms) z możliwością działania na informacjach bazodanowych.

A jeżeli poznanie źródeł tego typu darmowej aplikacji jest równoważne złamaniu jej zabezpieczeń to.. średnie to zabezpieczenia, zwłaszcza biorąc pod uwagę, że to .NET.

  1. Co masz na myśli? To, że można przeanalizować, czy podejrzeć schemat klas jakimś reflektorem lub po prostu go zdeasemplować? Nie twierdzę, że skompilowany kod jest nie do złamania, ale wymaga ciut więcej umiejętności, niż otwarcie kodu w jakimś środowisku. Inną kwestią - jak w takim bądź razie Ty przetrzymujesz dane dostępowe do bazy danych, tak aby były one nieosiągalne przez osoby trzecie, szczególnie w otwartym kodzie? Jak przetrzymujesz inne dane wrażliwe?

Jak już pisałem jakiś czas temu - bezpośrednie połączenie z bazą danych w klientach nie jest najlepszym rozwiązaniem.

  1. Jakie inne rozwiązanie masz na myśli? Wywoływanie zdalnych zasobów bezpośrednio na serwerze i wychwytywanie wyników? Czy coś innego?

Powiedz może co właściwie ten twój program ma robić i czy koniecznie z MySQL korzystać musisz (są inne opcje z bardziej dostępnymi licencjami).

  1. Przede wszystkim program ma operować na współdzielonych między użytkownikami danych. Przykładowo: użytkownik A dodaje nową pozycje do listy zdarzeń, po czym może sobie odczytać historię ostatnich dziesięciu. Może też wyświetlić np. listę najbardziej aktywnych użytkowników w danym okresie, dzięki danym statystycznym (aktywności) zorganizowanych w bazie danych. Po to jest mi potrzebna baza. Wybrałem MySQL, bo z racji pewnego doświadczenia w webdevelopingu najłatwiej mi się z niej korzysta. Mógłbym wybrać inną i "powalczyć", ale nie o to chodzi, żeby problem zamieść pod dywan, a żeby znaleźć rozwiązanie. Bo kiedyś do jej użycia może mnie przymusić sytuacja.

Jak zatem masz zamiar zabezpieczyć kod swojej aplikacji?

  1. Mam zamiar zabezpieczyć ją na tyle, na ile będę potrafił. Na więcej nie jestem w stanie. Może się mylę, ale chociażby jakiemuś procentowi osób będzie pod górkę próbowanie dostać się do chociażby bazy danych, jeżeli dostaną skompilowaną aplikację, a nie pliki źródłowe. Jeżeli się mylę, wyprowadźcie mnie z błędu logiczną argumentacją. I tak wiem...jak ktoś będzie chciał naprawdę narozrabiać to nie będzie na niego mocnych, cokolwiek bym nie robił.

Może po prostu nie używają w takiej sytuacji MySQL (bo i po co)?

  1. Czy to ma znaczyć, że:
  • nie używa się MySQL w aplikacjach dedykowanych w ogóle?
  • nie używa się jakichkolwiek baz danych w aplikacjach dedykowanych?
  • nie używa się MySQL w "takich sytuacjach", w których chce się działać na współdzielonych danych?
    Bez względu na odpowiedź: dlaczego?

Pozdrawiam,
m1chu

0

Stwórz na serwerze webservice, API, które będzie się zajmowało przyjmowaniem i zwracaniem danych dla aplikacji klienckich. Niech API pozwala tylko na to, co można zrobić przez aplikację. W przypadku bezpośredniego połączenia z bazą (wykonanie tego w T-SQL i przy pomocy wbudowanych mechanizmów autentykacji) jest to trudniejsze albo i bardzo trudne / niemożliwe, jeżeli ma istnieć jakiś bardziej skomplikowany system autentykacji.
Jeżeli aplikacja ma pozwalać na dodanie tylko jednego wpisu na godzinę, to niech sprawdzi to przede wszystkim API.

0
m1chu napisał(a)

Mam zamiar zabezpieczyć ją na tyle, na ile będę potrafił. Na więcej nie jestem w stanie.

Wybitnie nic niemówiące zdanie. :)

Może się mylę, ale chociażby jakiemuś procentowi osób będzie pod górkę próbowanie dostać się do chociażby bazy danych, jeżeli dostaną skompilowaną aplikację, a nie pliki źródłowe.

Ściągnięcie ILSpy to jakieś 2 minuty. Zamknięcie źródeł, bez żadnej obfuskacji nie jest właściwie żadnym zabezpieczeniem. Równie dobrze można by otworzyć źródła i być w zgodzie z licencją.
Co do słabego zabezpieczenia bazy w ten sposób, to już Rev się wypowiedział.

Czy to ma znaczyć, że:

  • nie używa się MySQL w aplikacjach dedykowanych w ogóle?
  • nie używa się jakichkolwiek baz danych w aplikacjach dedykowanych?
  • nie używa się MySQL w "takich sytuacjach", w których chce się działać na współdzielonych danych?
    Bez względu na odpowiedź: dlaczego?

Nie, nie, nie... Używa się baz danych, ale MySQL z .NET raczej bardzo rzadko, bo zalet takiego rozwiązania raczej nie ma, z kolei łatwiej jest współpracować z MSSQL i nie trzeba za to nic płacić, nawet przy zamkniętym kodzie.

0

Stwórz na serwerze webservice, API, które będzie się zajmowało przyjmowaniem i zwracaniem danych dla aplikacji klienckich. Niech API pozwala tylko na to, co można zrobić przez aplikację. W przypadku bezpośredniego połączenia z bazą (wykonanie tego w T-SQL i przy pomocy wbudowanych mechanizmów autentykacji) jest to trudniejsze albo i bardzo trudne / niemożliwe, jeżeli ma istnieć jakiś bardziej skomplikowany system autentykacji.
Jeżeli aplikacja ma pozwalać na dodanie tylko jednego wpisu na godzinę, to niech sprawdzi to przede wszystkim API.

Dzięki bardzo za pomysł. Zaimplementuję i zobaczę jak działa.

Wybitnie nic niemówiące zdanie. :)

Się postarałem ;)

Ściągnięcie ILSpy to jakieś 2 minuty.

Dla Ciebie :]

Zamknięcie źródeł, bez żadnej obfuskacji nie jest właściwie żadnym zabezpieczeniem.

Kto powiedział, że obfuskacji nie będzie? poza tym, to także nie daje nawet 99% pewności, że kod aplikacji nie zostanie podejrzany, a co dopiero złamany. Dziwny urok aplikacji w .NET-cie.

Nie, nie, nie... Używa się baz danych, ale MySQL z .NET raczej bardzo rzadko, bo zalet takiego rozwiązania raczej nie ma, z kolei łatwiej jest współpracować z MSSQL i nie trzeba za to nic płacić, nawet przy zamkniętym kodzie.

A co w wypadku, jeżeli z bazy MySQL miałby korzystać dodatkowo, równolegle serwis WWW (PHP)? Przykładowo na zasadzie .NET <-> MySQL <-> WWW (PHP). Nie lepiej wybrać (na zasadzie wyważenia mniejszego zła z każdej strony) lepiej MySQL niż MSSQL? Choć suma sumarum to najmniejsze problemy chyba w tym względzie robiłby PostgreSQL.

Nie mówię, że wybiorę MySQL. Pewnie bym się nie zastanawiał, gdyby nie problemy licencyjne w tym wypadku. Ale, jeżeli się okaże, że nie ma legalnego rozwiązania to będę musiał zrezygnować i może podejdę do PostgreSQL-a przykładowo.

Wracając do pytań licencyjnych (wiem, że to nie kwestia stricte programistyczna). GPL dotyczy dystrybucji. Co, jeżeli connector/net będzie zamieszczony wraz z webservicem na serwerze i nie będzie dystrybuowany klientowi zewnętrznemu? Czy nie działa to wtedy na zasadzie, że tak jak w przypadku skryptów pisanych w PHP, praca pochodna nie musi być udostępniana?

0

Nie jestem prawnikiem ani nie znam całego GPL na pamięć, ale z tego co rozumiem działa tam mniej więcej taka zasada: jeżeli jakaś praca jest bezpośrednio zależna od tej licencjonowanej na GPL, ta pierwsza też musi mieć licencję GPL. Twoja aplikacja nie będzie działać bez webservice'u, który będzie na licencji GPL.
Poczytaj z resztą: http://www.gnu.org/licenses/gpl-faq.html#GPLInProprietarySystem i pytanie niżej.

0

Czytałem, tak samo jak opinie na ten temat. Niestety, też prawnikiem nie jestem.

Czyli wychodzi na to, że jeżeli użyje w zaprezentowany przeze mnie sposób connector to jest to niezgodne z licencją, ale - abstrakcyjna sytuacja - jeżeli bym wywoływał skrypt PHP na serwerze, w którym byłyby zapisane zapytania i odbierał wynik, to już byłoby ok. Paranoja.

Nie mniej jednak dzięki za pomoc.

0
m1chu napisał(a)

Kto powiedział, że obfuskacji nie będzie?

Nikt nie mówił, że będzie, więc zrozumiałem, że jej nie będzie. :)

A co w wypadku, jeżeli z bazy MySQL miałby korzystać dodatkowo, równolegle serwis WWW (PHP)? Przykładowo na zasadzie .NET <-> MySQL <-> WWW (PHP). Nie lepiej wybrać (na zasadzie wyważenia mniejszego zła z każdej strony) lepiej MySQL niż MSSQL?

W takim wypadku ma to sens. A tak jest w przypadku Twojego projektu? Bo jeśli nie, to naprawdę olałbym to całe MySQL.

Ale, jeżeli się okaże, że nie ma legalnego rozwiązania to będę musiał zrezygnować i może podejdę do PostgreSQL-a przykładowo.

Npgsql jest na licencji BSD, więc chyba lepszej dla Ciebie. Może więc czas dokonać właściwego wyboru? ;)

0

Jak to czytam to mi się wydaje że już SQLServer Express ma przyjaźniejszą licencję niż te "darmowe" bazy. A przecież to program Micorsoftu !!!

0

W takim wypadku ma to sens. A tak jest w przypadku Twojego projektu?

Jest spora szansa, że tak będzie. Jestem na etapie analizowania, czy działanie na jednej bazie nie "zagrozi" bezpieczeństwo, a w odwrotnym przypadku - działanie na dwóch bazach nie spowoduje nadmiernej duplikacji danych.

Npgsql jest na licencji BSD, więc chyba lepszej dla Ciebie. Może więc czas dokonać właściwego wyboru?

Jestem najbliżej tego wyboru. Dzięki za informację. poza tym jest jeszcze SQLite, tylko że w tym wypadku jestem praktycznie blady, pod względem znajomości tej bazy. Więc prawdopodobnie zostanie PSQL, no chyba, że jakimś cudem do momentu jak konkretnie zacznę MySQL będzie "kompletnie darmowy".

Jak to czytam to mi się wydaje że już SQLServer Express ma przyjaźniejszą licencję niż te "darmowe" bazy. A przecież to program Micorsoftu !!!

W tym konkretnym przypadku licencje Express są przyjaźniejsze. Mają, z tego co wiem, pewne ograniczenia w postaci wykorzystywanych zasobów sprzętowych, ale licencja sama w sobie wprowadza mniej ograniczeń niż chociażby ta MySQL1

  1. subiektywna opinia bez prawniczego podparcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1