Autor Zpráva
jenda9
Profil *
Dobrý večer. Je možné v MySQL nějak označit určité záznamy(řádky) v tabulce jako nesmazatelné, aby je žádná aplikaci mající přístup k celé tabulce nemohla smazat? Jak?
nightfish
Profil
ne, nejde
Kajman_
Profil *
Tipnul bych, že můžete na tabulku dát trigger, který vyhodí chybu při pokusu o smazání řádku, který má hlídat. Aplikace ale nesmí mít právo na vypnutí triggeru.

Definice práv na jednotlivé řádky není tuším v mysql opravdu možná.
jenda9
Profil *
A jak by měl vypadat ten trigger? Aplikace se ho nebudou pokoušet smazat. Jde mi jen o ochranu některých údajů v tabulce proti nechtěnému smazání vlastní aplikací, kterou testuji.
bohyn
Profil
Bohuzel trigger nemuze zastavit akci, ale nasel sem workaround ktery vyhodi chybu a prerusi akci. Je k tomu treba pomocna tabulka.
CREATE TABLE stop_action (id INT NOT NULL,
PRIMARY KEY (id)) ENGINE=MyISAM;
INSERT INTO stop_action (1);

A samotny trigger.
CREATE TRIGGER nesmazatelne BEFORE DELETE ON tabluka
FOR EACH ROW BEGIN

  IF OLD.id = 'nechci_smazat' THEN

    INSERT INTO stop_action VALUES (1);

  END IF;

END;

Neznam strukturu tvoji tabulky takze si musis trigger mirne upravit.
jenda9
Profil *
Tvorba triggeru končí s #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6 . tabulka jsem nahradil svou tabulkou a id jsem nahradil prislusnym nazvem.
Alphard
Profil
změnil jste delimiter?
bohyn
Profil
jenda9
Zkousel sem a phpMyAdmin mi psal to same. Kdyz sem ze zoufalstvi zkusil dotaz odeslat ze sveho scriptu tak sem dostal tuhle hlasku:
Access denied; you need the SUPER privilege for this operation

Nezbyva tedy nez se domluvit s administratorem. Nebo ladit na localhostu.
jenda9
Profil *
Já ladim na localhostu a mám plné oprávnění ke všemu.
jenda9
Profil *
A nejde to ani z cli mysql. Ta samá chyba.
bohyn
Profil
jenda9
Zkousel sem to tak jak to je. Mozna to nejde vlozit pres mysql_query() (nezkousel sem), ja na to pouzivam mysqli::multi_query()
jenda9
Profil *
Ja to zkousim pres phpmyadmina. Zasekne se to vzdy na tom insertu. Nevim co se mu na nem nelibi.
bohyn
Profil
jenda9
Pokud vim tak PMA ma vlastni kontrolu syntaxe a ta v pripade procedur tak trochu pokulhava. Mozna je to s triggerama to same.
bohyn
Profil
Vyzkousel sem to lacalhostu kde mam vsechna prava a funguje tak jak ma. PMA to neumi vlozit, je treba vlozit to z PHP jak sem psal v [#11]
jenda9
Profil *
Vyzkouším. Ale proč to nejde ani přímo z konzole mysql?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0