SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Anar Godjaev
http://anargodjaev.wordpress.com/
VERİTABANI VE KULLANICI YÖNETİMİ
Oracle güvenlik konusunu çok ciddi olarak ele almaktadır.Hem kullanıcılar bazında hemde system bazında
yeterli seviyede korunma birimleri vardır.
Bir veri tabanı ilk yaratıldığında bilinmesi gereken en önemli iki kullanıcı vardır.Biri SYSTEM diğeri
SYS‟dir.İkiside veritabanını yönetmek için full haklara sahiptir.Sys kullanıcısoyla bağlanabilmek için
bağlantı cümlemizin sonuna AS SYSDBA eklemek zorundayız.Dediğimiz gibi SYS ve SYSTEM arasında
veritabanını yönetmek açısından hiçbir fark yoktur.Tek fark sys user‟ı sysdba haklarıyla bağlandığı için
veritabanını kapatabilmekte fakat system user‟ı kapatamamktadır.
İlk olarak güvenliğin en önemli prensibi olan kullanıcı yönetiminden başlamalıyız.
Bir kullanıcı nasıl yaratılır ve neler önemlidir diye bakacak olursak,
*Kullanıcının unique bir ismi olmalıdır.30 karakteri geçmemeli,özel karakterler kullanılmamalı yalnızca harf
kullanılmalıdır.
*Authentication metodu dediğimiz hangi şekilde bağlanacağı belirlenmelidir.
*Kullanıcının Default data ve temp tablespace „i belirlenmelidir.
*Kullanıcı için profil belirlenmeldiir.
*Bir kullanıcı yaratılıp ,bu kullanıcı ile bir obje oluşturulursa artık bu kullancının bir SCHEMA „sı oluşur.Artık
bundan sonra kullanıcınn objeleri değil,schemanın objeleri kavramını kullanacağız.
Anar Godjaev
http://anargodjaev.wordpress.com/

SQL >CREATE USER user_name IDENTIFIED BY password;
SQL >CREATE USER deneme IDENTIFIED BY deneme;
SQL > CREATE USER user IDENTIFIED {BY password |
EXTERNALLY |GLOBALLY AS 'external_name'}
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[ { QUOTA {n [K|M] | UNLIMITED} ON
tablespace } [, ... ] ]
[PROFILE profile]
} [ ... ];

Create user sysntax‟ını yazdıktan sonra 3 alternatifimiz var,ya kullanıcya password verebilir,external
seçeneğini seçip işletim sistemi yada 3.party bir sevisin haklarıyla bağlandırabilir yada global seçeneğini
seçip,enterprise directory service hakları ile bağlandırabiliriz.
Şimdi bunun örneklerine sıra ile bakarsak,
Normal bir şekilde yani password kullanarak user yaratılması şu şekildedir.

SQL >CREATE USER deneme IDENTIFIED BY deneme;
Bunun dışında externally yani işletim sistemi yada 3. Part tooların verdiği haklarla user yaratmak istersek,
Anar Godjaev
http://anargodjaev.wordpress.com/
İlk olarak bakmamız gereken bir paramere olan os_authent_prefix „dir.
SQL> SHOW PARAMETER os_authent_prefix
NAME
TYPE
VALUE
------------------------------------ ----------- -----------------------------os_authent_prefix
string
ops$
SQL>
Buradaki ops$‟ın anlamı user yaratırken ön takı olarak başına ops$ koyacağımız nalmaına geliyor.
Daha sonra "%ORACLE_HOME%networkadminsqlnet.ora" dosyasını açtığımızda ,
SQLNET.AUTHENTICATION_SERVICES= (NTS) satırının kesinlikle olması gerekmektedir.
Artık veritabanı kullanıcımızı yaratabiliriz.Fakat burada ikinci olarak dikkat edeceğimiz,Windows
sistemlerde eğer makinamız domain‟e bağlıysa bu domain name‟ini kullanacağız,eğer bağlı değil ise
makine ismini kullancağız,unix sistemlerde buna gerek yoktur.
Şimdi hem unix hemde windows istemler için örneklerimizi görelim,
UNIX
SQL >CREATE USER ops$USER_NAME IDENTIFIED EXTERNALLY;
SQL >CREATE USER ops$DENEME IDENTIFIED EXTERNALLY;
SQL >GRANT CONNECT TO ops$DENEME;
-- Windows
SQL >CREATE USER "OPS$domain_nameTIM_HALL" IDENTIFIED EXTERNALLY;//domain ise
SQL >CREATE USER "OPS$computer_nameTIM_HALL" IDENTIFIED EXTERNALLY;//domain değilse
SQL >CREATE USER "OPS$MAKINA1DENEME" IDENTIFIED EXTERNALLY;
SQL >GRANT CONNECT TO "OPS$ MAKINA1DENEME ";
Burada dikkat ettiyseniz user isimleri kesinlikle büyük harfle tanımlanmalıdır.
Windows sistemlerde kafamız domain mi kullancam yoksa local computer name kullanacağım diye karışsın
istemiyorsanız,sqlplus “/as sysdba” ile bağlandığınızda aşağıdaki sorguyu çalıştırısanız size ne şekilde
bağlanmanız yada kullanıcı yaratmanız gerektiğini söyleyecektir.
SQL> select UPPER(sys_context('userenv','os_user')) from dual;
UPPER(SYS_CONTEXT('USERENV','OS_USER'))
------------------------------------------------------------------MAKINA1Administrator
Bu işlemleri bitirdikten sonra artık işletim sistemi tarafında kullanıcı yaratmamız gereklidir.Yine aynı
şekilde unix ve windows sistemler için durum farklıdır.Kullanıcı isimlerini mümkünse yine büyük harfle
tanımlıyoruz.
Anar Godjaev
http://anargodjaev.wordpress.com/

Yukarıdaki örnek windows sistmeler içindir.Unix sistemlerde ise /etc/passwd altına bir user eklemek
yeterlidir.
Bundan sonraki adım ise hangi user‟ı yarattıysak o user ile işletim sistemine login oluyoruz.Daha sonra
command‟ı açıp sadece sqlplus / yada sqplus /@service_name(bu isim tnsnames.ora daki isimdir) yazmak
yeterlidir.
Anar Godjaev
http://anargodjaev.wordpress.com/
Windows sistemlerde eğer domain kullanıcılarının uzaktan bağlanabilmeleri isteniyorsa
remote_os_authent parametresinin değeri TRUE olmalıdır.Default‟u false tur
SQL>ALTER SYSTEM SET REMOTE_OS_AUTHENT=TRUE SCOPE=SPFILE ;
SQL>SHUTDOWN IMMEDIATE ;
SQL>STARTUP;
Bir diğer authentication şekli olan GLOBALLY kavramına bakarsak bu tamamen enterprise directory
service hakları ile bağlanmayı gerektirir.Genellikle OID dediğimiz Oracle Internet Directory yapısında
kullanılır.Bunun için NETCA tanımlarında ya Oracle Internet Directory yada Microsft active directory
yapısını kullanabiliriz.Önemli bir konudur fakat çok uzun anlatılması gerekir.
Bunun için bir kullancı tanımına bakacak olursak,

SQL>CREATE USER DENEME
IDENTIFIED GLOBALLY AS 'CN=analyst, OU=division1, O=oracle, C=US'
DEFAULT TABLESPACE example
QUOTA 5M ON example;
Authentication konusunu tamamladıktan sonra kullanıcı tanomlarken gerekli olan diğer konulara
bakabiliriz.
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
Default tablespace yaratacağımız kullanıcının objelerini muhafaza etmek için hangi tablespace‟i
kullanacağını belirlememize yarar.Çoğu iyi tasarlanmış sistemlerde ilk önce tablespace daha sonra
kullanıcı tanımlandığı için user yaratma aşamasında rahatlıkla belirtebiliriz.Diğer‟i ise TEMPORARY olarak
hangi tablespace‟i kullanacağıdır.Eğer boş bırakırsak Veirtabanının default temp tablespace‟ini kullanır
ama istenirse yeni bir temp tablespace yaratılıp bu kullanıcı için kullanılsın denilebilir.Genellikle ilgili luser
yaptığı sıralama işlemlerinde kullanılacaktır.
Önceki gördüklerimizle bir karşılaştırma yapacak olursak,bir database‟de aktif olarak birden fazla TEMP
Tablespace kullanılabilir,ama tüm kullanıcılar için undo tablespace tektir.Bunu unutmamaka gerekir.
SQL>CREATE USER DENEME
IDENTIFIED BY SIFRE
DEFAULT TABLESPACE DENEME_TAB
TEMPORARY TABLESPACE TEMP;
Sırada göreceğimiz profile ve kota kavramları var,
[ { QUOTA {n [K|M] | UNLIMITED} ON
tablespace } [, ... ] ]
[PROFILE profile]
QUOTA‟nın anlamı oluşturacağımız kullanıcının ilgili tablespace üzerinde ne kadarlık bir obje barındırma
hakkı olsun dediğimizde kullanıyoruz,Eğer unlimeted verirsek sınırsız olarak kullanabilir.
Anar Godjaev
http://anargodjaev.wordpress.com/
Profile ise sistem üzerinde default profiller olduğu gibi biz kendimiz profile tanımlayarak kullanıcının
oturumunu yönetebiliyoruz.Örneğin kullanıcı kaç sefer yanlış şifre girdiğinde lock lansın,şifre uzunluğu ne
olsun,ne kadar süre bağlı kalabilsin gibi.Bir çok senaryo mevcuttur.Gerçekten kullanışlı bir opsiyondur.
Örneğin yeni bir profile oluşturma olayına bakacak olursak,

Resource parameters

Password parameters

Yukarıda görüldüğü gibi birçok parametre baz alınarak profile tanımı yapılabilir.
Veritabanı ilk kurulduğunda default isimle gelen profilin yapısı şu şekildedir.
SQL > CREATE PROFILE DEFAULT LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
CONNECT_TIME UNLIMITED
IDLE_TIME UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
COMPOSITE_LIMIT UNLIMITED
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
Anar Godjaev
http://anargodjaev.wordpress.com/
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL;
Sırayla Resource parametrelerinden başlıyarak bakacak olursak,
SESSIONS_PER_USER
Eşzamanlı olarak kullanıının açabileceği sssion sayısı
CPU_PER_SESSION
Saniyenin 100 de biri kadar biri süre içinde kullanıcının limitliyebileceği CPU zamanı.
CPU_PER_CALL
parse, execute, fetch gibi işlemler için Saniyenin 100 de biri kadar kullanıcya verilecek limit.
CONNECT_TIME
Kullanıcının bir session içinde geçirebileceği zaman ,dakika cinsinden.
IDLE_TIME
Uzun sorgular için kullanışlıdır,yapılan işlemin ne kadar süre bekleneceğini saniye cinsinden gösterir
LOGICAL_READS_PER_SESSION
Bir session içinde ne kadarlık data bloğu okunabileceğini limitler
LOGICAL_READS_PER_CALL
parse, execute, fetch anında ne kadarlık databloğu okunacağını limtler
PRIVATE_SGA
İstenirse kullanıcı için byte cinsinden özel bir SGA alanı tahsis edilebilir.
Passowrd paramerelerine bakacak olursak,
FAILED_LOGIN_ATTEMPTS
Kullanıcın login olmadan önce lock olana kadar kaç deneme yapabileceğini gösterir
PASSWORD_LIFE_TIME
Gün cinsinden parolanın ne kadar süre geçerli olacağını gösterir.
PASSWORD_LOCK_TIME
Parolanın ne kadar gün sonra lock edileceğini belirler.
SQL > CREATE PROFILE new_profile
PASSWORD_LIFE_TIME 10
FAILED_LOGIN_ATTEMPTS 5;
SQL > CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER
UNLIMITED
CPU_PER_SESSION
UNLIMITED
CPU_PER_CALL
3000
CONNECT_TIME
45
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL
1000
PRIVATE_SGA
15K;
Daha sonra ise kullanıcı tanımlarken bu profilleri kullanıcıya atayabiliyoruz.
Anar Godjaev
http://anargodjaev.wordpress.com/
SQL > CREATE USER app_user1
IDENTIFIED by oracle
DEFAULT TABLESPACE example
QUOTA 5M ON example
PROFILE app_user;
SQL > CREATE USER new_user_orakleci
IDENTIFIED by oracle
DEFAULT TABLESPACE example
QUOTA 5M ON example
PROFILE new_profile;
Bunuda gördükten sonra user yaratırken iki kavram daha kalıyor ACCOUNT LOCK yada UNLOCK ve
PASSWORD expire kavramı.
Kullanıcı yaratırken istersek kitli yaratıyoruz,isetersek kilitsiz yaratbiliyoruz.Kilitli ise kullanıcı login
olduğunda oturum kilitli lütfen kilidi açın gibi bir uyarı alınır.Kullanıcı kendi kilidini açamayacktır.Bunu
yetkili bir başka kullanıcı açtıktan sonra kilitli kullanıcı artık bağlanabilecektir.Bu paramrenin default‟u
UNLOCK olarak tanımlıdır.
Pasword expire seçeneğini aktif hale getirisek kullanıcı login olduğunda şirefsini değiştirmesi istenecek ve
kullanıcıda bunu değiştirecektir.
SQL> create user deneme identified by deneme password expire;
SQL>connect deneme/deneme
ERROR:
ORA-28001: the password has expired
Changing password for deneme
New password:
Yukarıdaki örnekte görüldüğü gibi kulalncıdan yeni şifre girmesi istenmiştir.
Alttaki örnek ise kilitli olarak yaratılan bir kullanıcının nasıl kullanılacağı ile ilgilidir.Kullanıcı kilitlidir ve
bağlanmak istediğinde hata almıştır.Başka bir yetkili kullanıcıyla bu kilidi açıyoruz ve kullanıcı tekrar
denediğinde artık bağlanabiliyor.
SQL> create user deneme identified by passw0rd account lock;
SQL>connect deneme/passw0rd
ERROR:
ORA-28000: the account is locked
SQL>alter

user deneme account unlock;

