SQL Server Express felhasználói példányok

Az SQL Server Express Edition támogatja a felhasználói példány funkcióját, amely csak a .NET-keretrendszer SQL Server-adatszolgáltató (SqlClient) használatakor érhető el. A felhasználói példány az SQL Server Express Database Engine egy külön példánya, amelyet egy szülőpéldány hoz létre. A felhasználói példányok lehetővé teszik a helyi számítógépeken a nem rendszergazda felhasználók számára, hogy SQL Server Express-adatbázisokat csatoljanak és csatlakozzanak azokhoz. Minden példány az egyes felhasználók biztonsági környezetében fut, felhasználónkénti egypéldányos alapon.

Felhasználói példány képességei

A felhasználói példányok olyan felhasználók számára hasznosak, akik a Windowst a minimális jogosultságú felhasználói fiók (LUA) alatt futtatják. Minden felhasználó rendelkezik SQL Server-rendszergazdai (sysadmin) jogosultságokkal a számítógépen futó példányon anélkül, hogy Windows-rendszergazdaként kellene futnia. A korlátozott engedélyekkel rendelkező felhasználói példányon végrehajtó szoftverek nem végezhetnek rendszerszintű módosításokat, mert az SQL Server Express példánya a felhasználó nem rendszergazdai Windows-fiókja alatt fut, nem szolgáltatásként. Minden felhasználói példány el van különítve a szülőpéldánytól és az ugyanazon a számítógépen futó többi felhasználói példánytól. A felhasználói példányokon futó adatbázisok csak egyfelhasználós módban nyílnak meg, és több felhasználó nem csatlakozhat a felhasználói példányon futó adatbázisokhoz. A replikáció és az elosztott lekérdezések a felhasználói példányok esetében is le vannak tiltva.

Megjegyzés

A felhasználói példányokra nincs szükség azokhoz a felhasználókhoz, akik már rendszergazdák a saját számítógépükön, vagy több adatbázis-felhasználót érintő forgatókönyvekhez.

Felhasználói példányok engedélyezése

Felhasználói példányok létrehozásához az SQL Server Express szülőpéldányának futnia kell. A felhasználói példányok alapértelmezés szerint engedélyezve vannak az SQL Server Express telepítésekor, és explicit módon engedélyezhetik vagy letilthatják őket egy rendszergazda, aki végrehajtja a sp_configure rendszer által tárolt eljárást a szülőpéldányon.

-- Enable user instances.
sp_configure 'user instances enabled','1'

-- Disable user instances.
sp_configure 'user instances enabled','0'

A felhasználói példányok hálózati protokolljának helyi Nevesített Csöveken kell alapulnia. A felhasználói példányok nem indíthatók el az SQL Server távoli példányán, és az SQL Server-bejelentkezések nem engedélyezettek.

Csatlakozás felhasználói példányhoz

A User Instance és AttachDBFilenameConnectionString kulcsszavak lehetővé teszik a SqlConnection csatlakozását egy felhasználói példányhoz. A felhasználói példányokat a SqlConnectionStringBuilderUserInstance és AttachDBFilename tulajdonságok is támogatják.

Vegye figyelembe az alábbi kapcsolati karakterláncot.

Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;
Initial Catalog=InstanceDB;

Ebben a kapcsolati lánc:

  • A Data Source kulcsszó a felhasználói példányt létrehozó SQL Server Express szülőpéldányára hivatkozik. Az alapértelmezett példány az .\sqlexpress.
  • Integrated Security beállítás értéke : true. Felhasználói példányhoz való csatlakozáshoz Windows-hitelesítés szükséges; Az SQL Server-bejelentkezések nem támogatottak.
  • A User Instance értéke true-re van állítva, ami felhasználói példányt hoz létre. (Az alapértelmezett érték a false.)
  • A AttachDbFileName kapcsolati sztring kulcsszó az elsődleges adatbázisfájl (.mdf) csatolására szolgál, amelynek tartalmaznia kell a teljes elérési utat. AttachDbFileName megfelel a "kiterjesztett tulajdonságok" és a "kezdeti fájlnév" kulcsoknak egy SqlConnection kapcsolati karakterláncban.
  • A csőszimbólumokban található |DataDirectory| helyettesítésre szolgáló sztring a kapcsolatot megnyitó alkalmazás adatkönyvtárára utal, és egy relatív elérési utat biztosít, amely jelzi a .mdf és .ldf adatbázis- és naplófájlok helyét. Ha máshol szeretné megtalálni ezeket a fájlokat, meg kell adnia a fájlok teljes elérési útját.

Megjegyzés

A kapcsolati sztring futásidőben történő létrehozásához használhatja a SqlConnectionStringBuilder.UserInstance és SqlConnectionStringBuilder.AttachDBFilename tulajdonságokat is.

