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

Odpowiedz Nowy wątek
2011-08-15 14:22
m1chu
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/

Pozostało 580 znaków

2011-08-15 19:18
Rev
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.


Pozostało 580 znaków

2011-08-15 21:25
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? ;]

Pozostało 580 znaków

2011-08-15 21:38
Rev
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).


Pozostało 580 znaków

2011-08-15 21:39
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)?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-08-15 22:07
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

Pozostało 580 znaków

2011-08-15 22:20
Rev
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.


Pozostało 580 znaków

2011-08-16 01:12
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-08-16 09:01
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?

Jeśli użyjesz dobrego protektora (tzn. pewnie płatnego) to poziom zabezpieczenia aplikacji w C# masz podobny jak programu napisanego np. w C++, również zabezpieczonego protektorem. Obydwa ktoś może złamać, ale nie każdy i nie z marszu. - msm 2011-08-17 11:46

Pozostało 580 znaków

2011-08-16 09:26
Rev
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.


Pozostało 580 znaków

2011-08-16 12:31
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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