Toon posts:

[SQL] Rechten toewijzen op bepaalde records

Pagina: 1
Acties:
  • 164 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een MSDE database met een aantal tabellen. Heb een aantal users en het inloggen gaat prima. Users aan een rol gekoppeld en rechten over tabellen gaat perfect, maar nu zit ik met één probleem.

Het systeem moet o.a. een timesheet bijhouden van medewerkers. Medewerkers moeten dus rechten hebben over de tabel waarin de timesheets opgeslagen worden. Ik kan wel een rol aan de tabel koppelen, maar dan kunnen alle medewerkers de timesheets van andere medewerkers inzien, wat niet de bedoeling is.

Is er een mogelijkheid om ervoor te zorgen dat een specifieke user alleen maar rechten krijgt op bepaalde records en de rest niet kan inzien?

In principe is dit op webscripting niveau wel te doen, maar ik doe het liefst zoveel mogelijk in de database zelf, is denk ik toch wat veiliger en ook wel sneller.

P.S. De search werkt niet bij mij op dit moment, maar kon al eerder geen topics hierover vinden.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 26-05 17:50

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 is wel benieuwd waarom je dit in je database wilt doen... De juiste plaats om de rechten te controleren lijkt mij eigenlijk hiervoor de BLL, en niet de DAL.

Performance zou ik me niet zo druk om maken; om eerlijk te zijn. Ik denk dat dit verwaarloosbaar is, als dit al sneller zou zijn
SQL:
1
Select * FROM uren where User = @UserID

lijkt me vrij snel en vlot genoeg.

Veiligheid? mja, lijkt me eerder marginaal. Als je een fatsoenlijke applicatie opbouwt, dan kan niemand de database direct in.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Je kunt het doen met een VIEW with CHECK OPTION.
Probleem is dan wel dat je voor iedere medewerken zo'n view moet maken.

Of, zoals gorgi_19 zegt: maak een procedure (eventueel een stored procedure in je DB) waar je een userid aan meegeeft, en die dan enkel de juiste records teruggeeft.

[ Voor 42% gewijzigd door whoami op 07-04-2004 10:25 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Da's waar, je komt er ook niet zomaar in, maar het gaat mij erom dat niet iedereen die in de database kan komen zomaar in de timesheet van de andere kan bekijken, dat is eigenlijk niet de bedoeling.

Ok, maar hoe wil je controleren welke user is ingelogd? Ik gebruik windows authenticatie om in te loggen op de database. Dan zou je een bepaalde user aan een medewerker moeten koppelen.

Verwijderd

Volgens mij zul je dit toch echt op webscripting-niveau moeten oplossen d.m.v. een "SELECT ... WHERE ..."-query. Naar mijn weten kun je met SQL geen rechten toewijzen op records, maar alleen op tabellen en databases. Je zou natuurlijk iedere user z'n eigen tabel kunnen geven, maar dat is omslachtig: voor iedere nieuwe user zul je dan ook een nieuwe tabel aan moeten maken. Dat wordt onoverzichtelijk voor grote hoeveelheden users.

Verwijderd

Topicstarter
Voor elke user een eigen tabel is errug omslachtig, lijkt me eigenlijk ook niet zo heel verstandig, create table instructies in je webscripts..:)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Verwijderd schreef op 07 april 2004 @ 10:30:
Voor elke user een eigen tabel is errug omslachtig, lijkt me eigenlijk ook niet zo heel verstandig, create table instructies in je webscripts..:)
Elke user een eigen view is minder omslachtig. En geef dan enkel rechten voor user x aan z'n eigen view.
Op die manier zitten al je records in één tabel, maar kan je wel een soort van security op record niveau bouwen.

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je kunt dit oplossen door in een tabel users op te slaan en vervolgens deze te vergelijken mbv de functies SUSER_SNAME() of USER_NAME().
Aan de hand daarvan kun je dan in een view filteren op de juiste user.
Voorwaarde is wel dat je alle users ook aanmaakt binnen SQL Server.

Never underestimate the power of


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 26-05 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 07 april 2004 @ 10:28:
Ok, maar hoe wil je controleren welke user is ingelogd? Ik gebruik windows authenticatie om in te loggen op de database. Dan zou je een bepaalde user aan een medewerker moeten koppelen.
Afhankelijk van je applicatie kan je gewoon windows authentication gebruiken om in te loggen via je browser. Als je dit doet, heb je een username en deze username kan je dan controleren tegen je database. Ik geloof dat de optie Integrated Authentication dan aan moet staan, maar ik heb me hier nooit echt in verdiept.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Wat ik zou kunnen doen is dit:
In de medewerker tabel hou ik de specifieke username bij, zo kan ik een user aan een medewerkerId koppelen. Zodra een user aan een medewerker in medewerker tabel is gekoppeld, dan zou ik inderdaad een stored procedure kunnen gebruiken om bepaalde gegevens te bekijken.

Maar dat lijkt me wel een dirty manier overigens...maar werkt denk ik wel.

edit:

Momenteel wordt er via windows authentication ingelogd op de database. Ik heb rollen gemaakt en deze windows users aan een rol gekoppeld. Zo kan ik er zeker voor zorgen dat klanten die het systeem ook gaan gebruiken niet bij cruciale gegevens kunnen komen door alle rechten op deze tabellen te revoken.

[ Voor 30% gewijzigd door Verwijderd op 07-04-2004 10:38 ]

Pagina: 1