SQL Server 接続における Integrated Security と SSPI の違い
SQL Server に接続する際、Integrated Security
という接続文字列オプションを使用することができます。これは、Windows 認証を使用してユーザーを認証する便利な方法です。Integrated Security
には True
と SSPI
という 2 つの値がありますが、何が違うのでしょうか?
Integrated Security = True
は、Windows 認証を使用してユーザーを認証するデフォルトの方法です。この場合、クライアントコンピューターと SQL Server インスタンスが同じドメインに参加している必要があります。
Integrated Security = SSPI
は、Integrated Security = True
とほぼ同じですが、異なる認証プロバイダーを使用することができます。SSPI は、Kerberos や NTLM などの複数の認証プロバイダーをサポートしています。
主な違い
項目 | Integrated Security = True | Integrated Security = SSPI |
---|---|---|
認証プロバイダー | Kerberos | Kerberos または 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 = True
と Integrated Security = SSPI
を使用して SQL Server に接続する方法を示しています。ご自身の環境に合わせてコードを変更して使用してください。
SQL Server 接続におけるその他の方法
SQL Server Management Studio (SSMS)
SSMS は、SQL Server を管理するためのツールです。SSMS を使用して、SQL Server に接続するには、以下の手順を行います。
- SSMS を起動します。
- オブジェクト エクスプローラー で、サーバー ノードを展開します。
- データベース エンジン を右クリックし、接続 を選択します。
- 接続プロパティ ダイアログボックスで、サーバー名 、データベース 、認証 などの接続情報を入力します。
- 接続 をクリックします。
- コマンドプロンプトを開きます。
- 以下のコマンドを入力します。
sqlcmd -S <サーバー名> -d <データベース名> -U <ユーザー名> -P <パスワード>
- 以下のコードをプロジェクトに追加します。
using System.Data.SqlClient;
Imports System.Data.SqlClient
- 以下のコードを使用して、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()
- 以下のコードを使用して、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()
- 以下のコマンドを使用して、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