Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle

Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle

Σε αυτό το άρθρο θα δούμε πώς μπορούμε να βρίσκουμε εύκολα τι privileges έχει ένας χρήστης είτε πάνω σε objects όπως τους πίνακες, είτε συστημικά δικαιώματα όπως π.χ. το δικαίωμα να φτιάχνει χρήστες. Στην αρχή θα δούμε ένα ένα τα views που υπάρχουν με αυτή τη πληροφορία βλέποντας απλά query και μετα θα δούμε κάποια queries που έχω φτιάξει που μπορούμε να δούμε συνδιαστικά όλη την πληροφορία πολύ εύκολα.

Πριν ξεκινήσουμε να βλέπουμε πώς βρίσκουμε τα δικαιώματα θα πρέπει να γνωρίζουμε ότι τα δικαιώματα δεν δίνονται μόνο πάνω σε χρήστες αλλά και σε ρόλους χρηστών. Οι ρόλοι χρηστών είναι μία ομάδα δικαιώματων που μπορεί να περιέχει και δικαιώματα πάνω σε objects όπως πίνακες αλλά και συστημικά δικαιώματα όπως το δικαίωμα να φτιάξεις ένα καινούργιο χρήστη. Τους ρόλους τους χρησιμοποιούμε ώστε να μην χρειάζεται κάθε φορά που φτιάχνουμε έναν χρήστη να δίνουμε ένα ένα τα δικαιώματα που θέλουμε αλλά να μπορούμε απλά να προστέσουμε αυτόν τον χρήστη σε έναν ρόλο που ήδη τα έχει. Επίσης θα πρέπει να γνωρίσουμε ότι υπάρχουν κάποιοι ρόλοι με συστημικά δικαιώματα που είναι φτιαγμένοι από default, αλλά μπορούμε να φτιάξουμε και τους δικούς μας. Τέλος δεν ξεχνάμε ότι στα objects του ο κάθε χρήστης έχει πλήρη δικαιώματα, π.χ. ο χρήστης Scott μπορεί να κάνει ότι θέλει στα δεδομένα του πίνακα του Scott.Dept, για αυτό τον λόγο στα views που θα δούμε δεν εμφανίζονται τα δικαιώματα στα objects του ιδίου χρήστη.

Πώς βλέπουμε σε ποιούς ρόλους ανήκει ένας χρήστης

Για το παράδειγμα μας θέλουμε να ψάξουμε αν ανήκει σε κάποιο ρόλο ο χρήστης, για να το δούμε αυτό τρέχουμε το παρακάτω query από το view dba_role_privs:

select * from DBA_ROLE_PRIVS where GRANTEE = 'SCOTT'
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
01

Οπότε βλέπουμε ότι ο χρήστης (GRANTEE) έχει τους δύο ρόλους connect και resource (GRANTED_ROLE).

Πώς βλέπουμε τι δικαιώματα και σε ποιούς πίνακες έχει ένας χρήστης

Για να δούμε τι δικαιώματα πάνω σε objects / πίνακες έχει ο χρήστης τρέχουμε το παρακάτω query από το view dba_tab_privs:

select * from DBA_TAB_PRIVS where GRANTEE = 'SCOTT';
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
02

Για να καταλάβουμε το παραπάνω όπου GRANTEE είναι το όνομα του χρήστη, OWNER είναι το όνομα του schema που ανήκει το object, TABLE_NAME το όνομα του object / πίνακα, PRIVILEGE το δικαιώμα που έχει, GRANTABLE αν μπορεί να το δώσει σε άλλον και τέλος TYPE τι τύπου object είναι π.χ. πίνακας.

Όμως τι γίνεται αν αυτός ο χρήστης άνηκε σε κάποιον custom ρόλο ο οποίος του έδινε πρόσβαση σε περισσότερα objects; Τότε το παραπάνω query δεν θα το έφερνε, για να το δούμε αυτό θα πρέπει να τρέξουμε το παρακάτω query που φέρνει τα δικαιώματα για τους ρόλους που ανήκει:

select * from DBA_SYS_PRIVS WHERE 1=1
AND (GRANTEE = 'SCOTT' OR GRANTEE IN (SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'SCOTT')); 

Πώς βλέπουμε σε έναν πίνακα ποιοι χρήστες έχουν δικαιώματα και ποια είναι αυτά

Αντίστοιχα για να δούμε ποιοι χρήστες ή ρόλοι και τι δικαιώματα έχουν σε έναν πίνακα τρέχουμε το παρακάτω query:

select * from DBA_TAB_PRIVS where TABLE_NAME = 'DEPT';
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
03

Πώς βλέπουμε τι συστημικά δικαιώματα έχει ένας χρήστης

Για να δούμε τι συστημικά δικαιώματα έχει ο χρήστης τρέχουμε το παρακάτω query από το view dba_sys_privs:

select * from DBA_SYS_PRIVS where GRANTEE = 'SCOTT'
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
04

Για να πιάσουμε όμως και τα συστημικά δικαιώματα που μπορεί να έχει ο χρήστης και από ρόλο τρέχουμε το παρακάτω query:

select * from DBA_SYS_PRIVS WHERE 1=1
AND (GRANTEE = 'SCOTT' OR GRANTEE IN (SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'SCOTT')); 

Πώς βλέπουμε συνολικά τι δικαιώματα έχει ένας χρήστης

Πάμε τώρα στα πιο χρήσιμα queries του άρθρου συνδυάζοντας ότι είδαμε πριν.

Με το παρακάτω query που έχω γράψει μπορούμε να βρούμε όλα τα δικαιώματα που έχει ένας χρήστης είτε είναι συστημικά, είτε πάνω σε object, όπως και επίσης τους ρόλους που μπορεί να έχει:

select 
fake.OWNER,fake.GRANTEE, fake.TABLE_NAME, fake.PRIVILEGE,
case 
  WHEN fake.OWNER is null then 'grant '||fake.privilege||' to '||grantee||';' 
  ELSE 'grant '||fake.privilege||' on '||fake.owner||'.'||fake.table_name||' to '||grantee||';'
end "GRANT STATEMENTS"
from(
SELECT OWNER,GRANTEE, TABLE_NAME ,PRIVILEGE FROM DBA_TAB_PRIVS  
union all
SELECT null,GRANTEE, ' IT IS A SYSTEM PRIV', PRIVILEGE FROM DBA_SYS_PRIVS 
union all
SELECT null, GRANTEE, ' IT IS A ROLE', GRANTED_ROLE from DBA_ROLE_PRIVS 
) fake
where 1=1
--and fake.OWNER='HR'
and GRANTEE='SCOTT'
order by fake.TABLE_NAME;
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
05

Όπως βλέπουμε στην τελευταία στήλη έχω προσθέσει το command που μπορούμε να τρέξουμε ώστε να τα ξανα δημιουργήσουμε, είτε για να τρέξουμε σε άλλο περιβάλλον είτε σε άλλον χρήστη.

Πώς βλέπουμε συγκεντρωτικά τι τύπου δικαιώματα έχει ένας χρήστης

Με το παρακάτω query που έχω φτιάξει μπορούμε να δούμε συγκεντρωτικά τι τύπου δικαιώματα έχει ένας χρήστης και αν μπορεί να τα δώσει σε άλλον. Για παράδειγμα μπορούμε να δούμε αν ένας χρήστης έχει δικαίωμα update, insert σε κάποιο objects ενός σχήματος, ή αν έχει δικαίωμα να φτιάχνει χρήστες:

select fake.owner,fake.GRANTEE,fake.PRIVILEGE,fake.ADMIN_OPTION,fake.GRANTABLE 
from (
select owner,GRANTEE,PRIVILEGE,null as ADMIN_OPTION, GRANTABLE from dba_tab_privs
--where OWNER = 'HR'
union all
select null,GRANTEE,PRIVILEGE, ADMIN_OPTION, null as GRANTABLE from dba_sys_privs 
) fake
WHERE 1=1
--and fake.PRIVILEGE in ('INSERT','DELETE','UPDATE','ALTER')
and fake.GRANTEE='SCOTT' 
or GRANTEE IN(SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'SCOTT')
GROUP BY fake.owner,fake.GRANTEE,fake.PRIVILEGE,fake.ADMIN_OPTION,fake.GRANTABLE
ORDER BY fake.GRANTEE;
Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle
06

Αφαιρώντας και προσθέτοντας τα σχόλια από τα φίλτρα, μπορούμε να δούμε συγκεκριμένα δικαιώματα για όλους τους χρήστες ή για συγκεκριμένα σχήματα (OWNERS).

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση