• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Veri̇tabani ve Kullanici Yöneti̇mi̇
 

Veri̇tabani ve Kullanici Yöneti̇mi̇

on

  • 253 views

 

Statistics

Views

Total Views
253
Views on SlideShare
240
Embed Views
13

Actions

Likes
0
Downloads
3
Comments
0

2 Embeds 13

http://anargodjaev.wordpress.com 12
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Veri̇tabani ve Kullanici Yöneti̇mi̇ Veri̇tabani ve Kullanici Yöneti̇mi̇ Document Transcript

    • 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.