| Autor | Zpráva | ||
|---|---|---|---|
| jenda9 Profil * |
#1 · Zasláno: 15. 12. 2008, 21:03:40
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 |
#2 · Zasláno: 15. 12. 2008, 21:18:37
ne, nejde
|
||
| Kajman_ Profil * |
#3 · Zasláno: 15. 12. 2008, 22:42:37
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 * |
#4 · Zasláno: 15. 12. 2008, 23:10:52
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 |
#5 · Zasláno: 16. 12. 2008, 11:21:58
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 * |
#6 · Zasláno: 16. 12. 2008, 17:53:11
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 |
#7 · Zasláno: 16. 12. 2008, 18:16:26
změnil jste delimiter?
|
||
| bohyn Profil |
#8 · Zasláno: 16. 12. 2008, 18:42:44
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 * |
#9 · Zasláno: 16. 12. 2008, 18:45:01
Já ladim na localhostu a mám plné oprávnění ke všemu.
|
||
| jenda9 Profil * |
#10 · Zasláno: 16. 12. 2008, 23:29:27
A nejde to ani z cli mysql. Ta samá chyba.
|
||
| bohyn Profil |
#11 · Zasláno: 17. 12. 2008, 09:14:49
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 * |
#12 · Zasláno: 17. 12. 2008, 17:28:31
Ja to zkousim pres phpmyadmina. Zasekne se to vzdy na tom insertu. Nevim co se mu na nem nelibi.
|
||
| bohyn Profil |
#13 · Zasláno: 17. 12. 2008, 18:56:10
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 |
#14 · Zasláno: 17. 12. 2008, 23:12:56
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 * |
#15 · Zasláno: 20. 12. 2008, 00:33:20
Vyzkouším. Ale proč to nejde ani přímo z konzole mysql?
|
||
|
Časová prodleva: 18 let
|
|||
0