Witam.
Tworzę rolę:
create role read_only
NOT IDENTIFIED;
grant select any table to read_only;
ale nie chcę żeby było "... select any table...", ale żeby był select dla
wszystkich tabel tylko tego konkretnego użytkownika. Jak to zrobić? (grant
select * table to read_only, grant select all table to read_only nie działa)
Witam Grupowiczow
Zrobilem tak:
exec sp_grant_login 'konto NT'
use 'bazadanych'
exec sp_grantdbaccess 'konto NT', 'uztytkownikbazy'
grant select on tabela to 'uztytkownikbazy'
grant exec on procedura to 'uztytkownikbazy'
I wynik jest taki:
selekta moge zrobic (ok), procedury nie moge wykonac (twierdzi ze nie moze
takiej znalezc).
Zmienilem nawet ownera na 'uztytkownikbazy' i efekt jest ten sam.
Gdzie popelniam blad?
moze da sie podrasowac bazke bo przy tabeli 100.000 rekordów
troche sie tnie przy przeszukiwaniu (delphi) .
Oczywiście - nie baza jest winna tylko program -nie Delphi tylko
programista; IMHO to jest po prostu nieefektywnie napisane.
3.czy istnieje odpowiednik LIMIT mysqla dla firebirda? lub jak ograniczyc
ilosc
zwracanych rewkordów ?
select first 25 * from tabela
4.GRANT SELECT ON RDB$ROLES TO PUBLIC;
mam taki błąd 'no S privilege with grant option on table/view RDB$ROLES'
?
Po pierwsze po co to robić?
Po drugie, takie coś jest poprawne... może problem tkwi gdzi indziej?
---
wloochacz
PS. A jaki to Firebird? Bo oczywiście miałem na myśli wersję 1.5.1
work wrote:
Chce aby tylko jeden użytkownik (user1) mógł wykonywać tylko to jedno
zapytanie.Miał prawa tylko do wykonania tego zapytania.
SELECT owner FROM sys.all_tables WHERE table_name = 'Tabela1'.
Robie:
GRANT SELECT
ON SYS.ALL_TABLES TO user1
i nie zwraca mi żadnych wierszy. Dopiero gdy dodam
GRANT SELECT ANY TABLE TO user1
to działa.
No ale wtedy user1 ma dostep do wszystkich tabel w bazie. Jak zrobić aby
miał dostep tylko do widoku sys.all_tables ???
Zapewne wynika to z samych warunków w widoku all_tables. Tak czy owak nie
tędy droga - skoro chcesz mu dać prawo wykonywania dokładnie jednego
zapytania, to do tego służą właśnie widoki - stwórz odpowiedni widok jako
użytkownik, który może czytać odpowiednie rekordy z all_tables i daj user1
prawo do czytania tylko i wyłącznie tego widoku. W ten sposób będzie zawsze
dostawał tylko to, co powinien.
work wrote:
No ok. Prztestowałem sobie widok.
Stworzyłem widok. dałem uprawnienia do tego widoku. wykonalem zapytanie i
nic nie zwraca.
Bo ALL_TABLES z definicji zwraca tylko to, do czego masz prawa - musisz użyć
DBA_TABLES:
Jako SYS:
grant select on dba_tables to system with grant option;
Jako SYSTEM:
create view foo_tables as select owner from dba_tables where
table_name='FOO';
grant select on foo_tables to user1;
Jako USER1 (żeby pokazać, że działa):
SQLselect * from system.foo_tables;
OWNER
---------------------------------------------------
USER3
USER2
USER1
Jako USER1 (żeby pokazać, że z ALL_TABLES dostaje mniej):
SQLselect owner from all_tables where table_name = 'FOO';
OWNER
---------------------------------------------------
USER1
Jako USER1 (żeby pokazać, że USER1 nie ma dostępu do DBA_TABLES):
SQLselect * from dba_tables;
select * from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
hubert depesz lubaczewski napisał(a):
hej,
takie pytanie do tych z was którzy kiedyś słuchali kandydatów.
o co pytacie?
Ja nie pytałem nigdy, ale mam pewną opinie na ten temat. Wszystko zależy
też czy ta osoba ma być biegła w bazach danych czy też rokować nadzieje.
W tym drugim przypadku ważne jest to by taka osoba interesowała się
programowaniem, było to jej hobby w pewnym sensie, a nie jakiś studencik
z papierkiem i małe zainteresowanie tematyką ;)
Moich kilka pytań :
- zaproponować strukturę bazy danych, która przydatna byłaby w pizzeri ;]
- co to jest widok ? czy na widoku mogę przeprowadzić operacje INSERT,
UPDATE, DELETE lub SELECT ?
- do czego służy GRANT ?
- posiadasz następująca strukturę bazy danych :
dokumenty ( dokument_id, tytul )
komentarze ( komentarz_id, dokument_id, autor )
Ułóż zapytanie, które zwróci listę dokumentów wraz z liczbą komentarzy (
przedstaw dwie wersje bez podzapytania i z podzapytaniem ).
- co to jest trigger? napisz triggera, który automatycznie będzie
aktualizował ilość komentarzy w tabeli dokumenty
witam - mam maly problemik z mysql
chce sobie odpalic "lock tables x WRITE";
i nie dziala, tylko jako blad wyskakuje
"select command denied to user: '@192.168.0.2' for table 'x'"
a tak sie sklada, ze wszystkie prawa do calej bazy w ktorej jest x sa dane
botowi (grant all privileges on bot /*tak sie nazywa baza*/ to 'bot@%')
zeby strzelac locka to trzeba jakies specjalne prawda jeszcze dawac? (jak sie
zaloguje na roota, to dziala OK)
-oczywiscie insert, select itp dziala OK... tylko z lock jest problem
blagam - pomocy
leming nine <l@yt.ng.plschrieb in im Newsbeitrag:
93nmtr$37@flis.man.torun.pl...
Witam. Mam problem z prawidłowym "zaprogramowaniem"
bazy danych PostgreSQL 7, żeby przed wstawieniem
odpowiedniego rekordu do tabeli sprawdzał, czy w innej
tabeli istnieje w danej kolumnie dana informacja, i tylko
jeśli owa informacja istnieje, rekord zostanie dodany.
W odwrotnym przypadku wyskakuje informacja o błędzie,
i koniec, kropka.
Więcej szczegółów? -- Proszę, oto one:
create table people (
uid serial,
username name not null,
passwd name not null
);
create table permissions (
author int not null,
permission name not null
);
create unique index permissions_key
on permissions (author, permission);
grant select, insert, update, delete
on people, permissions to www_data;
Chcę, żeby w momencie dodania rekordu:
insert into permissions (author, permission)
values (
'555',
'text'
);
było sprawdzane, czy w tabeli people istnieje
taki uid, jak '555', i jeśli nie, to powinien zostać
zakomunikowany błąd.
Pytanie: jak to zrobić? Trigger to, czy może
Rule? Gdzie są jakieś dobre przykłady robienia
takich kombinacji alpejskich?
zanotowane.pldoc.pisz.plpdf.pisz.plwpserwis.htw.pl