部分信頼のシナリオでは、必要な SqlClientPermissionAttribute プロパティを指定することによって、コード内の特定のメソッドを特定のコード アクセス セキュリティ特権を要求するコードとして指定できます。その特権がそのコードに対して許可されていない場合は、そのコードを実行する前に例外がスローされます。
メモ .NET Framework Data Provider for OLE DB と .NET Framework Data Provider for ODBC は、部分信頼のシナリオでは使用できないため、特定の特権に対するテストが成功しても、コードの実行は失敗し、SecurityException がスローされます。
たとえば、次のコードは、特定の接続文字列を要求するように指定されているメソッドを示しています。その接続文字列が禁止されている場合は、例外がスローされ、メソッドは実行されません。
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Security
Imports System.Security.Permissions
Public Class Sample
<SqlClientPermissionAttribute(SecurityAction.Demand, ConnectionString := " Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;")> _
Private Shared Sub OpenConn()
Dim testConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;")
testConn.Open()
Console.WriteLine("The calling method has been granted sufficient permission to access the database.")
testConn.Close()
End Sub
Public Shared Sub Main()
Try
OpenConn()
Catch e As SecurityException
Console.WriteLine("The calling method has not been granted sufficient permission to access the database.")
End Try
End Sub
End Class
[C#]
using System;
using System.Data;
using System.Data.SqlClient;
using System.Security;
using System.Security.Permissions;
public class Sample
{
[SqlClientPermissionAttribute(SecurityAction.Demand, ConnectionString = " Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;")]
private static void OpenConn()
{
SqlConnection testConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;");
testConn.Open();
Console.WriteLine("The calling method has been granted sufficient permission to access the database.");
testConn.Close();
}
public static void Main()
{
try
{
OpenConn();
}
catch (SecurityException)
{
Console.WriteLine("The calling method has not been granted sufficient permission to access the database.");
}
}
}