SQL>connect deneme/passw0rd
Connected.
Buraya kadar anlatılan işlemlerle bir kullanıcının nasıl yaratılacağını gördük.Peki oluşturulan kullanıcı
sisteme nasıl bağlanıyor diye bakacak olursak.
Anar Godjaev
http://anargodjaev.wordpress.com/
$sqlplus kullanici/sifre [as sysdba/sysoper]
Örneğin denem isimli bir kullanıcı ve şifresi deneme_sifre olan bir kullanıcı ile bağlanmak isteyelim.
$sqlplus deneme/deneme_sifre
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL >
Bağlantı bu şekilde sağlanacaktır.Peki buradaki as sysdba yada as sysoper nedir diye bakacak
olursak.SYSDBA hakkı sistemde sysdba hakkına sahip olan kullanıcların bağlanma şeklidir.Bu hakka SYS
kullanıcısı sahiptir.SYS kullanıcısı SYSDBA opsiyonu dışında normal olarak bağlanamaz.SYSDBA ile
bağnalıldığında sistem üzerinde yapılamayack işlem yoktur.Her kullanıcı SYSDBA opsiyonu ile bağlanamaz
sadece bu hakka sahip olanlar bağlanabilir.Bu hakta SYSDBA hakkına sahip olan bir kullanıcı ile başka bir
kullanıcıya şu şekilde verilir.
SQL > grant sysdba to kullanici_adi;
Şimdi SYSDBA hakkı ile SYSOPER arasında ne gibi farklar var diye bakacak olursak,
SYSDBA
STARTUP ve SHUTDOWN işlemini gerçekleştirebilir.
ALTER DATABASE komutu ile beraber : open, mount, back up, yada change character set
yapabilir.
CREATE DATABASE yapabilir.
DROP DATABASE yapabilir.
CREATE SPFILE yapabilir.
ALTER DATABASE ARCHIVELOG yapabilir.
ALTER DATABASE RECOVER yapabilir.
SYSOPER
STARTUP ve SHUTDOWN işlemini gerçekleştirebilir.
CREATE SPFILE yapabilir.
ALTER DATABASE OPEN/MOUNT/BACKUP yapabilir.
ALTER DATABASE ARCHIVELOG yapabilir.
ALTER DATABASE RECOVER (Yalnızca tam recovery dediğimiz işlemi yapabilir. INCOMPLATE
RECOVERY dediğimiz UNTIL TIME|CHANGE|CANCEL|CONTROLFILE işlemlerini yapamaz,bunları
yapabilmek için SYSDBA olmak gereklidir.)
Görüldüğü üzere aralarında birkaç ciddi fark vardır.
Bazen dikkat edilirse işletim sisteminden aşağıdaki komutu kullanarak kullanıcı adı şifre girmeden ama
sysdba yada sysoper ile veritabanına connect olabilmekteyiz.Peki bu nasıl olmaktadır.
Mesela,
$ sqlplus “/as sysdba” yazdığımızda bağlanabilmekteyiz.Bunu yapabilmemizi sağlayan işletim sistemine
connect olduğumuz kullanıcının windows sistemlerde ORA_DBA unix sistemlerde ise DBA grubuna dahil
olmasınla olur.sysoper için ise windows sistemlerde ORA_OPER ,unix sistemlerde OPER grubu ile
gerçekleşmektedir.Bu gruba dahil olunmayan işletim sistemi kullanıcılarınla bağlanıldığında bu işlemi
gerçekleşitiremeyiz.
Anar Godjaev
http://anargodjaev.wordpress.com/
Peki bunun dışında uzaktaki bir sistemden bir veritabanına / as sysdba haklarıyla nasıl bağlanırız diye
bakacak olursak bu biraz daha farklıdır.
Buna Oracle dilinde REMOTE_LOGIN_DATABASE diyoruz.
SQL > CONNECT /@net_service_name AS SYSDBA
SQL > CONNECT /@net_service_name AS SYSOPER
Yukarıdaki bağlantı şekliye bağlanabilmemiz için veritabanı üzerinde çeşitli parametrelerin aktif olması
gereklidir.
REMOTE_LOGIN_PASSWORDFILE adını verdiğimiz parametrenin değerinin EXCLUSIVE olması
gereklidir.Veritabaında default olarak bu şekildedir fakat NONE yada SHARED ise bu değere set edilmesi
gereklidir.
Tabi ki bunu yapmakta yetmeyecektir bunun dışında Passwordfile adını verdiğimiz bir file vardır.Bu file‟ın
yaratılmış ve düzgün ayarlanmış olması gereklidir.Eğer yoksa şu şekilde ayarlayabiliriz.
$ ORAPWD FILE=filename PASSWORD=password ENTRIES=max_users force=<y/n>
Buradakilerin anlamı,
FILE = Passord file‟ın ismi,direk olarak dosya ismi verilebileceği gibi bir path‟le de birlikte
verilebilir.Girilmesi zorunludur.
PASSWORD=sys user‟ı için password belirlenir.Eğer daha öneden bir password file‟ımız var ve
kullanılıyorsa ALTER USER komutu ile sys kullanıcısının şifresini değiştirdiğimizde password file danda şifre
güncellenir.İlk defa password file yaratacaksak burada verdiğimiz şifre veritabanı içinde
geçerlidir.Girilmesi zorunludur.Eğer veritabanı üzerinde REMOTE_LOGIN_PASSWORDFILE parametresi
SHARED ise sys kullanıcısının şifresi değiştirilemez.
entries – Farklı olarak DBA yada operlardan max ne kadar kabul edileceği
force – Mevcut dosyanın üzerine yazılıp yazılmayacağı
Dikkat edilmesi gereken = karakterlerinden sonra boşluk olmamalıdır.
Veritabanı üzerinde REMOTE_LOGIN_PASSWORDFILE parametresi için üç tip bilgi set edileebilir.Bunlar ve
özelliklerine bakacak olursak,
NONE: parametre değerinin bu şekilde olması ile güvenli olmayab hiçbir bağlantıya izin verilmeyecektir.
EXCLUSIVE: Parametrenin bu değeri ile password file „ın ve içindeki kullanıclarla güvenli şekilde
bağlanabileceği anlamına gelir.
SHARED: Genellike birden fazla instance „ın olduğu RAC sistemlerinde kullanılır.Aslında amaç password
file‟ın paylaşılmasıdır.Hiçbir şekilde SYSDBA yada SYSOPER hakkına sahip kullanıcıların(sys dahil) şifresi
değiştirilemez,yeni Özel haklara sahip olacak(SYSDBA,SYSOPER) kullanıcı eklenemez.Yapabilemk için
parametreyi EXCLUSIVE‟e çevirmeli işimiz bitiiğinde tekrar SHARED konumuna alınabilir.
Anar Godjaev
http://anargodjaev.wordpress.com/
Veritabanına yeni bir SYSDBA yada SYSOPER hakkına sahip olacak kullanıcı eklendiği zaman otomatik
olarak password file‟a yazılır.
Password file içinde tanımlı kullaıcılar ve haklarını görmek için V$PWFILE_USERS view‟ı kullanılabilir.
Şimdi artık kullanıcılarımızı düzgün şekilde yarattığımıza gore kullancıların sisteme ve system objelerine
hangi haklarla bağlandığına ve bu hakların nasıl ayarlandığına bakabiliriz.
Bu hakların ilk adımı olan privileges kavramına bakabiliriz.Privileges system privileges ve objects privileges
olarak ikiye ayrılır.
System privileges system üzerinde bazı işlemleri yapabilmeyi kullanıcılara sağlar.Başlıca privilegeslara
bakacak olursak,
– CREATE SESSION = En önemli haklardan biridir,bu hakka sahip olmayan bir kullanıcı veritabanına
bağlantı kuramaz.
– CREATE TABLE = Kendi Scheması ve tablespace‟I dahilinde tablo yaratabilme iznidir.
– CREATE ANY TABLE = Kendi scheması ve diğer schemalar için tablo yaratabilme iznidir.Bir iznin önünde
ANY varsa kendi scehamsı ve diğer schemalar içinde anlamına gelir.
– CREATE SEQUENCE = Artan sırada ardaşık sayı grubu oluşturmak için gereken haktır.
– CREATE VIEW = View oluşturabilmek için gereken haktır.
– CREATE INDEX = Index oluşturabilmek için gerekli haktır.
– CREATE PROCEDURE = Kendi scheması içinde procedure oluşturabilmek için gerekli haktır.
– CREATE ANY PROCEDURE = Kendi scheması ve diğer schemalarda procedure oluşturabilmek için
gerekli haktır.
– CREATE ROLE = Role yaratabilmek için gerekli haktır.
– CREATE USER = Kullanıcı yaratabilmek için gerekli haktır.
– CREATE TRIGGER = Trigger yaratabilmek için gerekli haktır.
– CREATE PROFILE = Profile yaratabilmek için gerekli haktır.
– ALTER USER = Kullanıcı ile ilgili değişiklik yapacağımız zaman gerekli olan bir izindir.
– ALTER ANY TABLE = Tablolarla ilgili bir değişiklik yapacağımız zaman gerekli olan bir izindir.
– DROP ANY TABLE = bir tabloyu sileceğimiz zaman gerekli olan bir izindir.
– EXECUTE ANY PROCEDURE = Bir prosedürü çalıştırabilmek için gerekli haktır.
– SELECT ANY TABLE = Kendi scheması ve diğer schemalar için sorgulama yapabilme iznidir.
Burada örnek olarak verdiğimiz izinlerin dışında yaklaşık olarak 160-170 arası system izinleri vardır.Bu
İzinler nelerdir diye görmek istersek,
SQL >select distinct(PRIVILEGE) from Dba_sys_privs order by PRIVILEGE;
Sorgusunu kullanabiliriz.
Şimdide bu hakların kullanıclara nası verildiğine bir bakarsak,
SQL >create user deneme identified by deneme;
SQL >grant create session to deneme;
SQL >grant create table to deneme;
$ sqlplus deneme/deneme
Connected
Anar Godjaev
http://anargodjaev.wordpress.com/
SQL> create table hh(aa varchar2(20));
Table created.
SQL> create table baska_schema.hh(aa varchar2(20));
create table baska_schema.hh(aa varchar2(20))
*
ERROR at line 1:
ORA-01031: insufficient privileges
Görüldüğü gibi başka bir kullanıcının schemasına obje yaratmak istediğimizde hata aldık.O yüzden yetkili
bir kullanıcı ile deneme kullanıcısına CREATE ANY TABLE hakkı verip tekrar deniyoruz.
SQL >exit;
$ sqlplus “/as sysdba”
Connected
SQL >grant create table to deneme;
SQL >exit;
$ sqlplus deneme/deneme
Connected
SQL> create table baska_schema.hh(aa varchar2(20));
Table created.
Görüldüğü gibi bu örnekten ANY ile ve ANY siz olarak izinlerin farkını anlayabiliriz.
Bir kulalncıya toplu olarak system izinlerini vermek istiyorsak,
SQL >grant create table,alter any table,drop user,execute any procedure to deneme;
Şeklinde kullanabiliriz.
Buraya kadar anlatılanlar system üzerinde var olan izinlerdi,bir diğer izin şeklide obje privilige‟I olarak
adlandırıyoruz.Oda şu şekilde oluyor,Örneğin bizim kullanımızın ismi firstu olsun,başka bir kullanıcı daha
belirleyelim onun ismide secondu olsun.Normalde eğer obje izinleri yoksa bir kullancı başka bir kullancının
objelerine erişemez.Şu şekidle bir örnekle anlatmaya çalışırsak.
1)İlk olarak yetkili bir kullancı ile sisteme bağlanıyoruz
$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 15:42:07 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
Anar Godjaev
http://anargodjaev.wordpress.com/
With the Partitioning, OLAP and Data Mining options
2)İlk kullanıcımızı yaratıyoruz.
SQL> create user firstu identified by firstu;
User created.
3)Kullanıcıya sisteme bağlanabilmesi için create session hakkı veriyoruz.
SQL> grant create session to firstu;
Grant succeeded.
4)Daha sonra ikinci kullanıcımızı yaratıyoruz.
SQL> create user secondu identified by secondu;
User created.
5)İkinci kullanıcıya tablo yaratbilme hakkı olan create table,oturum açabilme hakkı olan
create session ve bağlı olduğu tablespace’te yazabilme hakkı olan resource veriyoruz.
SQL> grant create session,create table,resource to secondu;
Grant succeeded.
6)sqlplus tan çıkmadan ikinci kullanıcı ile bağlanıyoruz.
SQL> conn secondu/secondu;
Connected.
SQL> show user
USER is "SECONDU"
7)ikinci kullanıcı ile bir tablo yaratıp içine bir staırlık bir bilgi giriyoruz.
SQL> create table xx(aa varchar2(5));
Table created.
SQL> insert into xx values ('HH');
1 row created.
SQL> commit;
Commit complete.
8)Daha sonra birinci kullanıcı ile bağlanıyoruz sqlplus tn çıkmadan.
SQL> conn firstu/firstu;
Connected.
SQL> show user
Anar Godjaev
http://anargodjaev.wordpress.com/
USER is "FIRSTU"
9)Aşağıdaki sorguyu çalıştırmasını istiyoruz,kullanıcı bunu çalıştıryor fakat hata alıyor çünkü
birinci kullanıcının ikinci kullanının tablosunda select izni yok.
SQL> select * from secondu.xx;
select * from secondu.xx
*
ERROR at line 1:
ORA-00942: table or view does not exist
10)İkinci kullanıcı ile bağlanıp kendi tablosuna birinci kullanıcının bağlanıp select
yapabilmesi için gerekli izni veriyoruz.
SQL> conn secondu/secondu
Connected.
SQL> show user
USER is "SECONDU"
SQL> grant select on xx to firstu;
Grant succeeded.
11)birinci kullanıcı ile tekrar bağlanıp aynı sorguyu tekrar denediğimizde artık select
yapabildiğimizi görüyoruz.
SQL> conn firstu/firstu
Connected.
SQL> show user
USER is "FIRSTU"
SQL> select * from secondu.xx;
AA
----HH
12)Bu sefer birinci kullanıcı ile ikinci kullanıcının tablosuna insert yapmayı denedğimizde
hata alıyoruz bunun sebebide birinci kullanıcının ikinci kullanıcının tablsounda insert
yapmaya hakkı olmadığını görüyoruz.
SQL> insert into secondu.xx values ('JK');
insert into secondu.xx values ('JK')
*
ERROR at line 1:
ORA-01031: insufficient privileges
12)Bu sefer ikinci kullanıcı ile bağlanıp hem insert hemde delete hakkı verip bu işi
bitiriyoruz.Denemesinide size bırakıyorum.
SQL> conn secondu/secondu
Connected.
SQL> show user
USER is "SECONDU"
SQL> grant select,insert,delete on xx to firstu;
Anar Godjaev
http://anargodjaev.wordpress.com/

Obje ve system bazında nasıl izinlerin verildiğini gördük ,komutumuz grant idi,peki verilen izinleri geri
almak istersek ne yapmamız gerekir,bunun komutuda REVOKE tur.
Örnek olarak bakarsak,
SQL>revoke create any table from deneme1;
SQL>revoke execute any procedure from deneme;
SQL>revoke select on xx from firstu;
Kullanım şekli yukarıda görüldüğü kadar basittir.
Obje ve system izinlerini gördük,bunları kullanmak aslında hiç te kolay değil,bunları tek tek kullanıcılara
vermek biraz zahmetli olabilir.Oracle‟I yazanlar role diye bir kavram düşünmüşler.Örneğin bir şirketimiz
var,yaklaış 100 adet kullanıcı olsun,ve şirketin 5 departmanı olsun.Bu 5 departmanın görevleri farklı olsun
ama aynı departmanda çalışanların görevleri aynı olsun.Şimdi Oracle‟da bu 100 kullanıcyı yaratıp her
kullanıcı için tek tek bu izinleri vermek zahmetli olabileceği gibi gözden kaçacak şeylerde olabilir.İlerleyen
günlerde bu 100 kullancıya yeni bir görev vermek istersek tek tek yazmamız gerekir.Yada kullanıcı
departman değiştirecekse once bütün hakları geri alıp daha sonra diğer departmanın haklarını vrmek
gerekir.

