User Oluşturma ve Güvenliği:
Database User Hesapları:
Kullanıcı hesabının ne işe yaradığını bilmeyen yoktur diye düşünüyorum. Database kendisine verilen haklar doğrultusunda bağlanabilen hesaplardır.
1- Kullanıcı adı “Unique” tek olmalıdır. Çünkü kullanıcı oluştururken aynı zamanda şemasınıda oluştururuz.
2- Bir authentication (Kimlik Doğrulama) metodu olmalıdır. Ki en yaygın kullanılan Kimlik Doğrulama metoduPASSWORD (parola)dır. Oracle 11G password metodunun yanında Global ve External Kimlik doğrulamayı da destekler.
3- Default bir tablespacei olmalı
4- Temporary işlemler yapabiliyor olması lazım
5- Çeşitli kısıtlamalar getirilmeli.
6- Kullanıcılar consumer gruplara dahil edilmeli.
7- Ya unlock olcak yada lock olur başka bir seçenek yok.
Shemalar (Şemalar): Kullanıcının sahip olduğu şeması vardır. Şema = kullanıcıdır. Yani kullanıcı ile şema aynı şeydir diyebiliriz. Kullancının oluşturduğu objelerin saklandığı kısımdır. Mantıksal bir kavramdır.
Önceden Tanımlanmış Yönetimsel Hesaplar:
Database kurulurken oluşturulan hesaplardır.
Ø SYS: Bu kullanıcı için veri tabanının sahibidir diyebiliriz. Database üzerinde her türlü hakka sahiptir. Kullanıcılara admin opsiyonu ile yetki verebilir. Yani admin opsiyonu ile yetki vermek derken create table yetkisini bir kulalıcıya admin option ile verirsek o kullanıcı da başka bir kullanıcıya create table yetkisi verebilir. işte bu yetkiyi verebilen kullanıcı sys kullanıcısıdır.
Ø SYSTEM: Database üzerinde yetkili bir kullanıcıdır. SQL Manager tarafında herhangi bir şekilde export /inport işlemi yapmak istersek SYS kullanıcısı bu işi yapmazken SYSTEM kullanıcısı yapar.
Ø DBSNMP: Bizim için çokda önemli bir kullanıcı değildir. Enterprise Manager kullanıcısıdır. Enterprise Manageri monitör eder. Enterprise manager tarafında zorunlu kullanıcıdır.
Ø SYSMAN: Buda bizim için çok önemli bir kullanıcı değildir. DBSNMP gibi Enterprise Manager kullanıcısıdır. MGMT_USER, RESOURCE, ve SELECT_CATALOG_ROLE haklarına sahiptir. Enterprise manager tarafında zorunlu kullanıcıdır.
Bazen şifreler expire olur. DBSNMP ve SYSMAN kullanıcısının şifreleri expire olursa Enterprise Manager kesinlikle çalışmaz.
User Oluşturma:
Bir kullanıcı oluşturmak için SQL*PLUS ya da Enterprise Manager kullanılır. Daha öncesinde SQL*PLUS üzerinden oluşturmayı göstermiştik. Şimdi Enterprise Manager üzerinden anlatayım. Enterprise Manager üzerinden oluşturmak için;
Enterprise Manager Anasayfasında bulunan Server tabının altında Securitynin altında Usersa geliriz.
Yukarıda karşımıza gelen sayfada kullanıcılarımızı görebiliriz. Kullanıcılar ile ilgili bir çok ayar ve konfigürasyonu yapabileceğimiz sayfadır. Biz kullanıcı oluşturacağız. Bu yüzden Create diyerek devam edeceğiz.
1. Name: Kullanıcı adı gireriz.
2. Profile: Kullanıcılara passwordünün komplex olması gibi kısıtlamalar getirilebilir.
3. Authentication metodu olarak: Pasword seçiyoruz. Password seçtiğimizde bir parola girmemiz gerekecek. Eğer istersek yine aynı açılır menüden External seçeneğini seçebiliriz. External’ın amacı işletim sistemindeki İsmail isimli kullanıcı ile authentication olur. Ve işletim sistemi tarafındaki kullanıcının şifresi ile bağlanabilecektir. Birde Global olarak bir seçenek var. Global ise LDAP gibi tekli bağlantılar oluşturmak için kullanılabilir. Yani Active Directory yapısı olan bir yerde active directory ile bağlantı kurarak veri tabanında da kullanıcı oluşturulur.
4. Enter/Confirm password: parola girilir.
Başka hiçbir işlem yapmadan ok diyorum. Yukarıdaki sayfada geri kalan konfigürasyon ise password süresini expireedebilir, default bir tablespace atayabilir ve temporary dosyasını farklı atayabiliriz. Ve kullanıcı oluşurulmuş oluyor. SQL*PLUS ile kullanıcı oluşturmak ile Enterprise Manager ile oluşturmanın arasında fark vardır. SQL*PLUS ile oluşturunca create session yetkisi vermemişsek SQL*PLUS ile oluşturduğumuz kullanıcı session açamayacaktır. Ancak Enterprise Manager üzerinde kullanıcı oluşturduğumuzda Connet rolünü otomatik atar. Connet rolü içinde isecreate session hakkı vardır.
Enterprise Manager üzerinde kullanıcı oluştururken Show sql dediğimizde göreceksinizki üstteki gibi bir sql sorgusu çıkacaktır. İncelediğimizde connect hakkıyla beraber atadığını görmekteyiz.
Eğer kullanıcıyı doğrudan sql developer ya da sqlplus ile oluşturacaksak SYSDBA hakkına sahip olan kullancı ile bağlandıktan sonra ki biz SYS kullancıısı ile bağlanıyoruz. Oracle kesinlikle SYS kullanıcısının gerekmediği sürece kullanılmasını önermez. SYS yerine SYSDBA haklarına sahi bir kullanıcı oluşturarak o kullanıcının kullanılmasını önerir. SYS kullanıcısı ile bağlanarak aşağıdaki gibi komut yazılır.
CREATE USER kullanıcı_adı IDENTIFIED BY kullanıcı_parolası;
|
Örnek olarak,
CREATE USER Mehmet IDENTIFIED BY password;
|
Mehmet isminde bir kullanıcı oluşturduk ve parolasını password olarak belirlemiş olduk. Ancak kullanıcıyı oluşturduktan sonra kullanıcının session açabilmesi için create session hakkına sahip olması gerekmekte. Bu hakkı atamak için.
GRANT CREATE SESSION TO Mehmet;
|
Mehmet kullanıcısı artık session açabilecek hakka sahiptir. Ancak session açtıktan sonra bu kullanıcının yetkiye sahip olduğu objelere yada sistem haklarını bilmemiz gerekmekte. Kullanıcının neye hakkı olduğunu öğrenmek için Mehmet kullanıcısı ile sqlplus yada sql developer’dan session açılır ve aşağıdaki sorgu çalıştırılır.
SELECT * FROM USER_TABLES;
|
Sonuç olarak hiçbir tablo görünmemesi lazım eğer sqlplus üzerinden denediyseniz no rows selected sonucunun dönmüş olması gerekecektir. Çünkü hiçbir obje üzerinde hakka sahip değil. Ancak USER_TABLES yerine ALL_TABLESeklersek o zaman yetkili olduğu tablolar olacaktır. Ancak bu tablolar DUAL gibi tablolardır.
Kullanıcıya bir obje üzerinde hak ataması yapmak için SYS kullanıcısı ile oturum açarız ve aşağıdaki komut çalıştırılır.
GRANT SELECT ON hr.employees TO Mehmet;
|
HR kullanıcısının Employees tablosuna (HR.EMPLOYEES) select atma hakkı vermiş olduk. Şimdi Mehmet kullanıcısı ile session açtıktan sonra HR.EMPLOYEES tablosuna select atabiliriz. Select * from hr.employees; gibi.
Authentication metodu olarak password haricinde external ve global seçenekleri vardır. Bu diğer iki seçenek göz retina taraması, parmak izi taraması, ses taraması gibi özellikleri kullanmamızı sağlar ancak bu özellikleri kullanmak için 3. Party yazılım almamız gerekmektedir.
Kullanıcı Hakları:
Kullanıcılara iki çeşit hak atanabilir. System (sistem) ve Object (obje) hakları.
System Hakları:
Database üzerinde yapılacak işlemler için verilen haklardır. Örneğin create tablespace hakkı bir sistem hakkıdır.System hakları sadece administrator tarafından verilir. Ya da administrator’ın sistem hakkı verebilir yetkisi verdiği kullanıcılar tarafından verilebilir. 170 den fazla sistem hakkı var. Object Hakları:
Tablo, view, sequence, procedure, function ve package gibi objeler üzerinde işlemler gerçekleştirebilmek için kullanıcılara verilen haklardır. Kullanıcı kendi oluşturduğu objelere başka bir hakka ihtiyacı olmaksızın erişebilir. Acnak tabiki kullanıcının yine belirli bir hakka sahip olması gerekir. Bir başka kullancının tablosu üzerinde hak sahibi olmazsa ona oluşamaz. Ayrıca kendi bir tablo oluşturabilmesi için öncelikle bir system hakkı olan create tablehakkına sahip olması gerekmekte.
System haklarını Enterprise Manager üzerinden gösterelim. Enterprise Manager üzerinden Users sayfasına gelelim.
Enterprise Manager Üzerinde System Hakkı Verme:
Server tabında Users seçerek geldiğimiz kullanıcıların bilgilerini görebileceğimiz yukarıdaki pencerede bir kullanıcıyu sçerek işlemler gerçekleştirebiliriz. Bu işlemler Oluşturma script’ini kullanarak yenisini oluşurma (create like), Parolasını expire etmek (Expire password), DDL’ine bakmak (Generate DDL), kullanıcıyı Lock (Lock user) etme ve unlock etme (Unlock User) gbi işlemleri Actions açılır menüsünden seçerek yapabiliriz. HR kullanıcısını seçerekedit diyelim.
Karşımıza çıka edit sayfasında da system privileges tabına geçelim. Bu tabda kullanıcının sahip olduğu sistem haklarını görmekteyiz. Sistem hakları hangileridir diye sorarsak? Create, Alter, Drop genelolarak sistem hakkıdır. Kısace DML obje, DDL’ler ise sistem hakkıdır diyebiliriz. Soğ taraftaki admin option sütunu, yani admin option hakkı seçili kullanıcıya verilirse o sistem hakkını başka kullanıcılara verme hakkına sahip olacaktır. Örneğin HR kullancıısı için Create session hakkına admin option kutucuğunu işaretlersek, HR kullanıcısı başka kullanıcılara create session hakkı verme yetkisine sahip olacaktır. Edit list butonunu tıklayarak devam edelim.
HR kullanıcısı için istersek yukarıdaki pencereden yeni haklar atayabiliriz. Available system privileges (mevcut sistem hakları) bölümünden vermek istediğimiz hakkı seçer ortadaki move (taşı) butonunu tıklarız ve kullanıcya atamak istediğimiz hak selected system privileges bölümüne yani kullanıcının sahip olduğu haklara geçmiş olur. Kaldırmak içinse tersi uygulanır. SQL*PLUS üzerinden bu hakkı aşağıdaki gibi verebiliriz.
SQL> grant alter_any_cluster to hr;
|
Eğer HR kullanıcısına bu hakkı verirken başka kullanıcılarada bu hakkı HR verebilsin istersek o zaman with admin option yazmamız gerekir.
SQL> grant alter_any_cluster to hr with admin option;
|
En sondaki admin option seçeneği ile HR kullanıcısı bu hakkı başka kullanıcılarada verebilecektir.
Enterprise Manager Üzerinde Obje Hakkı Verme:
Az önce system privileges (sistem hakları) tabındaydık, şimdi onun bir yanındaki object privileges (obje hakları) tabına geçelim.
Object privileges tabında kullanıcılara objeler üzerinde verkem istediğimiz hakkı verebiliriz. Select object typekısmından ne tür bir objeye hak vereceksek onu seçer ve add butonunu tıklarız. Bir tablo üzerinde hak vermek içinTable seçeriz ve Add butonuna basarız.
Bir objects (objeler) seçmek için istersek select table object kısmına elle yazarız istersek fener işaretini tıklayaraktable objelerinden seçimler yaparız. Sonrasında Available Privileges (mevcut haklar) bölümünden vermek istediğimiz hakkı seçeriz ve move butonuna basarak hak verme işlemini ok butonuna basarak bitiririz.
Obje haklarını SQL*PLUS ile vermek istersek syntaxı aşağıdaki gbidir.
SQL> grant <verilecek obje hakkı> on <object> to <hak verilecek kullanıcı ya da rol> [with grant option]
|
Admin Option ile verilmiş olan Sistem Haklarını Geri almak:
-Grant komutu ile atanan sistem hakları SQL ifadesinde REVOKE komutu ile kaldırılır. Bir kullanıcıya grant komutu kullanılarak admin option ile atanan bir hakkı, admin option ile hak atanan kullanıcı başka bir kullanıcıya da atayabilir.
–Üstteki resmi göz önüne alırsak; DBA, İsmail kullanıcısına bir admin option ile create table hakkı vermiş İsmailkullanıcıda Ahmet kullanıcısına create table hakkı atayabilmiş. İsmail kullanıcısının Ahmet kullanıcısına create tablehakkı verebilmesinin nedeni, DBA’in İsmail kullanıcısına creata table hakkını admin option ile vermiş olmasıdır.
-Admin option ile hak atandıktan sonra admin option ile hak atanan kullanıcıdan create table hakkını alsak dahi, o kullanıcının, başka bir kullanıcıya verdiği hakkı alamayız.
–Üstteki resmin alt tarafında bir revoke işlemi yapılmış. Ve İsmail kullanıcısından create table hakkı geri alınmış. Ancak İsmail kullanıcısı Ahmet kullanıcısına create table hakkı vermişti, görüldüğü gibi İsmail kullanıcısından hak alınmasına rağmen Ahmet kullanıcısında hak halen devam ediyor.
Grant Option ile Verilen Object Haklarını Geri Alma:
System haklarını admin option olarak verebiliyorduk. Obje haklarında ise grant option hakkı var. Yani system haklarındaki admin optionun yaptığı görevi objer üzerinde de grant option aynı görevi yapar. Grant option ile kullanıcıya hak ataması yaparsak o kullanıcı da başka kullanıcılara o hakkı atayabilir.
Yukarıdaki resmi incelersek, DBA mesela İsmail kullanıcısına grant option ile select hakkı vermiş olsun. İsmailkullanıcısıda Ahmet kullanıcısına hakkı vermiş olsun. DBA, İsmail kullanıcısından bu hakkı aldımı İsmail kullanıcısının hak verdiği kullanıcılardan da hak alınır.
ROLLER:
Rol Nedir: Diye sorarsak, rol bir guruptur diyebiliriz. Rol anlamı olarak da Türkçe’de ki ROLdür “ sinema, dizi, tiyatro oyuncularının yaptığı iş gibi”. Biz rol oluşturduğumuzda o rol üzerine system, object ya da başka bir rol ve ya her üçünü de atayabiliriz. Ve ayrıca kullanıcıları o role ekleyerek kullanıcılara tek tek hak ataması yapmaktansa role tanımlayrak roldeki hakları kullanmasını sağlayabiliriz.
Rollere Hak veya Hakları Atama, Kullanıcıları Rollere Atama:
Yukarıdaki resmi baz alarak bir senaryo oluşturalım. Ve bu senaryo üzerinden konumuzu anlatayım. HR (insan Kaynakları) Departmanı için iki farklı rol bu roller HR_MGR ve HR_CLERK rolleridir. HR_Clerk için employeestablosu üzerinde select ve update hakkına sahip ayrıca create job hakkına sahip. HR_MGR rolünde ise employeestablosunda delete ve insert hakkına sahip.
Eğer yeni bir kullanıcı geldiğinde, yeni gelen bu kullanıcı için ise barış ve ahmetin haklarını vermek istersek bu hakları yeni gelen kullanıcıya tek tek atamaktansa, o kullanıcıyu HR_Clerk rolüne atayarak işimizi kolaylaştırmış ve o kullanıcıya da barış ve Ahmetin haklarını vermiş oluruz.
ROL Oluşturma:
Rol oluşturmak için Enterprise Manager anasayfasından server tabına gelerek security bölümünün altından Rolestıklanarak Rol sayfasına geçeriz. Create butonuna basarız. Sonrasında gelen sayfada Rol ismi girilir, Authenticationmetodunu password seçeriz, sonrasında system haklarını ve obje haklarını ayarlar ve hangi Obje Type belirlemek istersek onu seçeriz ve ok sonrasında da finish der ver rolü oluşturmuş oluruz. Aşağıda gösterildiği gibi, istersek oluşturduğumuz ya da daha önce oluşturulan rolleri editleyebiliriz. Bu işlemleri rol sayfasından yapabiliriz.
Komut satırından rol oluşturma ve hak atamaları da aşağıdaki gibi yaparız. Tabiki öncelikli olarak SYSDBA hakkı ile bağlanmamız gerekecek.
Komut ile Role oluşturma
CREATE ROLE rol_adı;
|
Role’e sistem hakkı verme,
GRANT CREATE SESSION TO rol_adı;
|
Role’e obje hakkı verme,
GRANT SELECT ON obje_adı TO rol_adı;
|
Kullanıcıya rol atamak için,
GRANT rol_adı TO kullanıcı_adı;
|
Yukarıdaki komutlar ile aynen kullanıcılarda olduğu gibi role oluştururz ve haklarımızı Role’lere atarız. Böylece her kullanıcıya tek tek hak ataması yapmaktansa sadece role’e atama yapar ve oluşturduğumuz o role’ü kullanıcılara atarız. Bir role’e role de atayabiliriz. Grup mantığı ile ayndıır. Yani kullanıcılar bir guruba atarız desek yanlış olmayacaktır.
Profiller ve Userlar:
Bütün kullanıcıların defultta bir profili vardır. Ki isim olarak da default profile olarak isimlendirilmiştir. Kullanıcılar için profil belirleyerek bu profiller üzerinde belirli kısıtlamalar getirilerek kaynakların kısıtlanması amacıyla kullanılır. Örneğin her bir işlem ya da her bir session için CPU kullanımı limitlendirilebilir.
Üstteki ekran görüntülerinde de görülebileceği gibi Profil’ler “genel” ve “parola” olmak üzere iki bölüm altında parametreler içerir. “genel” bölümünde, kullanıcının kullanabileceği kaynakları kısıtlamak amaçlı parametreler bulunurken, parola bölümünde kullanıcının parola güvenilirliğini belirleyebileceğimiz parametreler vardır.
Profil kullanıcılara bildirilir. Bildirilerek profil belirlenir. Profil parametrelerini inceleyelim.
Genel Parametreler:
CPU/Session (CPU_PER_SESSION): Bir kullanıcı oturumunun kullanabileceği maksimum cpu zamanını belirler. Örneğin 10000 belirlersek bu değer 100 saniyeye karşılık gelir. Kullanıcının oturum süresi 100 saniye olacaktır. 100 saniye aşıldığında oturum ORA-02392 hatası ile sonlanır.
CPU/Call (CPU_PER_CALL): Bir kullanıcının oluşturduğu call (Transaction) (parse, execute, ya da fetch) için maksimum cpu zamanını belirler. Örneğin kullanıcı bir update yaparsa ve update süresi belirlediğimiz süreyi geçers, update sonlanacaktır. Hata olarak ORA-02393 hatası ile sonlanır.
Connect Time (CONNECT_TIME): Bir oturum için dakika olarak maksimum açık kalma zamanını belirler. Bir kullanıcı oturumu bu zamanı aştığında, oturum ORA-02399 hatası ile sonlanır.
Idle Time (IDLE_TIME): Bir oturumun maksimum inaktif kalma süresini dakika olarak belirler. Bu parametrede belirtilen süre kadar inaktif kalan bir kullanıcı oturumu ORA-02396 hatası ile sonlandırılır.
Concurrent Sessions (SESSIONS_PER_USER): Kullanıcının eş zamanlı açabileceği oturum sayısını kısıtlamak için kullanılır. Yani bir kullanıcı hesabı ile kaç tane session açılacağını belirleriz. 10 yazarsak 10 session açılabilir. Bu parametre ile belirtilen sayıda oturum açan kullanıcı bir oturum daha açmak istediğinde ORA-02391 hatasını alır.
Reads/Sessions (LOGICAL_READS_PER_SESSION): Bir oturumda okunabilecek maksimum data block sayısını belirler. Çok kullanışlı değildir. Limit aşıldığında ORA-02394 hatası ile oturum sonlandırılır.
Reads/call (LOGICAL_READS_PER_CALL): Bir kullanıcının yarattığı call için okunabilecek maksimum data block sayısını belirler. Çok kullanışlı değildir. Limit aşıldığında ORA-02395 hatası ile oturum sonlandırılır.
Private SGA (PRIVATE_SGA): Bu limit sadece “shared server” modunda çalışan veritabanları için geçerlidir. Bir oturumun SGA içerisinde “Shared Pool”da kendine ayırabileceği maksimum memory alanını belirler. Çok kullanışlı değildir.
Parola Parametreleri:
Expire in (days): Bir parolanın geçerli sayılacağı maksimum zamanı gün olarak belirler. Gün bazında çalışır. Örneğin 3 gün belirlersek kullanıcı 3 günde bir parolasını değiştirmek zorunda kalacaktır.
Lock (days past expiration): PASSWORD_LIFE_TIME parametresi ile belirtilen süre dolduğunda kullanıcıya parolasını değiştirmesi için tanınan ek süreyi tanımlar. Örneğin bu parametreyi 1 gün belirlersek, bir gün içinde parolayı değiştirmezse kullanıcı hesabı kilitlenecektir.
Number of passwords to keep: Bir parolanın tekrar kullanılabilmesi için tanımlanması gereken minimum farklı parola sayısını belirler. Örneğin 5 belirlersek en son 5 şifreyi giremeyecektir.
Number of days to keep for: Maksimum sayıdaki başarısız oturum açma girişimlerinden sonra, hesabın ne kadar süreyle kilitli kalacağını belirtir. Genellikle “UNLIMITED” olarak tanımlanır. Örneğin 7 gün belirlersek 7 gün boyunca kilitli kalacaktır.
Complexity function: Kullanılacak “Parola Doğrulama Fonsiyonu”nun ismi belirtilir. Parola Doğrulama Fonksiyonları bir sonraki konuda işlenecektir.
Number of Field login attempts to lock after: Bir Oracle kullanıcı hesabının kilitlenmesi için gerekli maksimum başarısız oturum açma girişimi sayısını belirler. Yani eğer biz bu parametreye 5 değerini girersek 5 kere yanlış şifre girdiğinde hesap kilitlenecektir.
Number of days to lock for: Bir parolanın tekrar kullanılabilmesi için geçmesi gereken minimum süreyi belirler.
Parola Güvenilirliği:
Parola Doğrulama Fonksiyonları (Password Verify Function) kullanılarak, kullanıcılara verilecek parolaların belirli bir zorluk seviyesinde olması garanti edilebilir. Örneğin parolanın en az bir harf, bir rakam ve bir sembol içermesini, kullanıcı adı ile aynı olmamasını, en az 8 karakter uzunluğunda olmasını, daha önce verilen 3 paroladan farklı olmasını bu fonksiyonlar sayesinde isteyebiliriz. Oracle kurulumunda böyle bir fonksiyon gelmez, ancak varsayılan bir Parola Doğrulama Fonksiyonu oluşturmak için gerekli script $ORACLE_HOME/rdbms/admin dizini altındautlpwdmg.sql ismiyle bulunabilir. Bu SQL scriptini çalıştırarak varsayılan bir Parola Doğrulama Fonksiyonu oluşturabiliriz. Ayrıca SQL scripti içerisinde istediğimiz değişiklikleri yaparak da kendi güvenlik seviyemize uygun bir doğrulama fonksiyonu üretebiliriz.
Kullanıcılara Kota Verme:
SQL*PLUS’ta create table yetkisinin verilmesi yeterli değil ayrıca birde storagata bağlı olduğu tablespace için belirli bir kota verilmesi gerekmekte. Sql*plus ve sql developer ile kota vermek için “ alter user <kullanıcı adı> quota 10 m” komutu kullanılır. Kullanıcıya 10 mb lik kota verir.
Enterprise Managerda ise;
Users sayfasından kota belirlemek istediğimiz kullanıcıyı seçerek edit deriz. Üstteki tablardan quotaya gelerek istediğimiz ya da gerekli olan tablespace üzerinde kota ayarlaması yapabiliriz. Eğer kullanıcıya kullanmaya yetkisi olduğu tablespace’ler üzerinde kota vermezsek, create table hakkı olsa dahi tablo oluşturamayacaktır. Bu nedenle kullanıcılara tablespace’ler üzerinde kota belirlememiz gerekecektir. Kullanıcılara bu kotaları unlimitid vermek tavsiye edilir.
Hiç yorum yok:
Yorum Gönder