管理者以外のユーザーのためのユーザー インスタンス

ユーザー インスタンスは、管理者以外のユーザーが各自のアカウントで SQL Server のローカル バージョンを実行できるようにする機能です。ユーザー インスタンスを使用すると、管理者以外のユーザーが、各自のアカウント内で実行中のインスタンスに対するデータベース所有者の特権を得ることができます。 

重要な注意事項重要

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

ユーザー インスタンスは子インスタンスまたはクライアント インスタンスとも呼ばれ、ユーザーに代わって親インスタンス (sqlExpress などのサービスを実行するプライマリ インスタンス) によって作成される SQL Server のインスタンスです。ユーザー インスタンスは、そのユーザーのセキュリティ コンテキストでのユーザーのプロセスとして実行します。ユーザー インスタンスは、親インスタンスやコンピューター上で実行中の他のユーザー インスタンスとは分離されます。ユーザー インスタンス機能は "通常のユーザーとして実行" (Run As Normal User : RANU) とも呼ばれます。

注意

一貫性を保つために、SQL Server Express オンライン ブックでは、この機能をユーザー インスタンスと呼びます。また、この機能は、SQL Server 2005 Express Edition で導入されました。

ユーザー インスタンスの利点

ユーザー インスタンス モデルを使用する利点は、以下に挙げるような理由によります。

  • ユーザー インスタンス モデルの主な目的は、SQL Server の管理者以外のユーザーをそれぞれ分離することにより、各ユーザーが別のユーザーの環境を損なうことなく任意のデータベースをアタッチできるようにすることです。この分離は、各ユーザーに SQL Server の個別のインスタンスを生成することにより実現できます。

  • SQL Server Express の目的としては、分離以外にも、管理者以外のユーザーにとっての使いやすさを向上することが挙げられます。多くの Windows ユーザーは、管理者特権があるアカウントを持っています。残念ながら、管理者として Windows を実行すると、悪意のあるソフトウェアにユーザーのコンピューターを不正使用されやすくなります。管理者以外のユーザーとしてであれば、悪意のあるソフトウェアが実行されてもシステム全体の変更を行うことはできないため、被害の範囲を一部のみに制限できます。

ユーザー インスタンスの概要

ユーザー インスタンス モデルは、次のようにまとめることができます。

  • ユーザー インスタンスを生成するには、SQL Server の親インスタンスを実行する必要があります。

  • SQL Server Express をインストールするたびに、セットアップによってクリーンな状態のシステム データベースを格納する Template Data フォルダーが作成されます。このシステム データベースは、ユーザー インスタンス プロセスが呼び出されると、ユーザー インスタンス プロセスによって使用されます。

  • ユーザー インスタンスを呼び出すには、SQLClient 内の user instance 接続文字列キーワードを使用します。これは、true または false にすることができ、既定値は false です。false に設定されている場合は、ユーザー インスタンスのサポートが無効になり、元の動作が保持されます。user instance が true に設定されている場合、ユーザー インスタンス モデルは ADO. NET connection.open の呼び出し中にアクティブ化されます。

    注意

    System.Data.SqlClient 名前空間では、SQL Server データベースへのアクセスを可能にし、まとめて .NET Data Provider for SQL Server と呼ばれるクラスのセット (SqlClient) が定義されています。マネージ アプリケーションは ADO .NET API を通して SqlClient と対話し、SQL Server データベースに格納されているデータおよびスキーマ情報に対するクエリおよび操作を行います。詳細については、Visual Studio 2005 のドキュメントを参照してください。

  • 任意のユーザーに対して最初にユーザー インスタンスが生成された時点で、そのユーザー インスタンスによって排他的に使用されるユーザーのローカル アプリケーション データ リポジトリ ディレクトリの下位パスに、Template Data フォルダーからシステム データベースがコピーされます。通常、このパスは、\Documents and Settings\Username\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS になります。

  • ユーザーは、親インスタンス上では管理者ではない場合でも、この新しいユーザー インスタンスには SysAdmin として接続し、データベースを使用します。

    セキュリティに関する注意セキュリティに関する注意

    セットアップ時に sysadmin 固定サーバー ロールのメンバーとして準備されたログインは、テンプレート データベースの管理者となります。これらのユーザーは、削除されない限り、ユーザー インスタンスの sysadmin 固定サーバー ロールのメンバーです。

  • ユーザー インスタンスが生成されると、SQLClient はすべての呼び出しをユーザー インスタンスにリダイレクトします。