Fontos

A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Ha az Azure SQL-hez csatlakozik, az Azure-erőforrásokhoz használt felügyelt identitások az ajánlott hitelesítési módszer.

A |DataDirectory| helyettesítési sztring használata

AttachDbFileName ADO.NET 2.0-s verziójában kiterjesztették a |DataDirectory| (csőszimbólumok közé zárt) helyettesítési sztring bevezetésével. DataDirectory a AttachDbFileName-gyel együtt használható az adatfájlok relatív elérési útjának jelzésére, lehetővé téve a fejlesztők számára, hogy a teljes elérési út megadása helyett olyan kapcsolati sztringet hozzanak létre, amely az adatforrás relatív elérési útján alapul.

Az a fizikai hely, amelyre a DataDirectory mutat, az alkalmazás típusától függ. Ebben a példában a csatolandó Northwind.mdf fájl az alkalmazás \app_data mappájában található.

Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;
Initial Catalog=Northwind;

Használatakor DataDirectory az eredményül kapott fájl elérési útja nem haladhatja meg a könyvtárszerkezetben azt a könyvtárat, amelyet a helyettesítő karakterlánc mutat. Ha például a teljesen kibontott DataDirectory érték C:\AppDirectory\app_data, akkor a fent bemutatott kapcsolati sztring működik, mert a c:\AppDirectory alatt van. Ha azonban megkísérli megadni DataDirectory|DataDirectory|\..\data , az hibát fog eredményezni, mert az \data nem az \AppDirectory alkönyvtára.

Ha a kapcsolati sztring helytelenül formázott helyettesítési sztringgel rendelkezik, a rendszer egy ArgumentException hibát fog dobni.

Megjegyzés

System.Data.SqlClient a helyettesítő karakterláncokat a helyi számítógép fájlrendszerének teljes elérési útjaivá oldja fel. Ezért a távoli kiszolgáló, a HTTP és az UNC elérési út neve nem támogatott. Kivétel történik a kapcsolat megnyitásakor, ha a kiszolgáló nem a helyi számítógépen található.

A SqlConnection megnyitásakor átirányításra kerül az alapértelmezett SQL Server Express példányról egy, a futtatókörnyezet által indított példányra, amely a hívó fiókjával azonosított fiók alatt fut.

Megjegyzés

Szükség lehet az érték növelésére, mivel a ConnectionTimeout felhasználói példányok betöltése hosszabb időt vehet igénybe, mint a normál példányok.

A következő kódtöredék megnyit egy új SqlConnection-t, megjeleníti a kapcsolati karakterláncot a konzolablakban, majd bezárja a kapcsolatot, amikor kilép a using kódblokkból.

Private Sub OpenSqlConnection()
    ' Retrieve the connection string.
    Dim connectionString As String = GetConnectionString()

    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Console.WriteLine("ConnectionString: {0}", _
           connection.ConnectionString)
    End Using
End Sub
private static void OpenSqlConnection()
{
    // Retrieve the connection string.
    string connectionString = GetConnectionString();

    using (SqlConnection connection =
        new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ConnectionString: {0}",
             connection.ConnectionString);
    }
}

Megjegyzés

A felhasználói példányok nem támogatottak az SQL Serveren belül futó közös nyelvi futtatókörnyezeti (CLR-) kódban. A InvalidOperationException dobás akkor történik, ha Open olyanra SqlConnection van meghívva, amely User Instance=true a kapcsolati sztring van.

Felhasználói példány kapcsolatának élettartama

A szolgáltatásként futó SQL Server-verzióktól eltérően az SQL Server Express-példányokat nem kell manuálisan elindítani és leállítani. Minden alkalommal, amikor egy felhasználó bejelentkezik és csatlakozik egy felhasználói példányhoz, a rendszer elindítja a felhasználói példányt, ha még nem fut. A felhasználói példányok adatbázisainak AutoClose beállítása úgy van kialakítva, hogy az adatbázis egy inaktivitási időszak után automatikusan leálljon. Az elindított sqlservr.exe folyamat a példányhoz való utolsó kapcsolat lezárása után korlátozott ideig fut, ezért nem kell újraindítani, ha egy másik kapcsolat megnyílik az időkorlát lejárta előtt. A felhasználói példány automatikusan leáll, ha az adott időtúllépési időszak lejárta előtt nem nyílik meg új kapcsolat. A fölérendelt példány rendszergazdája a felhasználói példány időtúllépési beállításának módosításával sp_configure beállíthatja a felhasználói példányok időtúllépési időtartamát. Az alapértelmezett érték 60 perc.

Megjegyzés

Ha Min Pool Size a kapcsolati sztring nullánál nagyobb értékkel használják, a kapcsolatkészletező mindig tart fenn néhány megnyitott kapcsolatot, és a felhasználói példány nem fog automatikusan leállni.

