Det finns flera sätt att hitta användarbehörigheter i Oracle, beroende på den detaljnivå du behöver och om du tittar på specifika användare eller systemomfattande. Här är några vanliga metoder:
1. Använda vyerna `dba_sys_privs` och` dba_tab_privs`:
Dessa dataordboksvyer ger omfattande information om system- och objektbevis som beviljas användare. `DBA_SYS_PRIVS 'visar systemprivilegier (t.ex.` Skapa tabell', 'Skapa session'), medan 'DBA_TAB_PRIVS' visar objektprivilegier (t.ex. 'Select', 'Insert', 'Update' i specifika tabeller).
* för systembehörigheter:
`` `SQL
Välj * från dba_sys_privs där bidragsgivare ='användarnamn';
`` `
Byt ut "användarnamn" med det faktiska användarnamnet.
* för objektbehörigheter:
`` `SQL
Välj * från dba_tab_privs där bidragsgivare ='användarnamn';
`` `
Byt ut "användarnamn" med det faktiska användarnamnet. Detta visar alla privilegier på alla tabeller. Du kan förfina den här frågan för att titta på specifika tabeller:
`` `SQL
Välj * från dba_tab_privs där bidragsgivare ='användarnamn' och tabell_name ='tabell_name';
`` `
Byt ut `table_name` med namnet på tabellen.
2. Använda vyerna `all_sys_privs` och` all_tab_privs`:
Dessa åsikter ger information om de privilegier som en användare * har * direkt eller indirekt genom roller. Detta är användbart för en användare som kontrollerar sina egna privilegier. Om du ansluter som användare kan du använda dessa vyer:
* för systembehörigheter:
`` `SQL
Välj * från All_SYS_Privs;
`` `
* för objektbehörigheter:
`` `SQL
Välj * från All_Tab_Privs;
`` `
Du kan också filtrera efter användarnamn som vyerna "dba_".
3. Använda vyerna `user_sys_privs` och` user_tab_privs`:
Dessa åsikter visar endast de privilegier som direkt beviljas till den anslutna användaren. De visar inte privilegier som beviljas genom roller. Användbar för en användare som bara ser sina egna direkta privilegier.
* för systembehörigheter:
`` `SQL
Välj * från user_sys_privs;
`` `
* för objektbehörigheter:
`` `SQL
Välj * från user_tab_privs;
`` `
4. Använda kolumnen "Roll" i tidigare vyer:
Kolumnen "Roll" i `dba_sys_privs`,` dba_tab_privs`, `all_sys_privs`,` all_tab_privs` anger om privilegiet beviljas direkt eller genom en roll. Om det beviljas genom en roll, måste du undersöka de privilegier som beviljas den rollen. Du kan hitta information om roller med hjälp av "DBA_Roles", "All_Roles" eller "User_Roles", beroende på din åtkomstnivå.
5. Använda `Visa användare ':
Detta kommando (i SQL*Plus eller SQL -utvecklare) visar den för närvarande anslutna användaren. Detta visar inte direkt privilegier, men det är en utgångspunkt för att sedan använda ovanstående vyer.
Viktiga överväganden:
* Databasroller: Användare får ofta privilegier indirekt genom roller. Du måste undersöka de roller som en användare tillhör och de privilegier som dessa roller har. Detta kräver fråga om "dba_roles", "all_roles" eller "user_roles".
* privilegier kaskad genom roller: Roller kan bevilja privilegier till andra roller. Detta kan skapa komplexa privilegier.
* Tillgångsnivåer: Du behöver lämpliga privilegier (t.ex. "Välj valfri ordbok") för att fråga datamarkeringsvyerna. "DBA_" -vyer kräver i allmänhet rollen "dba".
Kom ihåg att ersätta "användarnamn" och "tabell_name" med det faktiska användarnamnet och tabellnamnet du är intresserad av. Kör alltid dessa frågor med försiktighet, särskilt de som använder "DBA_" -vyer, eftersom de ger tillgång till känslig information.