[Quote]Niko, pa ni admin servera, ne bi smeo da podatke sme da promeni.[/quote]
A kako mislis ovo da postignes?
Negde sam procitao nesto ovako:
Napravis trigger na tabeli koju stitis, koji ce bilo kakvu promenu (UPDATE, INSERT) da odbaci (Rollback) Nesto kao
CRAETE TRIGGER FOR UPDATE, DELETE, INSERT ON MyTable
AS
Rollback
To dakle ne dozvoljava ama bas nikakve promene. Kako da se prepozna nekakav 'kljuc', ili sifra uz koju bi se promena dozvolila.
Promenis malo trigger. Trazis da trigger procita nesto iz neke temp tabele. Na primer:
CREATE TABLE ##KljucnaTabela
(Kljuc varchar(15) NOT NULL
, SamoJednaRekord int NOT NULL DEFAULT=1 CHECK (SamoJednaRekord = 1)
)
INSERT INTO ##KljucnaTabela (Kljuc) VALUES ('tvoj tajni privatni kljuc koji niko ne zna pa ni DBA')
Modifikovani trigger bi bio ovako nesto (pseudo kod):
CRAETE TRIGGER FOR UPDATE, DELETE, INSERT ON MyTable
AS
DECLARE @PrivatniKljuc varchar(50)
@PrivatniKljuc = 'tvoj tajni privatni kljuc koji niko ne zna pa ni DBA'
IF @PrivatniKljuc = (SELECT Kljuc FROM ##KljucnaTabela) THEN
BEGIN
REturn -- izadji iz triggera, promene su OK
END
ELSE
BEGIN
Rollback -- ponisti promene i izadji i trigera
Return
END
Verovatno treba da proveris postojanje tabele ##KljucnaTabela, pre nego odradis IF.
Kad istestiras trigger, onda ga kriptujes kroz SQL, tako da ni DBA ne moze da ga vidi, niti iko drugi, ukljucujuci i tebe.
Tako samo ti znas da ce triger da prihvati promene ako prethodno kreiras globalnu temp tabelu i u nju uneses privatni kljuc.
Kad hoces da menjas podatke u tabeli, jednostavno kreiras temp tabelu i unseses kljuc. Onda najnormalnije uradis UPDATE/DELETE/INSERT, sta god hoces sa tvojom tabelom. Sve dok postoji globalna tabela, trigger ce dozvoliti promene. Na kraju obrisi tabelu. ne znam da li triger moze sam da obrise globalnu temp tabelu. Ako moze, super, pre Return DROP ##KljucnaTabela i sve je OK.
Naravno da DBA uvek moze da DROP trigger ili celu tabelu i da kreira novu, DBA moze svasta, ako hoce. Zato biras DBA kome mozes da verujes. Inace ceo posao nema smisla.