Hogyan működnek a felhasználói példányok

Amikor először hoz létre felhasználói példányt egy felhasználóhoz, a master és msdb rendszeradatbázisok át lesznek másolva a Sablonadatok mappából a felhasználó helyi alkalmazásadattár könyvtárában lévő útvonalra, hogy a felhasználópéldány kizárólagosan által használható legyen. Ez az elérési út általában C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Amikor elindul egy felhasználói példány, a rendszer a tempdb, a napló és a nyomkövetési fájlokat is ebbe a könyvtárba írja. Létrejön egy név a példányhoz, amely garantáltan egyedi lesz az egyes felhasználók számára.

Alapértelmezés szerint a Windows Builtin\Users csoport összes tagja engedélyt kap a helyi példányon való csatlakozásra, valamint az SQL Server bináris fájljain lévő engedélyek olvasására és végrehajtására. A hívó felhasználó, aki a felhasználói példányt üzemelteti, hitelesítő adatainak ellenőrzése után az adott példányon sysadmin rangot kap. Csak a megosztott memória engedélyezve van a felhasználói példányok esetében, ami azt jelenti, hogy csak a helyi gépen végezhető műveletek.

A felhasználóknak olvasási és írási engedélyeket kell adni a kapcsolati sztring megadott .mdf és .ldf fájlokra.

Megjegyzés

A .mdf és az .ldf fájlok az adatbázist és a naplófájlokat jelölik. Ez a két fájl egyező készlet, ezért a biztonsági mentési és visszaállítási műveletek során gondoskodni kell róla. Az adatbázisfájl információt tartalmaz a naplófájl pontos verziójáról, és az adatbázis nem nyílik meg, ha nem a megfelelő naplófájlhoz van társítva.

Az adatok sérülésének elkerülése érdekében a felhasználói példányban lévő adatbázis kizárólagos hozzáféréssel nyílik meg. Ha két különböző felhasználói példány osztozik ugyanazon az adatbázison ugyanazon a számítógépen, az első példány felhasználójának be kell zárnia az adatbázist, mielőtt egy második példányban megnyitható lenne.

Felhasználói példányok forgatókönyvei

A felhasználói példányok olyan SQL Server-adattárat biztosítanak az adatbázis-alkalmazások fejlesztőinek, amely nem függ attól, hogy a fejlesztők rendszergazdai fiókokkal rendelkeznek a fejlesztői számítógépükön. A felhasználói példányok az Access-/Jet-modellen alapulnak, ahol az adatbázis-alkalmazás egyszerűen egy fájlhoz csatlakozik, és a felhasználó automatikusan teljes engedélyekkel rendelkezik az összes adatbázis-objektumhoz anélkül, hogy rendszergazda beavatkozása szükséges az engedélyek megadásához. Olyan helyzetekben használható, amikor a felhasználó egy minimális jogosultságú felhasználói fiók (LUA) alatt fut, és nem rendelkezik rendszergazdai jogosultságokkal a kiszolgálón vagy a helyi gépen, de adatbázis-objektumokat és alkalmazásokat kell létrehoznia. A felhasználói példányok lehetővé teszik a felhasználók számára, hogy futtatókörnyezetben olyan példányokat hozzanak létre, amelyek a felhasználó saját biztonsági környezetében futnak, és nem egy kiemeltebb rendszerszolgáltatás biztonsági környezetében.

Fontos

A felhasználói példányokat csak olyan helyzetekben szabad használni, ahol az azt használó összes alkalmazás teljes mértékben megbízható.

A felhasználói esetek a következők:

  • Minden olyan egyfelhasználós alkalmazás, amelyben nincs szükség adatok megosztására.

  • ClickOnce-telepítés. Ha .NET-keretrendszer 2.0 (vagy újabb) és SQL Server Express már telepítve van a célszámítógépen, a ClickOnce művelet eredményeként letöltött telepítőcsomagot a nem rendszergazdai felhasználók is telepíthetik és használhatják. Vegye figyelembe, hogy a rendszergazdának telepítenie kell az SQL Server Expresst, ha ez a beállítás része. További információ: ClickOnce Deployment for Windows Forms.

  • Dedikált ASP.NET üzemeltetés Windows-hitelesítéssel. Egyetlen SQL Server Express-példány üzemeltethető egy intraneten. Az alkalmazás az ASPNET Windows-fiókkal csatlakozik, nem megszemélyesítéssel. A felhasználói példányok nem használhatók olyan külső vagy megosztott üzemeltetési forgatókönyvekhez, ahol minden alkalmazás ugyanazt a felhasználói példányt használná, és a továbbiakban nem maradna elkülönítve egymástól.

Lásd még