Toon posts:

Beveiliging op record-niveau

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil de data in mijn database beveiligen zodat groep1 alleen bij de data van groep1 kan, groep 2 alleen bij de data van groep2, etc. En zodat er een GroepTotaal is die bij alle data kan.

Verder zijn er, laten we zeggen, 1000 gebruikers, eerlijk verdeeld over 4 groepen (groep1, groep2, groep3, groep4), en 10 gebruikers in de GroepTotaal.

De data wordt benaderd via een WebInterface (asp.net) door de 4 groepen. GroepTotaal maakt gebruik van een WindowsInterface (VB.Net).

Als database gebruik ik SQL-server.

Hoe kan ik dit het beste beveiligen?


Ik heb zelf zitten denken aan views. Voor iedere groep krijg je dan een view. Alleen moet je dan gaat checken welke groep de data benaderd. en dan krijg je van die lelijke if-statements:
if groep1 then
select * from vwGroep1
elseif groep2 then
select * from vwGroep2
etc....


Een stored procedure heb ik ook aan gedacht. Dan roep je dus de stored proceure aan met een groepnaam. En dan wordt er in de SP geregeld dat je alleen de data van de gewenste groep krijgt. Nadeel is dat als je de database benaderd zonder gebruik te maken van de SP, dat ALLE data beschikbaar is, onafhankelijk van welke groep is ingelogd.


Zijn er nog meer mogelijkheden, en wat zijn jullie ideeën?

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:26
[nohtml]
Verwijderd schreef op 28 January 2003 @ 14:32:


Een stored procedure heb ik ook aan gedacht. Dan roep je dus de stored proceure aan met een groepnaam. En dan wordt er in de SP geregeld dat je alleen de data van de gewenste groep krijgt. Nadeel is dat als je de database benaderd zonder gebruik te maken van de SP, dat ALLE data beschikbaar is, onafhankelijk van welke groep is ingelogd.
Zorg ervoor dat je geen 'gewone' sql queries op je databank kunt uitvoeren, maar dat alles mbhv stored procedures moet gebeuren.


Ik zou het eigenlijk zo doen, dat je een column 'owner' oid hebt, en dat dan, als groep1 ingelogged is, enkel de records die van groep1 zijn opgehaald worden.

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Is de beveiliging op applicatie of op database niveau nodig?

Want met jouw view-voorbeeld kan je wel heel leuk die views maken, maar als je applicatie dan checked of het groepX of groepY is, ipv de database zelf maakt dat nog niks uit.

Dan kun je, imho, beter gewoon gelijk een geschikte query bouwen, ala:
select *
from recordTabel, userTabel, groepTabel
WHERE usertabel.groepid = groeptabel.groepid
and groeptabel.groepid = recordtabel.groepid
and usertabel.userid = $gebruikersid

Of de hele stap met de usertabel overslaan en direct de groeptabel aanspreken, enige nadeel is die groeptotaal groep, maar dan heb je maar 1 if nodig waarmee je kan controleren op die groep en dan de complete extra select-filters weglaten.

Als je het op database niveau nodig hebt dan zul je idd aan views moeten beginnen en voor de echte tabellen de toegang te verbieden.

Evt kan je per groep een schema maken met in elk schema een zelfde genaamde view, zodat je gewoon select * from $groepnaam.recordView; kan doen voor alle 5 de groepen.

edit:

Dit is trouwens geen SQL-server, maar meer een algemeen idee :)

[ Voor 5% gewijzigd door ACM op 28-01-2003 14:40 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:28

Janoz

Moderator Devschuur®

!litemod

Kan me eigenlijk alleen maar bij whoami aansluiten. Elk record een owner veld en elke query overal where owner=blaat erbij. Zeker niet in je code vast gaan leggen. Dan wordt het nogal lastig een extra groep toe te voegen namelijk. Voor de beheerders kun je de owner clausule weglaten.

Of is het misschien de bedoeling dat de gebruikers zelf queries kunnen maken?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Thanks voor de snelle reacties! Ik ga ze eens rustig doorlezen.
Janoz schreef op 28 January 2003 @ 14:40:
Of is het misschien de bedoeling dat de gebruikers zelf queries kunnen maken?
De mogelijkheid om data op te vragen d.m.v. Impromptu (een uitgebreide rapportage/ query-tool) direct uit de database zou misschien gewenst zijn voor de GroepTotaal. Op dit moment weet ik dat nog niet zeker. Maar ik denk, om het mezelf moeilijk te maken, dat ik daar gewoon rekening mee ga houden.