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: 948 | Odgovora: 5 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos D
Beograd

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



Profil

icon IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 10:43

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?
13.12.2004. u 10:43 

dogriz
Sombor

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



Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 12:04
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).
13.12.2004. u 12:04 

Milos D
Beograd

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



Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 12:13
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;
13.12.2004. u 12:13 

protech_v2
Novi Sad

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

Sajt: protech.globbo.org


Profil

icon Re: IB/Firebird: zabrana brisanja odredjenih redova13.12.2004. u 14:13
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?
13.12.2004. u 14:13 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
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
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.
13.12.2004. u 15:04 

Milos D
Beograd

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



Profil

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

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

[ Pregleda: 948 | Odgovora: 5 ]

Postavi temu Odgovori

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