[C#] Klient -> egen Server -> SQL VS Klient -> SQL?

Permalänk
Medlem

[C#] Klient -> egen Server -> SQL VS Klient -> SQL?

Jag skriver ett litet program i C# som kommer att lagra data i SQL troligen MySQL (möjligen plugin support för andra SQL servrar senare)

Om jag gör en egen server och gör ett eget protokoll så har jag mer kontroller på användarens rättigheter på serversidan när något ska skrivas/läsas. Jag kan skapa min egen user tabell med användarens accessnivå sparad som server kan verifiera varje gång. Vad finns det för möjligheter att göra det om jag kör ren mySQL server?

t.ex. användare A får bara läsa medans användare B får göra allt. Hur kan klienten veta det om man kör ren SQL databas?

Visa signatur

Desktop: Ryzen 9 3950x | RTX 2060 | 16Gb RAM | 512Gb + 256Gb SSD
NAS: HP Microserver Gen8 | 8GB Ram | 3x2Tb ZFS | FreeNAS
SRV: HP ML350p Gen8 | 64GB Ram | 2x E5-2630v2 | ESXI

Permalänk
Hedersmedlem

Hur kommer trafiken att se ut. Är det typ skicka och få något tillbaka eller ska servern pusha ut info till klienterna?

Jag hade satsat på typ ett REST eller WebService API istället för att skriva en helt egen server. Vem som ska kunna göra vad måste du hålla reda på själv. Om du satsar på ett webgränssnitt kan du skapa olika sidor för tex läsa och skriva samt styra det med rättigheter på webservern. Annars får du skriva din egen kod som håller rätt på det.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Klienten kommer att skicka och få något tillbaka. Servern kommer inte att pusha någon information, därför jag kollar på ren SQL implementation.

Det fungerar utmärkt i min egen applikation om jag skulle ha en databas och en tabell för användare och deras rättigheter. Problemet uppstår om någon får tag i inloggningen till databasen som programmet använder när den ansluter till MySQL, då kan den personen skriva vad den vill till databasen med ett eget program utan att MySQL vet att det är fel.

Därför funderar jag om man kan använda sig av MySQL's egna användarkonton för anslutning till databasen. Då får inte programmet i sig en inloggning utan det är användarens inloggning som används, då spelar det ingen roll om någon gör ett eget program och använder sin inloggning. Men hur kan mitt program få reda på vilken nivå den användaren ska ha i programmet, så knappar kan gömmas/visas beroende på om användare kan göra saker eller inte.

Om det nu skulle fungera bra att använda MySQL's egna användarkonton, vad finns det för nackdelar med det? Finns den möjligheten i andra SQL servrar, så det går att göra plugins för att använda t.ex. MS SQL server istället?

Jag har funderat på att använda REST för serverdelen, men det blir ytterligare en del att programmera.

Visa signatur

Desktop: Ryzen 9 3950x | RTX 2060 | 16Gb RAM | 512Gb + 256Gb SSD
NAS: HP Microserver Gen8 | 8GB Ram | 3x2Tb ZFS | FreeNAS
SRV: HP ML350p Gen8 | 64GB Ram | 2x E5-2630v2 | ESXI

Permalänk
Hedersmedlem
Skrivet av McZ:

Klienten kommer att skicka och få något tillbaka. Servern kommer inte att pusha någon information, därför jag kollar på ren SQL implementation.

Det fungerar utmärkt i min egen applikation om jag skulle ha en databas och en tabell för användare och deras rättigheter. Problemet uppstår om någon får tag i inloggningen till databasen som programmet använder när den ansluter till MySQL, då kan den personen skriva vad den vill till databasen med ett eget program utan att MySQL vet att det är fel.

Därför funderar jag om man kan använda sig av MySQL's egna användarkonton för anslutning till databasen. Då får inte programmet i sig en inloggning utan det är användarens inloggning som används, då spelar det ingen roll om någon gör ett eget program och använder sin inloggning. Men hur kan mitt program få reda på vilken nivå den användaren ska ha i programmet, så knappar kan gömmas/visas beroende på om användare kan göra saker eller inte.

Om det nu skulle fungera bra att använda MySQL's egna användarkonton, vad finns det för nackdelar med det? Finns den möjligheten i andra SQL servrar, så det går att göra plugins för att använda t.ex. MS SQL server istället?

Jag har funderat på att använda REST för serverdelen, men det blir ytterligare en del att programmera.

Jag skulle inte låta användare logga direkt in i MySQL-databasen. Det finns vissa fall då det skulle vara ok, men jag tolkar inte det som att detta är ett sådant. Men om man nu tvunget vill det så hanterar MySQL olika användare med olika rättigheter, så det är inga problem i sig.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Jag hade satsat på ett WCF Data Service som är mer eller mindre byggt för just det här syftet: https://en.wikipedia.org/wiki/WCF_Data_Services Vist kan du bygga eget men hade själv aldrig någonsin exponerat en SQL server utåt, om något så öppnar det bara upp till rejält mycket attacker.

Samt om du ska lösa detta i SQL världen så finns det bara ett enda förslag, och det är Stored Procedures & Views för EXAKT allt. Inga direkta access till en enda tabell, inte en enda select från dom o.s.v. vilket blir väldigt mycket extra SQL kod för att lösa.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Avstängd

Man växer ur en WCF data service tjänst rätt fort. Jag hade gjort en ISS hostad egen tjänst med CQRS

Skickades från m.sweclockers.com

Visa signatur
Permalänk
Medlem
Skrivet av McZ:

Jag skriver ett litet program i C# som kommer att lagra data i SQL troligen MySQL (möjligen plugin support för andra SQL servrar senare)

Om jag gör en egen server och gör ett eget protokoll så har jag mer kontroller på användarens rättigheter på serversidan när något ska skrivas/läsas. Jag kan skapa min egen user tabell med användarens accessnivå sparad som server kan verifiera varje gång. Vad finns det för möjligheter att göra det om jag kör ren mySQL server?

t.ex. användare A får bara läsa medans användare B får göra allt. Hur kan klienten veta det om man kör ren SQL databas?

Det enklaste är väl att skapa en tabell för användare som du säger, sen skapa antingen roller som användarna har om det passar scenariot, eller ännu bättre kör claims-baserat (länk).