SQL Server 接続における Integrated Security と SSPI の違い

2024-04-02

SQL Server に接続する際、Integrated Security という接続文字列オプションを使用することができます。これは、Windows 認証を使用してユーザーを認証する便利な方法です。Integrated Security には TrueSSPI という 2 つの値がありますが、何が違うのでしょうか?

Integrated Security = True は、Windows 認証を使用してユーザーを認証するデフォルトの方法です。この場合、クライアントコンピューターと SQL Server インスタンスが同じドメインに参加している必要があります。

Integrated Security = SSPI は、Integrated Security = True とほぼ同じですが、異なる認証プロバイダーを使用することができます。SSPI は、Kerberos や NTLM などの複数の認証プロバイダーをサポートしています。

主な違い

項目Integrated Security = TrueIntegrated Security = SSPI
認証プロバイダーKerberosKerberos または NTLM
ドメイン参加必須必須ではない
信頼関係必須必須ではない
パフォーマンス場合によっては高速場合によっては低速

詳細

  • 認証プロバイダー:

    • Integrated Security = True は Kerberos 認証のみをサポートします。
  • ドメイン参加:

  • パフォーマンス:

    • Kerberos 認証は NTLM 認証よりも高速です。

一般的には、Integrated Security = True を選択することをお勧めします。これは、Kerberos 認証は NTLM 認証よりも安全で高速だからです。ただし、クライアントコンピューターと SQL Server インスタンスが同じドメインに参加していない場合は、Integrated Security = SSPI を選択する必要があります。




C#

using System.Data.SqlClient;

// Integrated Security = True
var connectionString1 = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";

// Integrated Security = SSPI
var connectionString2 = "Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI";

using (var connection = new SqlConnection(connectionString1))
{
    connection.Open();

    // ...

    connection.Close();
}

using (var connection = new SqlConnection(connectionString2))
{
    connection.Open();

    // ...

    connection.Close();
}

VB.NET

Imports System.Data.SqlClient

' Integrated Security = True
Dim connectionString1 As String = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True"

' Integrated Security = SSPI
Dim connectionString2 As String = "Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI"

Using connection As New SqlConnection(connectionString1)
    connection.Open()

    ' ...

    connection.Close()
End Using

Using connection As New SqlConnection(connectionString2)
    connection.Open()

    ' ...

    connection.Close()
End Using

PowerShell

# Integrated Security = True
$connectionString1 = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True"

# Integrated Security = SSPI
$connectionString2 = "Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI"

$connection1 = New-Object System.Data.SqlClient.SqlConnection($connectionString1)
$connection1.Open()

# ...

$connection1.Close()

$connection2 = New-Object System.Data.SqlClient.SqlConnection($connectionString2)
$connection2.Open()

# ...

$connection2.Close()

Python

import pyodbc

# Integrated Security = True
connectionString1 = "Driver={SQL Server};Server=localhost;Database=Test;Integrated Security=True;"

# Integrated Security = SSPI
connectionString2 = "Driver={SQL Server};Server=localhost;Database=Test;Integrated Security=SSPI;"

connection1 = pyodbc.connect(connectionString1)

# ...

connection1.close()

connection2 = pyodbc.connect(connectionString2)

# ...

connection2.close()

上記のサンプルコードは、Integrated Security = TrueIntegrated Security = SSPI を使用して SQL Server に接続する方法を示しています。ご自身の環境に合わせてコードを変更して使用してください。




SQL Server 接続におけるその他の方法

SQL Server Management Studio (SSMS)

SSMS は、SQL Server を管理するためのツールです。SSMS を使用して、SQL Server に接続するには、以下の手順を行います。

  1. SSMS を起動します。
  2. オブジェクト エクスプローラー で、サーバー ノードを展開します。
  3. データベース エンジン を右クリックし、接続 を選択します。
  4. 接続プロパティ ダイアログボックスで、サーバー名データベース認証 などの接続情報を入力します。
  5. 接続 をクリックします。
  1. コマンドプロンプトを開きます。
  2. 以下のコマンドを入力します。
sqlcmd -S <サーバー名> -d <データベース名> -U <ユーザー名> -P <パスワード>
  1. 以下のコードをプロジェクトに追加します。
using System.Data.SqlClient;
Imports System.Data.SqlClient
  1. 以下のコードを使用して、SqlConnection オブジェクトを作成します。
var connectionString = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";
var connection = new SqlConnection(connectionString);
Dim connectionString As String = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True"
Dim connection As New SqlConnection(connectionString)
connection.Open();
connection.Open()
  1. 以下のコードを使用して、SQL Server に対するクエリを実行します。
var command = new SqlCommand("SELECT * FROM dbo.Customers", connection);
var reader = command.ExecuteReader();

while (reader.Read())
{
    Console.WriteLine(reader["FirstName"] + " " + reader["LastName"]);
}

reader.Close();
Dim command As New SqlCommand("SELECT * FROM dbo.Customers", connection)
Dim reader As SqlDataReader = command.ExecuteReader()

While reader.Read()
    Console.WriteLine(reader("FirstName") & " " & reader("LastName"))
End While

reader.Close()
connection.Close();
connection.Close()
  1. 以下のコマンドを使用して、pyodbc モジュールをインストールします。
pip install pyodbc
import pyodbc

connectionString = "Driver={SQL Server};Server=localhost;Database=Test;Integrated Security=True;"

connection = pyodbc.connect(connectionString)
cursor = connection.cursor()

cursor.execute("SELECT * FROM dbo.Customers")

for row in cursor:
    print(row[0], row[1])

cursor.close()

sql-server connection-string database-security


SQL関数デフォルトパラメータでコードを簡潔化し、可読性と保守性を向上させる

SQL関数デフォルトパラメータは、ストアドプロシージャやSQL Server T-SQL関数で、パラメータにデフォルト値を指定する機能です。関数呼び出し時にパラメータを省略できます。利点コードの簡潔化: パラメータを毎回指定する必要がなくなり、コードが読みやすくなります。...


SQL Server で ALTER TABLE を使って列を追加する方法:初心者向けチュートリアル

SQL Server の ALTER TABLE コマンドを使用すると、既存のテーブルに列を追加できます。この操作は、テーブルの構造を変更する必要がある場合に役立ちます。構文説明[テーブル名]: 列を追加するテーブルの名前を指定します。[データ型]: 追加する列のデータ型を指定します。SQL Server でサポートされているすべてのデータ型を使用できます。...


SSMSでテーブル一覧に表示されているテーブルなのに「無効なオブジェクト名」エラーが発生する?

SQL Server Management Studio (SSMS) でテーブル一覧に表示されているテーブルに対してクエリを実行しようとすると、「無効なオブジェクト名」エラーが発生する場合があります。このエラーは、さまざまな原因によって発生します。...


N''、CHAR()関数、クエリパラメータ:特殊な状況でのエスケープ

SQL Serverで文字列リテラル内にシングルクォートを含める場合、エスケープする必要があります。エスケープしないと、クエリ構文エラーが発生します。エスケープ方法シングルクォートをエスケープするには、2つの方法があります。シングルクォートを2回繰り返す...


SQL SQL SQL SQL Amazon で見る



【初心者向け】SQL Server接続:Trusted_ConnectionとIntegrated Securityを使い分ける方法

歴史的な経緯Trusted_Connection は、ODBC ドライバーで使用される古いキーワードです。Integrated Security は、OLE DB プロバイダーで導入された比較的新しく、より一般的なキーワードです。一般的には、Integrated Security を使用する方が推奨されています。これは、より新しいキーワードであり、ODBC と OLE DB の両方で使用できるためです。