注意

ユーザー データベースでは、データベースのプライマリ ファイルのファイル システム属性と権限に基づいて、各自の READONLY プロパティが派生します。ALTER DATABASE SET READ_ONLY/READ_WRITE 設定は適用されません。

ユーザー インスタンスを使用するための接続文字列

conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" + 
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
  // this will connect to the user instance, not to the 
  // default SSE instance
  conn.Open();
  // use the connection to the user instance
}

conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" + 
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
  // this will connect to the user instance, not to the 
  // default SSE instance
  conn.Open();
  // use the connection to the user instance
}

ユーザー インスタンスへの接続

ユーザー インスタンスに対するネットワーク プロトコルのサポートは、ローカルの名前付きパイプでのみ行われます。これは、ユーザーはリモート コンピューターからユーザー インスタンスに接続できないことを意味します。

SQL Server Management Studio を使用したユーザー インスタンスへの接続の詳細については、SQL Server Express オンライン ブックの「SQL Server Management Studio と SQL Server Express」を参照してください。

注意

名前付きパイプまたはネットワーク プロトコルの詳細については、SQL Server 構成マネージャーのヘルプを参照してください。このヘルプにアクセスするには、[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。次に、「SQLServerManager.msc」と入力します。これによって、[SQL Server 構成マネージャー] が開きます。ヘルプにアクセスするには、[ヘルプ] メニューをクリックします。SQL Server のネットワーク プロトコルを表示するには、[SQL Server ネットワークの構成] をクリックします。

ユーザー インスタンスの管理

管理者としてユーザー インスタンスを管理する場合は、次の情報が役立ちます。

ビュー/ストアド プロシージャ/Transact-SQL

説明

Select * from sys.dm_os_child_instances (Transact-SQL)

親インスタンス上で生成されたすべてのユーザー インスタンスを一覧表示する仮想ビューを実行できます。

SHUTDOWN

SQL Server を停止します。ユーザー インスタンスを停止するにはこのコマンドを使用します。SHUTDOWN の使用方法の詳細については、SQL Server オンライン ブックの「SHUTDOWN (Transact-SQL)」を参照してください。

sp_configure 'user instances enabled'

ユーザー インスタンスの機能の有効化または無効化を制御します。

ユーザー インスタンスの生成を有効にするには、次のコードを使用します。

sp_configure 'user instances enabled','1' 
sp_configure 'user instances enabled','1' 

RECONFIGURE;

GO

ユーザー インスタンスの生成を無効にするには、次のコードを使用します。

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

sp_configure 'user instance timeout'

使用方法は次のとおりです。

sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

sp_configure 'user instance timeout', 5;

GO

最小値は 5、最大値は 65535 です。

タイムアウトを表示および設定するには、sp_configure 'show advanced options' が必要です。詳細設定オプションの表示の詳細については、SQL Server オンライン ブックの「サーバー構成オプションの設定」を参照してください。

親インスタンスとユーザー インスタンスの両方でユーザー インスタンス タイムアウトを設定できます。

ユーザー インスタンスが開始されると、常にタイムアウト値が親インスタンスから取得されます。ただし、ユーザー インスタンスが開始されると、sp_configure を使用して、この特定のインスタンスに対してのみ有効なタイムアウト値を変更できます。

ユーザー インスタンスを使用する際の制限事項

ユーザー インスタンスを使用すると、SQL Server Express 機能の一部が予期したとおりに機能しないことがあります。次の一覧では、発生する可能性がある制限事項について説明します。

  • 1 人のユーザーが使用できるユーザー インスタンスは、1 つのみです。

  • レプリケーションは無効になります。

  • ユーザー インスタンスは、SQL Server 認証をサポートしません。Windows 認証だけがサポートされます。

  • ユーザー インスタンスに対するネットワーク プロトコルのサポートは、ローカルの名前付きパイプのみです。

  • ユーザー インスタンスは、親インスタンスのレジストリ エントリを共有します。

  • ネイティブ コードでのユーザー インスタンスに対するサポートはありません。この機能は ADO .NET でのみサポートされています。

  • フルテキスト検索は、SQL Server Express のユーザー インスタンスではサポートされていません。

  • WMI Provider for Server Events は、動的に起動されたユーザー インスタンスではサポートされません。これは、親 SQL Server Express インスタンスではまだ動作することになっています。WMI プロバイダーの詳細については、SQL Server オンライン ブックの「WMI Provider for Server Events」を参照してください。