Oracle Ders 16 – Kullanici Olusturma ve Yonetimi – 02 Roller

Merhaba Arkadaslar,
Bir onceki dersimizde yeni bir kullanici olusturup bazi haklar vermistik (privileges). Bu dersimizde Oracle 11G  roller konusunu isleyecegiz.

Rol kavramini anlayabilmek icin asagidaki resmi inceleyelim. 5 tane kullanici ve cesitli roller vardir bu rollerin her birinin yapabilecegi islemler farkli farklidir.

Ornek olarak User1, Analyst Rolune sahiptir herhangi tabloya select sorgusu atabilir.  Rol, haklar grubudur.

01 oracle ders 16 user role

Rol Olusturma ve Atama

Bir rol objesi olusturmak icin genel form :

CREATE ROLE rolename;

Haklari (privileges) kullanicilara tahsis ettigimiz gibi rolleri de tahsis edebiliriz. Genel formumuz:

GRANT role [,rolename]
TO username [,username];

Bir onceki dersimizde olusturdugumuz gibi 2 tane yeni kullanici ve her kullanici icin bir tablo olusturalim. Not bu islemlerin yapabilmek icin system kullanici adiyla giris yapmamiz gerekmektedir. Bir onceki derste de belirtmistim.

user1 isimli kullanicimiz olusturulmasi , haklarin verilmesi ve tablo olusturulmasi. Burada tablo olustururken kullanici “.” tablo ismi seklinde yapabiliriz.

CREATE USER user1 IDENTIFIED BY 123456;
GRANT CREATE SESSION TO user1;
GRANT CREATE TABLE TO user1;
GRANT UNLIMITED TABLESPACE TO user1;
create table user1.roles1Table(
var1 varchar2(20)
);

user2 isimli kullanicimiz olusturulmasi , haklarin verilmesi ve tablo olusturulmasi.

CREATE USER user2 IDENTIFIED BY 123456;
GRANT CREATE SESSION TO user2;
GRANT CREATE TABLE TO user2;
GRANT UNLIMITED TABLESPACE TO user2;
create table user2.roles2Table(
var2 varchar2(20)
);

yeni bir rol objesi olusturalim.

create role new_role;

roles2Table uzerinde select, insert, update iznini iceren rolu , new_role objemize atayalim.

grant select,insert,update 
on user2.roles2Table
to new_role;

new_role isimli rol objemizi user1 isimli kullanicimiza atayalim.

grant new_role
to user1;

user1 olarak giris yapalim.

01 oracle ders 16 user con

Rol atamasini yaptigimiz icin , artik user2de bulunan roles2Table a ulasabiliriz.

select * from USER2.roles2table;

yeni bir kayit ekleyelim.

insert into user2.roles2table values ('insert role1');

peki ekledigimiz bu kaydi silmeye calisirsak ?

delete USER2.roles2table where  var2 ='insert role1';

user1 e atadigimiz new_role objesinde select, insert, update islemi vardi delete islemi yoktu bu nedenle hata aliriz.

SQL Error: ORA-01031: insufficient privileges
01031. 00000 – “insufficient privileges”

ayni anda birden fazla rolu de ayni kullanici icin verebiliriz. Ornek olarak;

grant role1,role2,role3
to username;

Ayrica ayni rolu farkli kullanicilar icin de verebiliriz.

Roller ve Haklar Bilgisi

Cesitli veri sozluklerine (data dictionary) sorgu atarak roller ve haklar hakkinda bilgi alabiliriz.

DBA_ROLES : Veritabaninda tanimli tum rollerin listesi
ROLE_TAB_PRIVS : Rollere atanan haklar ve tablo bilgisi. Ornek olarak asagidaki sorguyu calistiralim.

select * from role_tab_privs where role like '%NEW_ROLE%';

02 oracle ders16 role_tab_privs

Gordugunuz gibi new_role isimli rolumuz, tablo ismi gibi bilgiler geldi.

Bunun disinda bir cok veri sozlugu  (data dictionary)  roller ve haklara dair bilgi tutmaktadir.
(ROLE_SYS_PRIVS , DBA_ROLE_PRIVS, DBA_TAB_PRIVS , USER_SYS_PRIVS gibi…)

Revoke (Geri Alma/ Iptal)  Islemi

Privileges ve rolleri iptal edebiliriz.
Ornek olarak System kullanicisi olarak ,new_role rolumuzde verdigimiz insert islemini iptal edelim.

revoke insert
on  user2.roles2Table
from new_role;

user1 kullanicisi olarak insert islemini tekrar calistirmayi deneyelim bu durumda hata alacagiz..

SQL Error: ORA-01031: insufficient privileges
01031. 00000 – “insufficient privileges”

user1 e verilen rolu tamamen iptal etmek icin

revoke new_role
from user1;

Not: Bu hak kaldirildiginda user1 olarak baglantiyi kopartip tekrar girmek gerekmektedir.
Daha sonrasinda select sorgumuz yukarida oldugu gibi insufficent privileges hatasi olarak donecektir.

select * from USER2.roles2table;


Rol Silme ( Drop Role)

drop role rolename;

Bir rol silindiginde , kullanicilar role ile birlikte gelen tum haklari kaybederler.

Kullanici Silme ( Drop User)

drop user username;

Komutu ile olusturulan kullaniciyi silebiliriz. System kullanicisi olarak bu islemi yaptigimda eger silecegimiz kullanici veritabanina bagli ise bu durumda su hatayi aliriz.

drop user user1;

SQL Error: ORA-01940: cannot drop a user that is currently connected

Bunun icin user1 ‘in baglantisini kopartmamiz gerekmektedir.
Baglantiyi kopartip tekrar denedigimizde su hatayi alabiliriz.

SQL Error: ORA-01922: CASCADE must be specified to drop ‘USER1’

Bunun nedeni silmek istedigimiz bir kullaniciya ait objeler varsa bu durumda CASCADE kelimesini kullanmamiz gerekmektedir. Bu objeleri de silmek istedigimiz belirtiyoruz, diger turlu ayni isimde yeni bir kullanici olusturdugumuzda mevcut objelerle cakisma olacaktir.

drop user user1 cascade;

islem basariyla sonuclandi…

Bu dersimiz de burada son buldu.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *