|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 9. Yerleşik kütüphane > 9.3 Depolama motorları |
CREATE DATABASE … STORAGE ENGINE <ad> [PARAMETERS '<bağlantı dizgisi>']| Ad | Ne için | Test süiti |
|---|---|---|
MEMORY | Süreç içi geçici satır deposu; MVCC, varsayılan yalıtım READ COMMITTED. Geliştirme ve test kiplerinde MASTER veritabanı bu motordadır. | tamamı |
SQLITE | SQLite (:memory: ya da dosya). Hizmetin MASTER veritabanı bu motorda sabit bir dosyadır (${APPDIR}/ivd$master.sqlite). | tamamı |
POSTGRESQL | Dış bir PostgreSQL veritabanı. | tamamı |
FIREBIRD | Dış bir Firebird veritabanı. | tamamı |
ODBC | ODBC üzerinden dış bir RDBMS. | tamamı |
EMR | IVEDI'nin kendi sayfa tabanlı tek dosyalı deposu. | koşulmuyor |
BLACKHOLE | Her şeyi atar; depolama olmadan DDL/derleme yolunu ve maliyetini ölçmek için. MASTER veritabanı bu motorda olamaz: yazılan katalog satırları geri okunamadığı için açılış betikleri ilk okumada boş katalog görür; INVALID_CONFIGURATION ile reddedilir. Kullanıcı veritabanı olarak kullanılabilir. | yalnızca duman testi |
IOT | Ad fabrikada tanınır ama hiçbir ürün derlemesinde etkin değildir. | koşulmuyor |
ODBC ve POSTGRESQL derleme zamanında dış başlık ister
(sql.h/sqlext.h, libpq-fe.h); derleme sistemi bunları
dışarıda bırakabilir, o zaman ad da kabul edilmez. Çalışma zamanında istemci kitaplıkları
dinamik yüklenir. PostgreSQL'e ayrıca veritabanı bağlantısı sürücüsü olarak da
erişilebilir (CREATE DATABASE LINK … DRIVER POSTGRESQL); o ayrı bir yoldur.
PARAMETERS bağlantı dizgisi motorun kendi anahtarlarını (Server Name,
User Name, Password, Database Name, CharSet,
Port, Vendor Lib) taşır; IVEDI'ye özgü olanlar:
| Anahtar | Motor | Anlam |
|---|---|---|
Metadata Operations=OFF | hepsi | Fiziksel DDL depoya gönderilmez; yalnız IVEDI kataloğu yazılır. Fiziksel şeması başka yoldan kurulmuş bir ürün veritabanına kataloğu yazmak içindir. CREATE DATABASE gibi OPEN DATABASE da bu seçeneği uygular. Seçenek yalnız açan oturum için geçerlidir: MASTER kaydına yazılmaz (kayıtta bulunursa ajan açılışta siler), sonraki açılışlar depo DDL'ini yine gönderir. Seçenek açıkken depoyu değiştirecek bir UPGRADE LEVEL reddedilir. |
Catalog Schema=<ad> | PostgreSQL | Her bağlantıda şema yoksa yaratılır ve search_path <ad>, public olur: katalog tabloları (ivd$*) ve şemasız her nesne public yerine oraya gider. |
Owner, Locale Provider, ICU Locale, Locale | PostgreSQL | CREATE DATABASE'e OWNER, LOCALE_PROVIDER (icu | libc | builtin), ICU_LOCALE, LOCALE (LC_COLLATE + LC_CTYPE) olarak eklenir; verilmeyen yazılmaz. Örnek: Owner=sysdba; Locale Provider=icu; ICU Locale=tr-TR; Locale=tr_TR.utf8. |
OS Authentication=Yes | Firebird, PostgreSQL, ODBC | Aşağıda. |
Session Authentication=Yes | Firebird, PostgreSQL, ODBC | Login'li oturumlar depoya kendi kullanıcı adı ve parolasıyla bağlanır; kayıttaki User Name/Password yalnız motorun kendi bağlantılarında kalır. Aşağıda. |
Busy Timeout=<ms> | sqlite | Dosya veritabanı WAL günlüğü ve normal kilit kipiyle açılır: birden çok süreç ve bağlantı aynı dosyayı kullanır, okuyucu yazıcıyı beklemez; yazıcı, başka bir yazıcının işlemi bitene kadar en çok bu kadar bekler, sonra database is locked alır. Öndeğer 30000. :memory: veritabanında etkisizdir (tek bağlantı, yalnız açan süreç). |
PARAMETERS bağlantı dizgisindeki OS Authentication=Yes seçeneği
"kullanıcı adı/parola gönderme, işletim sistemi oturumunun kimliğiyle bağlan"
demektir. Bağlantı dizgisinde bir Password dursa bile yok sayılır, yani parolayı
betikten ya da yapılandırmadan tamamen kaldırmaya yarar. Seçeneği yalnızca kimlik doğrulayan
motorlar tanır:
| Motor | Ne yapar |
|---|---|
FIREBIRD | DPB'ye isc_dpb_trusted_auth konur, kullanıcı
adı/parola hiç gönderilmez; CREATE DATABASE yolunda USER/PASSWORD
yan tümceleri yazılmaz. Sunucu tarafında Windows'ta Win_Sspi eklentisi devrede
olmalıdır (firebird.conf → AuthServer) ve Windows kimliğini bir
Firebird kullanıcısına bağlayan bir eşleme bulunmalıdır; yoksa bağlanma
Missing security context ile döner. |
POSTGRESQL | libpq bağlantı dizgisine password yazılmaz;
kimlik doğrulama işletim sistemi oturumu üzerinden yürür (Windows'ta SSPI, POSIX'te
GSSAPI/peer/ident). User Name verilmişse yine gönderilir; PostgreSQL doğrulanan
işletim sistemi kimliğini istenen role pg_ident.conf ile eşler. Verilmemişse libpq
oturumun kullanıcı adını kullanır. |
ODBC | Bağlantı dizgisine Uid/Pwd yazılmaz ve
Trusted_Connection=yes eklenir (DSN yolunda kullanıcı adı/parola boş uzunlukla
geçilir). Bu anahtar sözcük sürücüye özgüdür: SQL Server sürücüsü tanır, tanımayan sürücü yok
sayar. Başka bir anahtar gerekiyorsa Driver Options geçiş alanına yazılır. |
MEMORY, SQLITE, EMR, BLACKHOLE ve
IOT motorlarında kimlik doğrulama yoktur; onlarda seçenek yok
sayılır ve günlüğe bir uyarı yazılır
(Storage engine SQLITE does not support 'OS Authentication', ignored).
Session Authentication)Öndeğerde motor bir veritabanının deposuna her oturum için MASTER kaydındaki
User Name/Password ile bağlanır; IVEDI'nin kendi hakları
(IVD$OBJECT_PRIVILEGES) bu tek depo kimliğinin üstünde uygulanır. Kayıttaki kimlik
motorun servis kullanıcısıdır (aşağıda) ve depoda tam yetkilidir, yani IVEDI'nin
hak denetiminden geçen her şey depoda tam yetkiyle koşar.
PARAMETERS bağlantı dizgisine Session Authentication=Yes yazılırsa
login'li bir oturumun depo bağlantısı o login'in kimliğiyle kurulur:
CREATE USER u FOR LOGIN l
ile eşlenen u; eşleme yoksa login adı); depoya GRANT'ın yazdığı biçimde gider:
PostgreSQL'de büyük harfli ad küçük harfe katlanır (SESSU → sessu), karışık
harfli ad olduğu gibi; Firebird'de büyük harfli ad olduğu gibi.ALTER USER <login> PASSWORD '…' ile değiştirildiğinde motor, bu seçenekle
kayıtlı her veritabanında eşlenen kullanıcı depoda varsa onun parolasını da kayıttaki kimlikle yazar;
kullanıcısı depoda olmayan ya da yazılamayan veritabanı uyarı olarak bildirilir.CONNECT IVEDI kimliğini
değiştirir, açık depo bağlantısını değiştirmez.SYSDBA ile açılan oturumlar ve dil sunucusu bağlantıları (GUEST, yalnız çevirir).SYSADMIN olan bir login bile depoda hakkı
olmayan bir tabloyu okuyamaz (deponun hatası iletilir). Tablo ve görünüm hakları, yordamların
EXECUTE'u ve dizilerin USAGE'ı için GRANT/REVOKE zaten
depoya yansıtılır; PostgreSQL'de bir nesne hakkıyla birlikte nesnenin şemasının USAGE'ı da
verilir (PostgreSQL'de şemaya ulaşmak ayrı bir haktır, IVEDI'de değildir). Katalog tabloları
(IVD$*) depoda PUBLIC'e okunabilir; DDL yapacak kullanıcının depoda
buna yetecek hakkı olmalıdır.create database satis storage engine postgresql
parameters 'Server Name=localhost; Database Name=satis; User Name=postgres; Password=***;
Catalog Schema=netsim; Session Authentication=Yes';Seçeneği yalnız kimlik doğrulayan motorlar tanır (FIREBIRD, POSTGRESQL,
ODBC); ötekilerde OS Authentication gibi uyarıyla yok sayılır.
OS Authentication ile birlikte verilirse oturum kimliği kazanır: oturumun kullanıcı adı ve
parolası gönderilir.
IVD$ENGINE)Kayıttaki kimlik deponun süper kullanıcısı değildir. CREATE DATABASE /
OPEN DATABASE'in PARAMETERS'ında verilen User Name/Password
(SYSDBA, postgres) yalnız kurulum içindir: motor onunla bağlanıp depoda
kendi servis kullanıcısını kurar (ajan ayarı engineUser, öndeğer IVD$ENGINE; PostgreSQL'de
CREATE ROLE … LOGIN SUPERUSER, Firebird'de CREATE OR ALTER USER … GRANT ADMIN ROLE +
GRANT CREATE DATABASE + hedef veritabanında GRANT DEFAULT RDB$ADMIN) ve parolasını rastgele
üretir. Süper kullanıcının parolası hiçbir yere yazılmaz. Depo sunucusu başına bir servis kullanıcısı vardır (sunucu adı
+ port; Firebird'de Database Name'in sunucu:yol / sunucu/port:yol öneki ya da
Server Name'deki sunucu/port da sunucu adıdır, öneksiz yol yerel sunucudur) ve kimliği MASTER'da
o sunucunun credential'ında durur:
-- motorun kendi kurduğu nesne (MASTER, SYS şeması)
CREATE CREDENTIAL SYS.IVD$ENGINE_POSTGRESQL_LOCALHOST_5432 TYPE DBLINK
IDENTITY 'ivd$engine' PASSWORD '…' TAGS (Engine = 'POSTGRESQL', Server = 'LOCALHOST', Port = '5432');
-- kayıt satırının parametreleri: kimlik yok, credential'a başvuru var
Server Name=localhost; Database Name=satis; Credential=SYS.IVD$ENGINE_POSTGRESQL_LOCALHOST_5432Ajan kaydı açarken kullanıcı adını ve parolayı credential'dan alır. Aynı sunucunun ikinci kaydı aynı credential'ı
kullanır; sunucunun son kaydı kapatılsa da credential kalır. ALTER DATABASE … SET PARAMETERS'ta maskesiz
bir parola verilirse o kayıt credential'dan çıkar ve kendi mühürlü parolasını taşır. CREATE /
ALTER CREDENTIAL … PASSWORD deyimlerinin parolası SQL izinde PASSWORD <password> olarak
görünür. Kullanıcı adı depoya GRANT'ın yazdığı katlamayla gider
(PostgreSQL'de ivd$engine, Firebird'de IVD$ENGINE). ODBC kaydı PostgreSQL
lehçesinde olduğu için PostgreSQL'in rolünü kurar; aynı sunucudaki PostgreSQL ve ODBC kayıtları tek sunucu sayılır
(port verilmemişse 5432) ve aynı rolü, aynı parolayla kullanır.
OS Authentication=Yes kayıtlarda yapılmaz;
User Name zaten servis kullanıcısıysa olduğu gibi alınır.ALTER DATABASE … SET ENGINE USER yineler.engineUser adı kullanmalıdır: ikisi
aynı kullanıcının parolasını ezer, birinin bağlantıları düşer.Var olan kaydı dönüştürmek:
set storage credentials user 'postgres' password '***';
set catalog satis;
alter database satis set engine user; -- parolayı motor üretir
alter database satis set engine user password 'Seçilen***'; -- ya da işletmeci belirler
commit;PASSWORD verilirse servis kullanıcısının parolası o olur; verilmezse sunucunun credential'ındaki parola, o
da yoksa rastgele bir parola kullanılır. Parola credential'a hemen yazılır (deyimin işleminden bağımsız: depodaki parola
değişikliği geri alınmaz). Kayıt credential'a başvurur hâle gelir; aynı depo sunucusunda parolayı hâlâ satırında taşıyan
servis kullanıcılı öteki kayıtlar da credential'a bağlanır; açık motorların bağlantıları yeni kimlikle
yeniden açılır.
SET STORAGE CREDENTIALSALTER DATABASE … UPGRADE, UPGRADE LEVEL, ADOPT LEVEL, DROP LEVEL
ve ADOPT … LEVEL 3 Firebird / PostgreSQL / ODBC depolarında yedeği ve bütün yazımları ayrı bir bakım
bağlantısında yapar (önce açık işlemi onaylar). Seviye 4'teki tek nesne benimsemesi (ADOPT TABLE …)
bakım kimliği yoksa oturumun bağlantısında kalır. Bağlantının kimliği:
set storage credentials user 'SYSDBA' password '***'; -- oturumun depo süper kullanıcısı
alter database satis upgrade level 3 from 'server:C:\paket\satis_3.db';
set storage credentials none; -- silerSET STORAGE CREDENTIALS verilmişse o kimlik; yanlış parola yükseltmeyi hiçbir şey
yazmadan reddeder (the storage credentials were refused).SYSDBA oturumu ve kimliksiz bağlantılar kayıttaki (servis) kimliği kullanır; başka bir
login yükseltmeyi başlatamaz (requires its superuser for maintenance).PASSWORD <password> olarak
maskelenir (CONNECT gibi). Yalnız üst düzey deyimdir; yordam gövdesinde yazılamaz. Önizleme
(PREVIEW) kimlik istemez.Bu kılavuzdaki davranış ifadeleri MEMORY üzerinde ölçülmüştür. Test süiti
beş motorda (bellek, sqlite, PostgreSQL, Firebird, ODBC) uçtan uca koşar, ama
motorlar arasında bilinen davranış sapmaları vardır ve bunlar süitte ayrı ayrı sabitlenmiştir.
EMR, BLACKHOLE ve IOT için ölçülmüş bir davranış
garantisi yoktur.