Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

IB/Firebird: zabrana brisanja odredjenih redova

[es] :: Pascal / Delphi / Kylix :: IB/Firebird: zabrana brisanja odredjenih redova

[ Pregleda: 2557 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 10:43 - pre 235 meseci
Pretpostavljam da ovo ne moze da se izvede, ali ko pita ne skita. Da li postoji nacin da se baza definise tako da se jedna tabela "deli" medju korisnicima: svi mogu da je vide i da upisu nove podatke, ali brisanje reda je dozvoljeno samo onima koji su taj red upisali? Znaci, svako moze da uradi INSERT, ali UPDATE/DELETE reda moze samo onaj ko je uradio INSERT tog reda?

Naravno, to moze da se resi na nivou softvera koji pristupa bazi, automatski se upise ID_KORISNIKA u svaki red koji je napravio, ali ko zna SQL moze da "zaobidje" softver i da radi sta god hoce sa tom tabelom. Da li moze tako nesto da se definise na nivou baze? Da li postoji neki drugi nacin da se odradi to sto sam zamislio?
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.so-sombor.com.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 12:04 - pre 235 meseci
Može da se izvede.
Definiši "usere, kreiraj "role" nad bazom i podesi grant options.

NPR:
Code:
CREATE ROLE administrator;
GRANT UPDATE ON table1 TO administrator;
GRANT administrator TO user1, user2, user3;



Detaljno uputstvo imaš na www.ibphoenix.com (u nekom od pdf-ova).
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 12:13 - pre 235 meseci
Mislim da se nismo razumeli, tvoj primer radi samo na nivou cele tabele, meni treba "suptilnije" ogranicenje od toga.

npr.

GRANT UPDATE ON table1 TO pera where table1.user_id=55;
GRANT UPDATE ON table1 TO mika where table1.user_id=56;
GRANT UPDATE ON table1 TO laza where table1.user_id=57;
 
Odgovor na temu

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 14:13 - pre 235 meseci
Meni se cini da je tvoj problem prvenstveno u tome sto treba da znas ko je owner nekog recorda tj, onaj ko ga je napravio. Ne znam da ti kazem kako da to nadjes i da li firebird uopste cuva tu informaciju, ali probaj da trazis po google-u nesto na tu varijantu, a posle je lako napraviti nesto sa time (pada mi na pamet koriscenje triggera na BEFORE DELETE)

na [url]www.ibphoenix.com/main.nfs?a=ibphoenix& s=1101948673:391781&page=ibp_locking[/url] ima nesto o locking mehanizmima u firebirdu - mozda to na neki nacin moze da se iskoristi?
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 15:04 - pre 235 meseci
Pretpostavka ti nije tacna :)

Ovaj problem za da ogranicis korisnike po zapisu se resava ovako:

Code:

// Kreiras baznu tabelu:
CREATE TABLE primer( 
       data VARCHAR(10),
       user_name CHAR(31)
)

CREATE TRIGGER "user_ins" FOR primer ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    new.user_name = CURRENT_USER;
END; 

CREATE VIEW vprimer AS SELECT data FROM primer WHERE CURRENT_USER = user_name;


i sada posto imamo tabelu koja ima sve recorde, i imamo view koji ogranicava korisnike da update/delete/select recorde drugih korisnika, samo treba da dodelime privilegije usera da select/insert/update view.

znaci sada ti treba

GRANT ALL ON primer TO vprimer;
GRANT ALL ON vprimer TO public;

u ovom slucaju svako moze dirati samo svoje recorde. ako zelis da useri vide zapise drugih usera onda samo dodas:

GRANT SELECT ON primer TO public;

Ako eventualno ne zelis da useri znaji ko poseduje zapis onda uradis nov view bez kolone user_name ... i tako dalje :)

People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.ptt.yu.



+1 Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 16:55 - pre 235 meseci
Ah, CURRENT_USER - kljucni detalj, za to nisam znao! Zvuci savrseno. Hvala!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: IB/Firebird: zabrana brisanja odredjenih redova

[ Pregleda: 2557 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.