MySQL nie dzialaja uprawnienia

0

witam,
może nie jest to pytanie z programowania, ale myślę że to odpowiednie forum.
tu proszę fragment konsoli

Heimdall:~# mysql -u tomasz -p
Enter password:
mysql> use test
Database changed
mysql> revoke all privileges on notatki from 'klient1'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Heimdall:~# mysql -u klient1 -p
Enter password:
mysql> use test
Database changed
mysql> select * from notatki;
+----+------------+-------+---------------+-------------------------+
| ID | data       | tresc | firmy_idFirmy | pracownicy_idPracownicy |
+----+------------+-------+---------------+-------------------------+
|  1 | 9999-12-31 | 456   |             1 |                       1 |
+----+------------+-------+---------------+-------------------------+
1 row in set (0.00 sec)

mysql>

Dlaczego tak jest?

0

Query OK, 0 rows affected (0.00 sec)

0

No dobra ale dlaczego?

0

a odpal te polecenia i napisz co ci pokazuje?

SHOW GRANTS FOR klient1

select * from mysql.user where user='klient1'

0

wklejam tak żeby nie rozwalić forum http://wklej.org/id/404246/
Rozumiem, że linia
GRANT ALL PRIVILEGES ON klienci.* TO 'klient1'@'%' WITH GRANT OPTION
nadaje uprawnienia do bazy 'klienci' której tak naprawdę nie ma, w związku z czym nie ma on w ogóle dostępu do tabeli 'test', dlaczego w takim razie może sobie tam grzebać?

EDIT:

tak przy okazji zapytam, czemu nie działa mi ten fragment? dostaję can not create table. Jak usuwam tworzenie foreign key jest ok, ale nie mogę znaleźć błędu

CREATE TABLE obszary(
ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
nazwa varchar(30),
ptaki boolean,
nietoperze boolean,
Inwestycja_ID integer,
Pracownicy_ID integer)
ENGINE = INNODB;
CREATE TABLE wyjscia(
ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
numerWyjscia float,
data date,
ptaki boolean,
nietoperze boolean,
naleznosc float,
komentarz text,
Obszary_ID integer,
Pracownicy_ID integer)
ENGINE = INNODB;
CREATE TABLE zwierz(
ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
idNagrania float,
idZwierza integer,
gatunek varchar(15),
liczba integer,
komentarz varchar(30),
wspX float,
wspY float,
nazwaFarmy varchar(30),
czas time,
zer varchar(3),
gody varchar(3),
poczatek time,
koniec time,
data date,
dzien int(3),
miesiac int(3),
rok int(4),
Foreign KEY (nazwaFarmy)
REFERENCES obszary(nazwa)
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (idNagrania)
REFERENCES wyjscia(numerWyjscia)
ON UPDATE CASCADE ON DELETE CASCADE)
ENGINE = INNODB;

0

najpierw klucz obcy
wypadaloby wiedziec czym jest klucz obcy, widac nie wiesz
kluczem obcym moze byc wartosc, ktora w tabeli do ktorej referujesz jest kluczem glownym (nie jestem pewien, ale moze tez unique wystarczy)
natomiast twoja konstrukcja nie zapewnia tego ze klucz obcy jednoznacznie wskaze rekord z tabeli glownej

a teraz jak to powinno byc zrobione przyzwoicie
kluczem obcym w zwierz powinno byc obszaryId (obszery.ID) i wyjscieId (wyjscia.ID)

czepie sie 'literowki' nie tabeli test, a bazy test
nie do konca znam sie na modelu uprawnien w mysql, ale ja sprawdzilbym jakie role ma ten user (o ile cos takiego w mysql jest)
sproboj tez jawnie zabrac mu uprawnienia do bazy test i sprawdz czy wtedy bedzie zachowywalo sie to tak jak chcesz

0

rzeczywiście muszę do kolumn obszar.nazwa i wyjscia.numerWyjscia dopisać unique
a apropos porządności, jak widzisz w poprzednich tabelach jest to zrobione prawidłowo, jednak tabela zwierz jest generowana przez inny program i ma tysiące rekordów, i nazwa farmy i id nagrania muszę być takie a nie inne dlatego referencja jest nie do ID tylko do specjalnie w tym celu utworzonych kolumn w pozostałych tabelach. Jednakowoż program generujący pliki do tej tabeli będzie pobierał bezpośrednio z tych właśnie kolumn te wartości więc nie będzie możliwości pomyłki.
Co do 'literówki' oczywiście masz rację
Dalej pozostaje nie rozwiązany wątek główny czyli uprawnienia. Próbowałem jawnie zabierać, nie pomogło.

0

Odświeżam.
Poszedłem do tematu z trochę innej strony, używam tereaz MySql Administrator. Z powodzeniem zarządza uprawnieniami i wszystko w miarę działa. Lecz mam problem jak skonfigurować uprawnienia żeby użytkownik mógł dodawać nie mogąc jednocześnie sprawdzić co jest w tabeli. Z tym, że do obsługi dla użytkowników przygotowuję na razie formularze oparte na OOO base.
Więc tak jeśli użytkownik ma uprawnienia tylko insert to bez problemu dodaję z jakiej kolwiek query browser, niestety nie działa to w formularzy jeśli dla choć jednej kolumny zabiorę select. A jeśli dam wszystkim select to cala zabawa nie ma sensu.
Czy ktoś próbował się uporać z tym problemem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1