6.4 Kimlik: CONNECT ve DISCONNECT

<< İç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>']
DISCONNECT

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

  • Login MASTER'da aranır. Yoksa adlı hata verir.
  • Login'in bir parolası varsa doğrulanır; yanlış ya da eksik parola adlı hata verir. Yalnızca 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.
  • Başarısız bir 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.
  • Geçerli veritabanında haritada satırı olmayan bir login kimliksizdir: 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.

Not

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.