Bunun çok zahmetli olacağı bellidr.Onun için ROLE denen kavramı kullanmak daha akılcıdır.
Privillege larda olduğu gibi role lar içinde system tarafından hazırlanmış olan ROLE ler ve bizim
tanımlayacağımız olan ROLE ler mevcuttur.
Örneğin system tarafından hazırlanmış ROLE‟ler nelerdir diye bakacak olursa birkaç örnekle üzerinden
geçebiliriz.
CONNECT = içinde connect session iznini barındırır.
DBA = Hemen hemen tüm izinleri bünyesinde barındırır.Bu role‟e sahip olan kullanıcı hemen hemen
herşeyi yapabilir.O yüzden çok tehlikelidir.
RESOURCE = Bu ise içinde CREATE TABLE,CREATE TYPE.. gibi iznleri barındırır.Bu roel önemlidir zira ilgili
tablespace üzerind eyazma yapabilemk için gereklidir.
Peki bir system role‟ü kullanıcya nasıl verilir.
Anar Godjaev
http://anargodjaev.wordpress.com/
SQL> grant connect,resource to deneme;
Kullanımı aynı privillege‟ta olduğu gibidir.Peki system role‟lerinin dışında kendimize ait role nasıl
tanımlayabiliriz diye bakarsak ilk olarak kullanıcının ihtiyacı olan create role hakkına sahip olmasıdır.Bunun
dışındakileri bir örnekle sıralayacak olursak,
1-)İlk olarak yetkili bir kullanıcı ile bağlanıyoruz.
$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 17:15:37 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
2-)Daha sonra bir kullanıcı yaratıyoruz.
SQL> create user newu identified by newu;
User created.
3-)Kullanıcıya çeşitli role ler için hak tanımlıyoruz.
SQL> grant connect,resource,create role,create user,create procedure to newu;
Grant succeeded.
4-)Tanımladığımız kullanıcı ile bağlanıp ,bu kullanıcı ile yeni bir role yaratıyoruz.
SQL> conn newu/newu
Connected.
SQL> show user
USER is "NEWU"
SQL> create role newrole;
Role created.
5-)Daha sonra kullanıcımız ile sahip olduğumuz haklardan iki tanesini role’e atamak istiyorz
fakat hata alıyoruz.Bunun sebebi kullanıcı o haklara sahip fakat sahip olduğu hakları başka
bir role’e yada kullanıcıya atama hakkına sahip değil.Bunuda şu şekilde hallediyoruz.
SQL> grant create user,create procedure,connect to newrole;
grant create user,create procedure to newrole
*
ERROR at line 1:
ORA-01031: insufficient privileges
Anar Godjaev
http://anargodjaev.wordpress.com/
6-)Ytekili sys kullanıcısı ile bağlanıp newu userına sahip olduğu hakları dağıtabilmesi için
admin option veriyoruz.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Pr
oduction
With the Partitioning, OLAP and Data Mining options
$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 17:18:49 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> grant create user,create procedure,connect to newu with admin option;
Grant succeeded.
7-)Aynı işlemi newu user’I ile tekrar denediğimizde işlemin başarılı olduğunu
görüyoruz.Artık newu user’I bir role oluşturdu ve sahip olduğu izinleri bu role’e atayabildi.
SQL> conn newu/newu
Connected.
SQL> show user
USER is "NEWU"
SQL> grant create user,create procedure,connect to newrole;
Grant succeeded.
SQL> show user
USER is "NEWU"
8-)Daha sonra newu user I ile yeni bir kullanıcı tanımlıyoruz ve tanımlanan role’U yeni
tanımlanacak kullanıcya atıyoruz.
SQL> create user xxu identified by xxu;
User created.
SQL> grant newrole to xxu;
Grant succeeded.
9-)Aşağıdaki sorgularla NEWU ve XXU kullanıcları için sahip olunan privilege ve role’leri
görebiliriz.
Anar Godjaev
http://anargodjaev.wordpress.com/

SQL> select * from user_sys_privs where username = 'NEWU';
USERNAME
-----------------------------NEWU
NEWU
NEWU
NEWU

PRIVILEGE
ADM
---------------------------------------- --CREATE USER
YES
UNLIMITED TABLESPACE
NO
CREATE ROLE
NO
CREATE PROCEDURE
YES

SQL> conn xxu/xxu;
Connected.
SQL> select * from user_sys_privs where username = 'XXU';
USERNAME
PRIVILEGE
ADM
------------------------------ ---------------------------------------- --XXU
CREATE SESSION
NO
SQL> select * from user_role_privs where username ='XXU';
USERNAME
GRANTED_ROLE
ADM DEF OS_
------------------------------ ------------------------------ --- --- --XXU
NEWROLE
NO YES NO
SQL> conn newu/newu
Connected.
SQL> select * from user_role_privs where username ='XXU';
no rows selected
Bu komutlar dışında çeşitli alter komutlarıyla kullanıcılar için işlemler yapabiliriz.
Örneğin bir kullanıcının şifreisni değiştirmek istedik diyelim.
SQL > alter user newu identified by yeni_sifre;
Yada bir kullanıcıyı lock layalım yada lock‟ını kaldıralım.
Anar Godjaev
http://anargodjaev.wordpress.com/
SQL > alter user newu account lock;
SQL > alter user newu account unlock;
Kullanıcının default tablespace‟ini değiştirmek isteyelim.
SQL > alter user newu default tablespace DENEME;
Bunun dışında birçok etkili komut kullanılıp denenbilir.
Bunların dışında en dikkat edeceğimiz konulardan biride SYS schemasına ait data dictionary dediğimiz
objelerin UPDATE edilememsidir.bu tablolara dokunulmasını istemiyorsak
O7_DICTIONARY_ACCESSIBILITY adlı parametrenin değerini FALSE olarak ayarlamalıyız.

Más contenido relacionado

La actualidad más candente

Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanOrneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanAnar Godjaev
 
Performance Tuni̇ng
Performance Tuni̇ngPerformance Tuni̇ng
Performance Tuni̇ngAnar Godjaev
 
Oracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOrhan ERIPEK
 
İleri Seviye T-SQL Programlama - Chapter 01
İleri Seviye T-SQL Programlama - Chapter 01İleri Seviye T-SQL Programlama - Chapter 01
İleri Seviye T-SQL Programlama - Chapter 01Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20Cihan Özhan
 
Oracle database architecture
Oracle database architectureOracle database architecture
Oracle database architectureHızlan ERPAK
 

La actualidad más candente (9)

Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanOrneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
 
Performance Tuni̇ng
Performance Tuni̇ngPerformance Tuni̇ng
Performance Tuni̇ng
 
Oracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12c
 
İleri Seviye T-SQL Programlama - Chapter 01
İleri Seviye T-SQL Programlama - Chapter 01İleri Seviye T-SQL Programlama - Chapter 01
İleri Seviye T-SQL Programlama - Chapter 01
 
Konu anlatım
Konu anlatımKonu anlatım
Konu anlatım
 
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20
 
Raid technologies
Raid technologiesRaid technologies
Raid technologies
 
Exadata Performance Notes
Exadata Performance NotesExadata Performance Notes
Exadata Performance Notes
 
Oracle database architecture
Oracle database architectureOracle database architecture
Oracle database architecture
 

Destacado

how to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaulthow to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaultAnar Godjaev
 
Fiziksel Standby Database Kurulum
Fiziksel Standby Database KurulumFiziksel Standby Database Kurulum
Fiziksel Standby Database KurulumAnar Godjaev
 
Db Triggers05ch
Db Triggers05chDb Triggers05ch
Db Triggers05chtheo_10
 
Using triggers in my sql database
Using triggers in my sql databaseUsing triggers in my sql database
Using triggers in my sql databaseKimera Richard
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggersAz Za
 
Audit Mekani̇zmasi
Audit Mekani̇zmasiAudit Mekani̇zmasi
Audit Mekani̇zmasiAnar Godjaev
 
MySql Triggers Tutorial - The Webs Academy
MySql Triggers Tutorial - The Webs AcademyMySql Triggers Tutorial - The Webs Academy
MySql Triggers Tutorial - The Webs Academythewebsacademy
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggersrehaniltifat
 
Procedures and triggers in SQL
Procedures and triggers in SQLProcedures and triggers in SQL
Procedures and triggers in SQLVikash Sharma
 
Trigger and cursor program using sql
Trigger and cursor program using sqlTrigger and cursor program using sql
Trigger and cursor program using sqlSushil Mishra
 

Destacado (20)

how to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaulthow to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vault
 
Fiziksel Standby Database Kurulum
Fiziksel Standby Database KurulumFiziksel Standby Database Kurulum
Fiziksel Standby Database Kurulum
 
Introduction to triggers
Introduction to triggersIntroduction to triggers
Introduction to triggers
 
Database Security
Database SecurityDatabase Security
Database Security
 
Db Triggers05ch
Db Triggers05chDb Triggers05ch
Db Triggers05ch
 
Using triggers in my sql database
Using triggers in my sql databaseUsing triggers in my sql database
Using triggers in my sql database
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
 
Database Triggers
Database TriggersDatabase Triggers
Database Triggers
 
PL/SQL
PL/SQLPL/SQL
PL/SQL
 
Audit Mekani̇zmasi
Audit Mekani̇zmasiAudit Mekani̇zmasi
Audit Mekani̇zmasi
 
MySql Triggers Tutorial - The Webs Academy
MySql Triggers Tutorial - The Webs AcademyMySql Triggers Tutorial - The Webs Academy
MySql Triggers Tutorial - The Webs Academy
 
Results based management
Results based managementResults based management
Results based management
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggers
 
Database Triggers
Database TriggersDatabase Triggers
Database Triggers
 
Procedures and triggers in SQL
Procedures and triggers in SQLProcedures and triggers in SQL
Procedures and triggers in SQL
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
Trigger
TriggerTrigger
Trigger
 
Introduction to triggers
Introduction to triggersIntroduction to triggers
Introduction to triggers
 
Trigger and cursor program using sql
Trigger and cursor program using sqlTrigger and cursor program using sql
Trigger and cursor program using sql
 
trigger dbms
trigger dbmstrigger dbms
trigger dbms
 

Similar a Veri̇tabani ve Kullanici Yöneti̇mi̇

İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18Cihan Özhan
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Mehmet Ince
 
İleri Seviye T-SQL Programlama - Chapter 05
İleri Seviye T-SQL Programlama - Chapter 05İleri Seviye T-SQL Programlama - Chapter 05
İleri Seviye T-SQL Programlama - Chapter 05Cihan Özhan
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şoktaygokgol
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07Cihan Özhan
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomrukoktaygokgol
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03Cihan Özhan
 
Log yonetimi tecrubeleri
Log yonetimi tecrubeleriLog yonetimi tecrubeleri
Log yonetimi tecrubeleriErtugrul Akbas
 

Similar a Veri̇tabani ve Kullanici Yöneti̇mi̇ (20)

SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18
 
Sql Injection
Sql Injection Sql Injection
Sql Injection
 
Itt
IttItt
Itt
 
Konu anlatımı
Konu anlatımıKonu anlatımı
Konu anlatımı
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
İleri Seviye T-SQL Programlama - Chapter 05
İleri Seviye T-SQL Programlama - Chapter 05İleri Seviye T-SQL Programlama - Chapter 05
İleri Seviye T-SQL Programlama - Chapter 05
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇ş
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11
 
İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07
 
Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor? Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor?
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomruk
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
 
Sunu
SunuSunu
Sunu
 
İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03
 
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirmeWeb uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
 
Log yonetimi tecrubeleri
Log yonetimi tecrubeleriLog yonetimi tecrubeleri
Log yonetimi tecrubeleri
 

Más de Anar Godjaev

Asm disk group migration from
Asm disk group migration from Asm disk group migration from
Asm disk group migration from Anar Godjaev
 
How to protect your sensitive data using oracle database vault / Creating and...
How to protect your sensitive data using oracle database vault / Creating and...How to protect your sensitive data using oracle database vault / Creating and...
How to protect your sensitive data using oracle database vault / Creating and...Anar Godjaev
 
DataPump ile Single Parititon Export
DataPump ile Single Parititon ExportDataPump ile Single Parititon Export
DataPump ile Single Parititon ExportAnar Godjaev
 
Instance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeInstance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeAnar Godjaev
 
Conditional Control
Conditional ControlConditional Control
Conditional ControlAnar Godjaev
 
Backup and Recovery
Backup and RecoveryBackup and Recovery
Backup and RecoveryAnar Godjaev
 
Oracle Managed Files
Oracle Managed FilesOracle Managed Files
Oracle Managed FilesAnar Godjaev
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)Anar Godjaev
 

Más de Anar Godjaev (20)

Oracle GoldenGate
Oracle GoldenGateOracle GoldenGate
Oracle GoldenGate
 
Asm disk group migration from
Asm disk group migration from Asm disk group migration from
Asm disk group migration from
 
How to protect your sensitive data using oracle database vault / Creating and...
How to protect your sensitive data using oracle database vault / Creating and...How to protect your sensitive data using oracle database vault / Creating and...
How to protect your sensitive data using oracle database vault / Creating and...
 
DataPump ile Single Parititon Export
DataPump ile Single Parititon ExportDataPump ile Single Parititon Export
DataPump ile Single Parititon Export
 
Contraints
ContraintsContraints
Contraints
 
Oracle SQL
Oracle SQLOracle SQL
Oracle SQL
 
Instance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeInstance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını Inceleme
 
Conditional Control
Conditional ControlConditional Control
Conditional Control
 
PL/SQL Blocks
PL/SQL BlocksPL/SQL Blocks
PL/SQL Blocks
 
Wait Interface
Wait InterfaceWait Interface
Wait Interface
 
Tuning SGA
Tuning SGATuning SGA
Tuning SGA
 
Parallel Server
Parallel ServerParallel Server
Parallel Server
 
Table Partitions
Table PartitionsTable Partitions
Table Partitions
 
Backup and Recovery
Backup and RecoveryBackup and Recovery
Backup and Recovery
 
Memory Management
Memory ManagementMemory Management
Memory Management
 
LogMiner
LogMinerLogMiner
LogMiner
 
Undo Management
Undo ManagementUndo Management
Undo Management
 
ASM
ASMASM
ASM
 
Oracle Managed Files
Oracle Managed FilesOracle Managed Files
Oracle Managed Files
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)
 

