Er zijn verschillende manieren om gebruikersrechten in Oracle te vinden, afhankelijk van het detailniveau dat u nodig heeft en of u naar specifieke gebruikers kijkt of naar het hele systeem. Hier zijn enkele veelvoorkomende methoden:
1. Met behulp van de weergaven `DBA_SYS_PRIVS` en `DBA_TAB_PRIVS`:
Deze datadictionary-weergaven bieden uitgebreide informatie over systeem- en objectrechten die aan gebruikers zijn verleend. `DBA_SYS_PRIVS` toont systeemrechten (bijv. `CREATE TABLE`, `CREATE SESSION`), terwijl `DBA_TAB_PRIVS` objectrechten toont (bijv. `SELECT`, `INSERT`, `UPDATE` voor specifieke tabellen).
* Voor systeemrechten:
```sql
SELECT * FROM DBA_SYS_PRIVS WHERE begunstigde ='GEBRUIKERSNAAM';
```
Vervang `USERNAME` door de daadwerkelijke gebruikersnaam.
* Voor objectrechten:
```sql
SELECT * FROM DBA_TAB_PRIVS WHERE begunstigde ='GEBRUIKERSNAAM';
```
Vervang `USERNAME` door de daadwerkelijke gebruikersnaam. Hierdoor worden alle privileges op alle tafels weergegeven. U kunt deze zoekopdracht verfijnen om naar specifieke tabellen te kijken:
```sql
SELECTEER * UIT DBA_TAB_PRIVS WAAR begunstigde ='USERNAME' EN tabelnaam ='TABLE_NAME';
```
Vervang `TABLE_NAME` door de naam van de tabel.
2. Met behulp van de weergaven `ALL_SYS_PRIVS` en `ALL_TAB_PRIVS`:
Deze weergaven bieden informatie over de rechten die een gebruiker direct *heeft*, of indirect via rollen. Dit is handig voor een gebruiker die zijn eigen rechten controleert. Als u verbinding maakt als gebruiker, kunt u deze weergaven gebruiken:
* Voor systeemrechten:
```sql
SELECTEER * UIT ALLE_SYS_PRIVS;
```
* Voor objectrechten:
```sql
SELECTEER * UIT ALL_TAB_PRIVS;
```
U kunt ook filteren op gebruikersnaam, zoals de `DBA_`-weergaven.
3. Met behulp van de weergaven `USER_SYS_PRIVS` en `USER_TAB_PRIVS`:
Deze weergaven tonen alleen de rechten die rechtstreeks aan de verbonden gebruiker zijn verleend. Ze tonen geen rechten die via rollen zijn verleend. Handig voor een gebruiker die alleen zijn eigen directe rechten ziet.
* Voor systeemrechten:
```sql
SELECTEER * VAN GEBRUIKER_SYS_PRIVS;
```
* Voor objectrechten:
```sql
SELECTEER * VAN GEBRUIKER_TAB_PRIVS;
```
4. Gebruik van de kolom 'ROLE' in de vorige weergaven:
De kolom `ROLE` in `DBA_SYS_PRIVS`, `DBA_TAB_PRIVS`, `ALL_SYS_PRIVS`, `ALL_TAB_PRIVS` geeft aan of het privilege rechtstreeks of via een rol wordt verleend. Als het via een rol wordt verleend, moet u de bevoegdheden onderzoeken die aan die rol zijn verleend. U kunt informatie over rollen vinden met behulp van de weergaven `DBA_ROLES`, `ALL_ROLES` of `USER_ROLES`, afhankelijk van uw toegangsniveau.
5. Met behulp van `TOON GEBRUIKER`:
Met deze opdracht (in SQL*Plus of SQL Developer) wordt de momenteel verbonden gebruiker weergegeven. Dit toont niet direct de rechten, maar het is een startpunt om vervolgens de bovenstaande weergaven te gebruiken.
Belangrijke overwegingen:
* Databaserollen: Gebruikers ontvangen rechten vaak indirect via rollen. U moet onderzoeken tot welke rollen een gebruiker behoort en welke rechten deze rollen hebben. Hiervoor is het uitvoeren van query's in de weergaven 'DBA_ROLES', 'ALL_ROLES' of 'USER_ROLES' vereist.
* Rechten doorlopend via rollen: Rollen kunnen bevoegdheden verlenen aan andere rollen. Hierdoor kunnen complexe privilegestructuren ontstaan.
* Toegangsniveaus: U heeft de juiste rechten nodig (bijvoorbeeld `SELECT ANY DICTIONARY`) om de datadictionary-weergaven op te vragen. Voor `DBA_`-weergaven is doorgaans de `DBA`-rol vereist.
Vergeet niet om `USERNAME` en `TABLE_NAME` te vervangen door de daadwerkelijke gebruikersnaam en tabelnaam waarin u geïnteresseerd bent. Voer deze zoekopdrachten altijd met voorzichtigheid uit, vooral als u `DBA_`-weergaven gebruikt, omdat ze toegang geven tot gevoelige informatie. |