De är ganska olika, ja.
I Oracle kan privilegier på en tabell beviljas antingen direkt till en användare (i vilket fall de skulle visas i ALL_TAB_PRIVS
) eller privilegier kan ges till en roll (visas i ROLE_TAB_PRIVS
) och den rollen kan tilldelas en användare (visas i USER_ROLE_PRIVS
). Den första frågan visar användarna som har direkta anslag på en tabell. Den andra frågan visar användarna som har beviljats en roll som har beviljats åtkomst till tabellen (observera att du i båda fallen verkligen borde ange en OWNER
förutom tabellnamnet). Inte heller kommer att visa dig information om anslag som har gjorts genom flera kapslade nivåer av roller (dvs. Användare A har beviljats Roll 1, Roll 1 har beviljats Roll 2, Roll 2 har beviljats åtkomst till en tabell). Anslag som görs via roller kan också bli lite knepigt eftersom det finns standard- och icke-standardroller och lösenordsskyddade roller och roller kan aktiveras och inaktiveras i en session.
I allmänhet skulle jag föreslå att du tar en titt på skripten som finns på Pete Finnigans webbplats om du vill ha något som täcker alla möjliga fall. I det här fallet vill du förmodligen använda hans who_can_access-skript för att avgöra vilka användare som kan komma åt en viss tabell.