Veri̇tabani ve Kullanici Yöneti̇mi̇

  • 1. Anar Godjaev http://anargodjaev.wordpress.com/ VERİTABANI VE KULLANICI YÖNETİMİ Oracle güvenlik konusunu çok ciddi olarak ele almaktadır.Hem kullanıcılar bazında hemde system bazında yeterli seviyede korunma birimleri vardır. Bir veri tabanı ilk yaratıldığında bilinmesi gereken en önemli iki kullanıcı vardır.Biri SYSTEM diğeri SYS‟dir.İkiside veritabanını yönetmek için full haklara sahiptir.Sys kullanıcısoyla bağlanabilmek için bağlantı cümlemizin sonuna AS SYSDBA eklemek zorundayız.Dediğimiz gibi SYS ve SYSTEM arasında veritabanını yönetmek açısından hiçbir fark yoktur.Tek fark sys user‟ı sysdba haklarıyla bağlandığı için veritabanını kapatabilmekte fakat system user‟ı kapatamamktadır. İlk olarak güvenliğin en önemli prensibi olan kullanıcı yönetiminden başlamalıyız. Bir kullanıcı nasıl yaratılır ve neler önemlidir diye bakacak olursak, *Kullanıcının unique bir ismi olmalıdır.30 karakteri geçmemeli,özel karakterler kullanılmamalı yalnızca harf kullanılmalıdır. *Authentication metodu dediğimiz hangi şekilde bağlanacağı belirlenmelidir. *Kullanıcının Default data ve temp tablespace „i belirlenmelidir. *Kullanıcı için profil belirlenmeldiir. *Bir kullanıcı yaratılıp ,bu kullanıcı ile bir obje oluşturulursa artık bu kullancının bir SCHEMA „sı oluşur.Artık bundan sonra kullanıcınn objeleri değil,schemanın objeleri kavramını kullanacağız.
  • 2. Anar Godjaev http://anargodjaev.wordpress.com/ SQL >CREATE USER user_name IDENTIFIED BY password; SQL >CREATE USER deneme IDENTIFIED BY deneme; SQL > CREATE USER user IDENTIFIED {BY password | EXTERNALLY |GLOBALLY AS 'external_name'} [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [ { QUOTA {n [K|M] | UNLIMITED} ON tablespace } [, ... ] ] [PROFILE profile] } [ ... ]; Create user sysntax‟ını yazdıktan sonra 3 alternatifimiz var,ya kullanıcya password verebilir,external seçeneğini seçip işletim sistemi yada 3.party bir sevisin haklarıyla bağlandırabilir yada global seçeneğini seçip,enterprise directory service hakları ile bağlandırabiliriz. Şimdi bunun örneklerine sıra ile bakarsak, Normal bir şekilde yani password kullanarak user yaratılması şu şekildedir. SQL >CREATE USER deneme IDENTIFIED BY deneme; Bunun dışında externally yani işletim sistemi yada 3. Part tooların verdiği haklarla user yaratmak istersek,
  • 3. Anar Godjaev http://anargodjaev.wordpress.com/ İlk olarak bakmamız gereken bir paramere olan os_authent_prefix „dir. SQL> SHOW PARAMETER os_authent_prefix NAME TYPE VALUE ------------------------------------ ----------- -----------------------------os_authent_prefix string ops$ SQL> Buradaki ops$‟ın anlamı user yaratırken ön takı olarak başına ops$ koyacağımız nalmaına geliyor. Daha sonra "%ORACLE_HOME%networkadminsqlnet.ora" dosyasını açtığımızda , SQLNET.AUTHENTICATION_SERVICES= (NTS) satırının kesinlikle olması gerekmektedir. Artık veritabanı kullanıcımızı yaratabiliriz.Fakat burada ikinci olarak dikkat edeceğimiz,Windows sistemlerde eğer makinamız domain‟e bağlıysa bu domain name‟ini kullanacağız,eğer bağlı değil ise makine ismini kullancağız,unix sistemlerde buna gerek yoktur. Şimdi hem unix hemde windows istemler için örneklerimizi görelim, UNIX SQL >CREATE USER ops$USER_NAME IDENTIFIED EXTERNALLY; SQL >CREATE USER ops$DENEME IDENTIFIED EXTERNALLY; SQL >GRANT CONNECT TO ops$DENEME; -- Windows SQL >CREATE USER "OPS$domain_nameTIM_HALL" IDENTIFIED EXTERNALLY;//domain ise SQL >CREATE USER "OPS$computer_nameTIM_HALL" IDENTIFIED EXTERNALLY;//domain değilse SQL >CREATE USER "OPS$MAKINA1DENEME" IDENTIFIED EXTERNALLY; SQL >GRANT CONNECT TO "OPS$ MAKINA1DENEME "; Burada dikkat ettiyseniz user isimleri kesinlikle büyük harfle tanımlanmalıdır. Windows sistemlerde kafamız domain mi kullancam yoksa local computer name kullanacağım diye karışsın istemiyorsanız,sqlplus “/as sysdba” ile bağlandığınızda aşağıdaki sorguyu çalıştırısanız size ne şekilde bağlanmanız yada kullanıcı yaratmanız gerektiğini söyleyecektir. SQL> select UPPER(sys_context('userenv','os_user')) from dual; UPPER(SYS_CONTEXT('USERENV','OS_USER')) ------------------------------------------------------------------MAKINA1Administrator Bu işlemleri bitirdikten sonra artık işletim sistemi tarafında kullanıcı yaratmamız gereklidir.Yine aynı şekilde unix ve windows sistemler için durum farklıdır.Kullanıcı isimlerini mümkünse yine büyük harfle tanımlıyoruz.
  • 4. Anar Godjaev http://anargodjaev.wordpress.com/ Yukarıdaki örnek windows sistmeler içindir.Unix sistemlerde ise /etc/passwd altına bir user eklemek yeterlidir. Bundan sonraki adım ise hangi user‟ı yarattıysak o user ile işletim sistemine login oluyoruz.Daha sonra command‟ı açıp sadece sqlplus / yada sqplus /@service_name(bu isim tnsnames.ora daki isimdir) yazmak yeterlidir.
  • 5. Anar Godjaev http://anargodjaev.wordpress.com/ Windows sistemlerde eğer domain kullanıcılarının uzaktan bağlanabilmeleri isteniyorsa remote_os_authent parametresinin değeri TRUE olmalıdır.Default‟u false tur SQL>ALTER SYSTEM SET REMOTE_OS_AUTHENT=TRUE SCOPE=SPFILE ; SQL>SHUTDOWN IMMEDIATE ; SQL>STARTUP; Bir diğer authentication şekli olan GLOBALLY kavramına bakarsak bu tamamen enterprise directory service hakları ile bağlanmayı gerektirir.Genellikle OID dediğimiz Oracle Internet Directory yapısında kullanılır.Bunun için NETCA tanımlarında ya Oracle Internet Directory yada Microsft active directory yapısını kullanabiliriz.Önemli bir konudur fakat çok uzun anlatılması gerekir. Bunun için bir kullancı tanımına bakacak olursak, SQL>CREATE USER DENEME IDENTIFIED GLOBALLY AS 'CN=analyst, OU=division1, O=oracle, C=US' DEFAULT TABLESPACE example QUOTA 5M ON example; Authentication konusunu tamamladıktan sonra kullanıcı tanomlarken gerekli olan diğer konulara bakabiliriz. [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] Default tablespace yaratacağımız kullanıcının objelerini muhafaza etmek için hangi tablespace‟i kullanacağını belirlememize yarar.Çoğu iyi tasarlanmış sistemlerde ilk önce tablespace daha sonra kullanıcı tanımlandığı için user yaratma aşamasında rahatlıkla belirtebiliriz.Diğer‟i ise TEMPORARY olarak hangi tablespace‟i kullanacağıdır.Eğer boş bırakırsak Veirtabanının default temp tablespace‟ini kullanır ama istenirse yeni bir temp tablespace yaratılıp bu kullanıcı için kullanılsın denilebilir.Genellikle ilgili luser yaptığı sıralama işlemlerinde kullanılacaktır. Önceki gördüklerimizle bir karşılaştırma yapacak olursak,bir database‟de aktif olarak birden fazla TEMP Tablespace kullanılabilir,ama tüm kullanıcılar için undo tablespace tektir.Bunu unutmamaka gerekir. SQL>CREATE USER DENEME IDENTIFIED BY SIFRE DEFAULT TABLESPACE DENEME_TAB TEMPORARY TABLESPACE TEMP; Sırada göreceğimiz profile ve kota kavramları var, [ { QUOTA {n [K|M] | UNLIMITED} ON tablespace } [, ... ] ] [PROFILE profile] QUOTA‟nın anlamı oluşturacağımız kullanıcının ilgili tablespace üzerinde ne kadarlık bir obje barındırma hakkı olsun dediğimizde kullanıyoruz,Eğer unlimeted verirsek sınırsız olarak kullanabilir.
  • 6. Anar Godjaev http://anargodjaev.wordpress.com/ Profile ise sistem üzerinde default profiller olduğu gibi biz kendimiz profile tanımlayarak kullanıcının oturumunu yönetebiliyoruz.Örneğin kullanıcı kaç sefer yanlış şifre girdiğinde lock lansın,şifre uzunluğu ne olsun,ne kadar süre bağlı kalabilsin gibi.Bir çok senaryo mevcuttur.Gerçekten kullanışlı bir opsiyondur. Örneğin yeni bir profile oluşturma olayına bakacak olursak, Resource parameters Password parameters Yukarıda görüldüğü gibi birçok parametre baz alınarak profile tanımı yapılabilir. Veritabanı ilk kurulduğunda default isimle gelen profilin yapısı şu şekildedir. SQL > CREATE PROFILE DEFAULT LIMIT SESSIONS_PER_USER UNLIMITED CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED CONNECT_TIME UNLIMITED IDLE_TIME UNLIMITED LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED COMPOSITE_LIMIT UNLIMITED PRIVATE_SGA UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_LOCK_TIME UNLIMITED
  • 7. Anar Godjaev http://anargodjaev.wordpress.com/ PASSWORD_GRACE_TIME UNLIMITED PASSWORD_VERIFY_FUNCTION NULL; Sırayla Resource parametrelerinden başlıyarak bakacak olursak, SESSIONS_PER_USER Eşzamanlı olarak kullanıının açabileceği sssion sayısı CPU_PER_SESSION Saniyenin 100 de biri kadar biri süre içinde kullanıcının limitliyebileceği CPU zamanı. CPU_PER_CALL parse, execute, fetch gibi işlemler için Saniyenin 100 de biri kadar kullanıcya verilecek limit. CONNECT_TIME Kullanıcının bir session içinde geçirebileceği zaman ,dakika cinsinden. IDLE_TIME Uzun sorgular için kullanışlıdır,yapılan işlemin ne kadar süre bekleneceğini saniye cinsinden gösterir LOGICAL_READS_PER_SESSION Bir session içinde ne kadarlık data bloğu okunabileceğini limitler LOGICAL_READS_PER_CALL parse, execute, fetch anında ne kadarlık databloğu okunacağını limtler PRIVATE_SGA İstenirse kullanıcı için byte cinsinden özel bir SGA alanı tahsis edilebilir. Passowrd paramerelerine bakacak olursak, FAILED_LOGIN_ATTEMPTS Kullanıcın login olmadan önce lock olana kadar kaç deneme yapabileceğini gösterir PASSWORD_LIFE_TIME Gün cinsinden parolanın ne kadar süre geçerli olacağını gösterir. PASSWORD_LOCK_TIME Parolanın ne kadar gün sonra lock edileceğini belirler. SQL > CREATE PROFILE new_profile PASSWORD_LIFE_TIME 10 FAILED_LOGIN_ATTEMPTS 5; SQL > CREATE PROFILE app_user LIMIT SESSIONS_PER_USER UNLIMITED CPU_PER_SESSION UNLIMITED CPU_PER_CALL 3000 CONNECT_TIME 45 LOGICAL_READS_PER_SESSION DEFAULT LOGICAL_READS_PER_CALL 1000 PRIVATE_SGA 15K; Daha sonra ise kullanıcı tanımlarken bu profilleri kullanıcıya atayabiliyoruz.
  • 8. Anar Godjaev http://anargodjaev.wordpress.com/ SQL > CREATE USER app_user1 IDENTIFIED by oracle DEFAULT TABLESPACE example QUOTA 5M ON example PROFILE app_user; SQL > CREATE USER new_user_orakleci IDENTIFIED by oracle DEFAULT TABLESPACE example QUOTA 5M ON example PROFILE new_profile; Bunuda gördükten sonra user yaratırken iki kavram daha kalıyor ACCOUNT LOCK yada UNLOCK ve PASSWORD expire kavramı. Kullanıcı yaratırken istersek kitli yaratıyoruz,isetersek kilitsiz yaratbiliyoruz.Kilitli ise kullanıcı login olduğunda oturum kilitli lütfen kilidi açın gibi bir uyarı alınır.Kullanıcı kendi kilidini açamayacktır.Bunu yetkili bir başka kullanıcı açtıktan sonra kilitli kullanıcı artık bağlanabilecektir.Bu paramrenin default‟u UNLOCK olarak tanımlıdır. Pasword expire seçeneğini aktif hale getirisek kullanıcı login olduğunda şirefsini değiştirmesi istenecek ve kullanıcıda bunu değiştirecektir. SQL> create user deneme identified by deneme password expire; SQL>connect deneme/deneme ERROR: ORA-28001: the password has expired Changing password for deneme New password: Yukarıdaki örnekte görüldüğü gibi kulalncıdan yeni şifre girmesi istenmiştir. Alttaki örnek ise kilitli olarak yaratılan bir kullanıcının nasıl kullanılacağı ile ilgilidir.Kullanıcı kilitlidir ve bağlanmak istediğinde hata almıştır.Başka bir yetkili kullanıcıyla bu kilidi açıyoruz ve kullanıcı tekrar denediğinde artık bağlanabiliyor. SQL> create user deneme identified by passw0rd account lock; SQL>connect deneme/passw0rd ERROR: ORA-28000: the account is locked SQL>alter user deneme account unlock; SQL>connect deneme/passw0rd Connected. Buraya kadar anlatılan işlemlerle bir kullanıcının nasıl yaratılacağını gördük.Peki oluşturulan kullanıcı sisteme nasıl bağlanıyor diye bakacak olursak.
  • 9. Anar Godjaev http://anargodjaev.wordpress.com/ $sqlplus kullanici/sifre [as sysdba/sysoper] Örneğin denem isimli bir kullanıcı ve şifresi deneme_sifre olan bir kullanıcı ile bağlanmak isteyelim. $sqlplus deneme/deneme_sifre Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP and Data Mining options SQL > Bağlantı bu şekilde sağlanacaktır.Peki buradaki as sysdba yada as sysoper nedir diye bakacak olursak.SYSDBA hakkı sistemde sysdba hakkına sahip olan kullanıcların bağlanma şeklidir.Bu hakka SYS kullanıcısı sahiptir.SYS kullanıcısı SYSDBA opsiyonu dışında normal olarak bağlanamaz.SYSDBA ile bağnalıldığında sistem üzerinde yapılamayack işlem yoktur.Her kullanıcı SYSDBA opsiyonu ile bağlanamaz sadece bu hakka sahip olanlar bağlanabilir.Bu hakta SYSDBA hakkına sahip olan bir kullanıcı ile başka bir kullanıcıya şu şekilde verilir. SQL > grant sysdba to kullanici_adi; Şimdi SYSDBA hakkı ile SYSOPER arasında ne gibi farklar var diye bakacak olursak, SYSDBA STARTUP ve SHUTDOWN işlemini gerçekleştirebilir. ALTER DATABASE komutu ile beraber : open, mount, back up, yada change character set yapabilir. CREATE DATABASE yapabilir. DROP DATABASE yapabilir. CREATE SPFILE yapabilir. ALTER DATABASE ARCHIVELOG yapabilir. ALTER DATABASE RECOVER yapabilir. SYSOPER STARTUP ve SHUTDOWN işlemini gerçekleştirebilir. CREATE SPFILE yapabilir. ALTER DATABASE OPEN/MOUNT/BACKUP yapabilir. ALTER DATABASE ARCHIVELOG yapabilir. ALTER DATABASE RECOVER (Yalnızca tam recovery dediğimiz işlemi yapabilir. INCOMPLATE RECOVERY dediğimiz UNTIL TIME|CHANGE|CANCEL|CONTROLFILE işlemlerini yapamaz,bunları yapabilmek için SYSDBA olmak gereklidir.) Görüldüğü üzere aralarında birkaç ciddi fark vardır. Bazen dikkat edilirse işletim sisteminden aşağıdaki komutu kullanarak kullanıcı adı şifre girmeden ama sysdba yada sysoper ile veritabanına connect olabilmekteyiz.Peki bu nasıl olmaktadır. Mesela, $ sqlplus “/as sysdba” yazdığımızda bağlanabilmekteyiz.Bunu yapabilmemizi sağlayan işletim sistemine connect olduğumuz kullanıcının windows sistemlerde ORA_DBA unix sistemlerde ise DBA grubuna dahil olmasınla olur.sysoper için ise windows sistemlerde ORA_OPER ,unix sistemlerde OPER grubu ile gerçekleşmektedir.Bu gruba dahil olunmayan işletim sistemi kullanıcılarınla bağlanıldığında bu işlemi gerçekleşitiremeyiz.
  • 10. Anar Godjaev http://anargodjaev.wordpress.com/ Peki bunun dışında uzaktaki bir sistemden bir veritabanına / as sysdba haklarıyla nasıl bağlanırız diye bakacak olursak bu biraz daha farklıdır. Buna Oracle dilinde REMOTE_LOGIN_DATABASE diyoruz. SQL > CONNECT /@net_service_name AS SYSDBA SQL > CONNECT /@net_service_name AS SYSOPER Yukarıdaki bağlantı şekliye bağlanabilmemiz için veritabanı üzerinde çeşitli parametrelerin aktif olması gereklidir. REMOTE_LOGIN_PASSWORDFILE adını verdiğimiz parametrenin değerinin EXCLUSIVE olması gereklidir.Veritabaında default olarak bu şekildedir fakat NONE yada SHARED ise bu değere set edilmesi gereklidir. Tabi ki bunu yapmakta yetmeyecektir bunun dışında Passwordfile adını verdiğimiz bir file vardır.Bu file‟ın yaratılmış ve düzgün ayarlanmış olması gereklidir.Eğer yoksa şu şekilde ayarlayabiliriz. $ ORAPWD FILE=filename PASSWORD=password ENTRIES=max_users force=<y/n> Buradakilerin anlamı, FILE = Passord file‟ın ismi,direk olarak dosya ismi verilebileceği gibi bir path‟le de birlikte verilebilir.Girilmesi zorunludur. PASSWORD=sys user‟ı için password belirlenir.Eğer daha öneden bir password file‟ımız var ve kullanılıyorsa ALTER USER komutu ile sys kullanıcısının şifresini değiştirdiğimizde password file danda şifre güncellenir.İlk defa password file yaratacaksak burada verdiğimiz şifre veritabanı içinde geçerlidir.Girilmesi zorunludur.Eğer veritabanı üzerinde REMOTE_LOGIN_PASSWORDFILE parametresi SHARED ise sys kullanıcısının şifresi değiştirilemez. entries – Farklı olarak DBA yada operlardan max ne kadar kabul edileceği force – Mevcut dosyanın üzerine yazılıp yazılmayacağı Dikkat edilmesi gereken = karakterlerinden sonra boşluk olmamalıdır. Veritabanı üzerinde REMOTE_LOGIN_PASSWORDFILE parametresi için üç tip bilgi set edileebilir.Bunlar ve özelliklerine bakacak olursak, NONE: parametre değerinin bu şekilde olması ile güvenli olmayab hiçbir bağlantıya izin verilmeyecektir. EXCLUSIVE: Parametrenin bu değeri ile password file „ın ve içindeki kullanıclarla güvenli şekilde bağlanabileceği anlamına gelir. SHARED: Genellike birden fazla instance „ın olduğu RAC sistemlerinde kullanılır.Aslında amaç password file‟ın paylaşılmasıdır.Hiçbir şekilde SYSDBA yada SYSOPER hakkına sahip kullanıcıların(sys dahil) şifresi değiştirilemez,yeni Özel haklara sahip olacak(SYSDBA,SYSOPER) kullanıcı eklenemez.Yapabilemk için parametreyi EXCLUSIVE‟e çevirmeli işimiz bitiiğinde tekrar SHARED konumuna alınabilir.
  • 11. Anar Godjaev http://anargodjaev.wordpress.com/ Veritabanına yeni bir SYSDBA yada SYSOPER hakkına sahip olacak kullanıcı eklendiği zaman otomatik olarak password file‟a yazılır. Password file içinde tanımlı kullaıcılar ve haklarını görmek için V$PWFILE_USERS view‟ı kullanılabilir. Şimdi artık kullanıcılarımızı düzgün şekilde yarattığımıza gore kullancıların sisteme ve system objelerine hangi haklarla bağlandığına ve bu hakların nasıl ayarlandığına bakabiliriz. Bu hakların ilk adımı olan privileges kavramına bakabiliriz.Privileges system privileges ve objects privileges olarak ikiye ayrılır. System privileges system üzerinde bazı işlemleri yapabilmeyi kullanıcılara sağlar.Başlıca privilegeslara bakacak olursak, – CREATE SESSION = En önemli haklardan biridir,bu hakka sahip olmayan bir kullanıcı veritabanına bağlantı kuramaz. – CREATE TABLE = Kendi Scheması ve tablespace‟I dahilinde tablo yaratabilme iznidir. – CREATE ANY TABLE = Kendi scheması ve diğer schemalar için tablo yaratabilme iznidir.Bir iznin önünde ANY varsa kendi scehamsı ve diğer schemalar içinde anlamına gelir. – CREATE SEQUENCE = Artan sırada ardaşık sayı grubu oluşturmak için gereken haktır. – CREATE VIEW = View oluşturabilmek için gereken haktır. – CREATE INDEX = Index oluşturabilmek için gerekli haktır. – CREATE PROCEDURE = Kendi scheması içinde procedure oluşturabilmek için gerekli haktır. – CREATE ANY PROCEDURE = Kendi scheması ve diğer schemalarda procedure oluşturabilmek için gerekli haktır. – CREATE ROLE = Role yaratabilmek için gerekli haktır. – CREATE USER = Kullanıcı yaratabilmek için gerekli haktır. – CREATE TRIGGER = Trigger yaratabilmek için gerekli haktır. – CREATE PROFILE = Profile yaratabilmek için gerekli haktır. – ALTER USER = Kullanıcı ile ilgili değişiklik yapacağımız zaman gerekli olan bir izindir. – ALTER ANY TABLE = Tablolarla ilgili bir değişiklik yapacağımız zaman gerekli olan bir izindir. – DROP ANY TABLE = bir tabloyu sileceğimiz zaman gerekli olan bir izindir. – EXECUTE ANY PROCEDURE = Bir prosedürü çalıştırabilmek için gerekli haktır. – SELECT ANY TABLE = Kendi scheması ve diğer schemalar için sorgulama yapabilme iznidir. Burada örnek olarak verdiğimiz izinlerin dışında yaklaşık olarak 160-170 arası system izinleri vardır.Bu İzinler nelerdir diye görmek istersek, SQL >select distinct(PRIVILEGE) from Dba_sys_privs order by PRIVILEGE; Sorgusunu kullanabiliriz. Şimdide bu hakların kullanıclara nası verildiğine bir bakarsak, SQL >create user deneme identified by deneme; SQL >grant create session to deneme; SQL >grant create table to deneme; $ sqlplus deneme/deneme Connected
  • 12. Anar Godjaev http://anargodjaev.wordpress.com/ SQL> create table hh(aa varchar2(20)); Table created. SQL> create table baska_schema.hh(aa varchar2(20)); create table baska_schema.hh(aa varchar2(20)) * ERROR at line 1: ORA-01031: insufficient privileges Görüldüğü gibi başka bir kullanıcının schemasına obje yaratmak istediğimizde hata aldık.O yüzden yetkili bir kullanıcı ile deneme kullanıcısına CREATE ANY TABLE hakkı verip tekrar deniyoruz. SQL >exit; $ sqlplus “/as sysdba” Connected SQL >grant create table to deneme; SQL >exit; $ sqlplus deneme/deneme Connected SQL> create table baska_schema.hh(aa varchar2(20)); Table created. Görüldüğü gibi bu örnekten ANY ile ve ANY siz olarak izinlerin farkını anlayabiliriz. Bir kulalncıya toplu olarak system izinlerini vermek istiyorsak, SQL >grant create table,alter any table,drop user,execute any procedure to deneme; Şeklinde kullanabiliriz. Buraya kadar anlatılanlar system üzerinde var olan izinlerdi,bir diğer izin şeklide obje privilige‟I olarak adlandırıyoruz.Oda şu şekilde oluyor,Örneğin bizim kullanımızın ismi firstu olsun,başka bir kullanıcı daha belirleyelim onun ismide secondu olsun.Normalde eğer obje izinleri yoksa bir kullancı başka bir kullancının objelerine erişemez.Şu şekidle bir örnekle anlatmaya çalışırsak. 1)İlk olarak yetkili bir kullancı ile sisteme bağlanıyoruz $ sqlplus "/as sysdba" SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 15:42:07 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  • 13. Anar Godjaev http://anargodjaev.wordpress.com/ With the Partitioning, OLAP and Data Mining options 2)İlk kullanıcımızı yaratıyoruz. SQL> create user firstu identified by firstu; User created. 3)Kullanıcıya sisteme bağlanabilmesi için create session hakkı veriyoruz. SQL> grant create session to firstu; Grant succeeded. 4)Daha sonra ikinci kullanıcımızı yaratıyoruz. SQL> create user secondu identified by secondu; User created. 5)İkinci kullanıcıya tablo yaratbilme hakkı olan create table,oturum açabilme hakkı olan create session ve bağlı olduğu tablespace’te yazabilme hakkı olan resource veriyoruz. SQL> grant create session,create table,resource to secondu; Grant succeeded. 6)sqlplus tan çıkmadan ikinci kullanıcı ile bağlanıyoruz. SQL> conn secondu/secondu; Connected. SQL> show user USER is "SECONDU" 7)ikinci kullanıcı ile bir tablo yaratıp içine bir staırlık bir bilgi giriyoruz. SQL> create table xx(aa varchar2(5)); Table created. SQL> insert into xx values ('HH'); 1 row created. SQL> commit; Commit complete. 8)Daha sonra birinci kullanıcı ile bağlanıyoruz sqlplus tn çıkmadan. SQL> conn firstu/firstu; Connected. SQL> show user
  • 14. Anar Godjaev http://anargodjaev.wordpress.com/ USER is "FIRSTU" 9)Aşağıdaki sorguyu çalıştırmasını istiyoruz,kullanıcı bunu çalıştıryor fakat hata alıyor çünkü birinci kullanıcının ikinci kullanının tablosunda select izni yok. SQL> select * from secondu.xx; select * from secondu.xx * ERROR at line 1: ORA-00942: table or view does not exist 10)İkinci kullanıcı ile bağlanıp kendi tablosuna birinci kullanıcının bağlanıp select yapabilmesi için gerekli izni veriyoruz. SQL> conn secondu/secondu Connected. SQL> show user USER is "SECONDU" SQL> grant select on xx to firstu; Grant succeeded. 11)birinci kullanıcı ile tekrar bağlanıp aynı sorguyu tekrar denediğimizde artık select yapabildiğimizi görüyoruz. SQL> conn firstu/firstu Connected. SQL> show user USER is "FIRSTU" SQL> select * from secondu.xx; AA ----HH 12)Bu sefer birinci kullanıcı ile ikinci kullanıcının tablosuna insert yapmayı denedğimizde hata alıyoruz bunun sebebide birinci kullanıcının ikinci kullanıcının tablsounda insert yapmaya hakkı olmadığını görüyoruz. SQL> insert into secondu.xx values ('JK'); insert into secondu.xx values ('JK') * ERROR at line 1: ORA-01031: insufficient privileges 12)Bu sefer ikinci kullanıcı ile bağlanıp hem insert hemde delete hakkı verip bu işi bitiriyoruz.Denemesinide size bırakıyorum. SQL> conn secondu/secondu Connected. SQL> show user USER is "SECONDU" SQL> grant select,insert,delete on xx to firstu;
  • 15. Anar Godjaev http://anargodjaev.wordpress.com/ Obje ve system bazında nasıl izinlerin verildiğini gördük ,komutumuz grant idi,peki verilen izinleri geri almak istersek ne yapmamız gerekir,bunun komutuda REVOKE tur. Örnek olarak bakarsak, SQL>revoke create any table from deneme1; SQL>revoke execute any procedure from deneme; SQL>revoke select on xx from firstu; Kullanım şekli yukarıda görüldüğü kadar basittir. Obje ve system izinlerini gördük,bunları kullanmak aslında hiç te kolay değil,bunları tek tek kullanıcılara vermek biraz zahmetli olabilir.Oracle‟I yazanlar role diye bir kavram düşünmüşler.Örneğin bir şirketimiz var,yaklaış 100 adet kullanıcı olsun,ve şirketin 5 departmanı olsun.Bu 5 departmanın görevleri farklı olsun ama aynı departmanda çalışanların görevleri aynı olsun.Şimdi Oracle‟da bu 100 kullanıcyı yaratıp her kullanıcı için tek tek bu izinleri vermek zahmetli olabileceği gibi gözden kaçacak şeylerde olabilir.İlerleyen günlerde bu 100 kullancıya yeni bir görev vermek istersek tek tek yazmamız gerekir.Yada kullanıcı departman değiştirecekse once bütün hakları geri alıp daha sonra diğer departmanın haklarını vrmek gerekir. Bunun çok zahmetli olacağı bellidr.Onun için ROLE denen kavramı kullanmak daha akılcıdır. Privillege larda olduğu gibi role lar içinde system tarafından hazırlanmış olan ROLE ler ve bizim tanımlayacağımız olan ROLE ler mevcuttur. Örneğin system tarafından hazırlanmış ROLE‟ler nelerdir diye bakacak olursa birkaç örnekle üzerinden geçebiliriz. CONNECT = içinde connect session iznini barındırır. DBA = Hemen hemen tüm izinleri bünyesinde barındırır.Bu role‟e sahip olan kullanıcı hemen hemen herşeyi yapabilir.O yüzden çok tehlikelidir. RESOURCE = Bu ise içinde CREATE TABLE,CREATE TYPE.. gibi iznleri barındırır.Bu roel önemlidir zira ilgili tablespace üzerind eyazma yapabilemk için gereklidir. Peki bir system role‟ü kullanıcya nasıl verilir.
  • 16. Anar Godjaev http://anargodjaev.wordpress.com/ SQL> grant connect,resource to deneme; Kullanımı aynı privillege‟ta olduğu gibidir.Peki system role‟lerinin dışında kendimize ait role nasıl tanımlayabiliriz diye bakarsak ilk olarak kullanıcının ihtiyacı olan create role hakkına sahip olmasıdır.Bunun dışındakileri bir örnekle sıralayacak olursak, 1-)İlk olarak yetkili bir kullanıcı ile bağlanıyoruz. $ sqlplus "/as sysdba" SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 17:15:37 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP and Data Mining options 2-)Daha sonra bir kullanıcı yaratıyoruz. SQL> create user newu identified by newu; User created. 3-)Kullanıcıya çeşitli role ler için hak tanımlıyoruz. SQL> grant connect,resource,create role,create user,create procedure to newu; Grant succeeded. 4-)Tanımladığımız kullanıcı ile bağlanıp ,bu kullanıcı ile yeni bir role yaratıyoruz. SQL> conn newu/newu Connected. SQL> show user USER is "NEWU" SQL> create role newrole; Role created. 5-)Daha sonra kullanıcımız ile sahip olduğumuz haklardan iki tanesini role’e atamak istiyorz fakat hata alıyoruz.Bunun sebebi kullanıcı o haklara sahip fakat sahip olduğu hakları başka bir role’e yada kullanıcıya atama hakkına sahip değil.Bunuda şu şekilde hallediyoruz. SQL> grant create user,create procedure,connect to newrole; grant create user,create procedure to newrole * ERROR at line 1: ORA-01031: insufficient privileges
  • 17. Anar Godjaev http://anargodjaev.wordpress.com/ 6-)Ytekili sys kullanıcısı ile bağlanıp newu userına sahip olduğu hakları dağıtabilmesi için admin option veriyoruz. SQL> exit Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Pr oduction With the Partitioning, OLAP and Data Mining options $ sqlplus "/as sysdba" SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 14 17:18:49 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP and Data Mining options SQL> grant create user,create procedure,connect to newu with admin option; Grant succeeded. 7-)Aynı işlemi newu user’I ile tekrar denediğimizde işlemin başarılı olduğunu görüyoruz.Artık newu user’I bir role oluşturdu ve sahip olduğu izinleri bu role’e atayabildi. SQL> conn newu/newu Connected. SQL> show user USER is "NEWU" SQL> grant create user,create procedure,connect to newrole; Grant succeeded. SQL> show user USER is "NEWU" 8-)Daha sonra newu user I ile yeni bir kullanıcı tanımlıyoruz ve tanımlanan role’U yeni tanımlanacak kullanıcya atıyoruz. SQL> create user xxu identified by xxu; User created. SQL> grant newrole to xxu; Grant succeeded. 9-)Aşağıdaki sorgularla NEWU ve XXU kullanıcları için sahip olunan privilege ve role’leri görebiliriz.
  • 18. Anar Godjaev http://anargodjaev.wordpress.com/ SQL> select * from user_sys_privs where username = 'NEWU'; USERNAME -----------------------------NEWU NEWU NEWU NEWU PRIVILEGE ADM ---------------------------------------- --CREATE USER YES UNLIMITED TABLESPACE NO CREATE ROLE NO CREATE PROCEDURE YES SQL> conn xxu/xxu; Connected. SQL> select * from user_sys_privs where username = 'XXU'; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --XXU CREATE SESSION NO SQL> select * from user_role_privs where username ='XXU'; USERNAME GRANTED_ROLE ADM DEF OS_ ------------------------------ ------------------------------ --- --- --XXU NEWROLE NO YES NO SQL> conn newu/newu Connected. SQL> select * from user_role_privs where username ='XXU'; no rows selected Bu komutlar dışında çeşitli alter komutlarıyla kullanıcılar için işlemler yapabiliriz. Örneğin bir kullanıcının şifreisni değiştirmek istedik diyelim. SQL > alter user newu identified by yeni_sifre; Yada bir kullanıcıyı lock layalım yada lock‟ını kaldıralım.
  • 19. Anar Godjaev http://anargodjaev.wordpress.com/ SQL > alter user newu account lock; SQL > alter user newu account unlock; Kullanıcının default tablespace‟ini değiştirmek isteyelim. SQL > alter user newu default tablespace DENEME; Bunun dışında birçok etkili komut kullanılıp denenbilir. Bunların dışında en dikkat edeceğimiz konulardan biride SYS schemasına ait data dictionary dediğimiz objelerin UPDATE edilememsidir.bu tablolara dokunulmasını istemiyorsak O7_DICTIONARY_ACCESSIBILITY adlı parametrenin değerini FALSE olarak ayarlamalıyız.