|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 6. Veri tanımlama (DDL) > 6.4 Kimlik: CONNECT ve DISCONNECT |
CONNECT <login> [PASSWORD '<parola>']
DISCONNECTKimlik bu motorda iki katmanlıdır. Bir login MASTER
veritabanında yaşar ve parolanın doğrulandığı yer orasıdır; her veritabanının kendi
kullanıcı nesneleri vardır; ikisini MASTER'daki ivd$user_map
tablosu (ivd$login_name, ivd$database_name, ivd$user_name)
birleştirir. Aynı login her veritabanında farklı adlı ve farklı nesne kimlikli bir
kullanıcı olabilir — birleştiren şey harita satırıdır, nesne kimliği değil. Şekil SQL Server'ın
LOGIN/USER ayrımıdır; oradaki SID eşlemesinin karşılığı bu haritadır.
CONNECT yalnızca oturumun kimliğini değiştirir. Veritabanına
bağlanmaz, depo açmaz, geçerli kataloğu değiştirmez — o işler
OPEN DATABASE / CLOSE DATABASE ve SET CATALOG'undur. Açık bir
işlem varken de çalışır, çünkü bırakılan bir bağlantı yoktur. Depo bağlantısının kimliği oturumun giriş
(login) kimliğidir (Session Authentication=Yes); CONNECT açık depo bağlantısını
değiştirmez.
MASTER'da aranır. Yoksa adlı hata verir.IDENTIFIED EXTERNALLY yaratılmış bir login parolasız kabul edilir —
doğrulamayı çağıran katman yapmıştır. Ön yükleme login'i SYSDBA
parolalıdır (ilk parolası masterkey; değiştirmek için
ALTER USER SYSDBA IDENTIFIED BY '…');
parolasız CONNECT SYSDBA reddedilir.CONNECT mevcut kimliğe dokunmaz. Kimliği düşürmek
bir yetki yükseltme yolu olurdu: kimliği olmayan bir bağlantıda SET CATALOG'un harita
denetimi hiç çalışmaz.CURRENT_USER 'NONE' der ve o veritabanına SET CATALOG ile
geçilemez. Ad tahminine düşülmez, konuk kullanıcı yoktur.CURRENT_USER login adını değil, haritanın gösterdiği o
veritabanındaki kullanıcı adını verir.DISCONNECT bağlantıyı kapatmaz: kimliği, sunucu/oturum katmanının
bastığı başlangıç kimliğine döndürür (msql ile koşan bir betikte bu,
msql'in bağlandığı login'dir). Yığın tutulmaz — iç içe CONNECT'lerden sonra da hep başlangıca
dönülür; PostgreSQL'in RESET SESSION AUTHORIZATION'ı da böyle davranır. Başlangıçta
kimlik yoksa kimliksize dönülür, ki bu bir yükseltme değildir: bağlantı oradan başlamıştır.
Deyimin adı standarttan, anlamı SQL Server'ın EXECUTE AS'inden
gelir: kanıtlı kimlik değişimi. Standardın aynı iş için tanımladığı
SET SESSION AUTHORIZATION yoktur: onun anlamı kanıtsız bürünmedir ve onu
güvenli kılan şey, bürünme yetkisinin kendisidir (PostgreSQL süper kullanıcı ister, SQL
Server IMPERSONATE). Yetkilendirme modeli (bkz. Yetkilendirme) böyle bir hak içermez;
kanıtsız bürünme herkesin herkes olabilmesi demek olurdu.
İkisi de yalnızca üst düzey deyimdir: bir PSQL gövdesinin içinde kullanılamazlar, yani saklanan bir yordam oturumun kimliğini sessizce değiştiremez.
SQL metnine çeviren kiplerde ve SQL izinde parola basılmaz: üretilen metinde
PASSWORD <password> yer tutucusu durur, çünkü o metin günlüğe ve çevrim çıktısına
gider. Çıktı bu yüzden olduğu gibi geri çalıştırılamaz.