Могу ли я использовать SQL Server CE в среде со средним уровнем доверия, просто развернув библиотеки DLL - PullRequest
0 голосов
/ 21 января 2012

Я написал приложение ASP.NET 4.0, которое использует базу данных SQL Server CE 4.0.Все это работает в моей среде разработки с использованием Medium Trust (такой же конфигурации доверия, как у хостера).На этой машине я прошел процесс установки (скачал и установил MSI).Сейчас я пытаюсь развернуть это решение на своем веб-хостере.

Код, который выполняется: (Это прямая копия поставщика членства Altairis:

using (HostingEnvironment.Impersonate())
using (var db = this.connectionString.CreateDbConnection())
using (var cmd = this.CreateDbCommand("SELECT PasswordHash, PasswordSalt FROM $Users WHERE UserName = @UserName AND IsApproved = 1", db)) 
{
     cmd.AddParameterWithValue("@UserName", username);
     db.Open();

     // Validate password
     using (var r = cmd.ExecuteReader()) { .. snip.. }
 }

ВНапример, db равно DbConnection, а cmd равно DbCommand

Я получаю следующую ошибку:

[InvalidOperationException: невозможно выполнить утверждения CAS вПрозрачные методы безопасности] System.Security.CodeAccessSecurityEngine.CheckNReturnSO (PermissionToken permToken, требование CodeAccessPermission, StackCrawlMark & ​​stackMark, Int32 создать) + 0
System.Security.CodeAccessSecurityEngine *arkark * * *arkark * Stack 61 * StackMackSakeSec.Security.CodeAccessPermission.Assert () + 28
System.Data.SqlServerCe.KillBitHelper.GetKillBit () + 231
System.Data.SqlServerCe.KillBitHelper..cctor () + 56

[Тип инициализации: Инициализатор типа для 'System.Data.SqlServerCe.KillBitHelper' вызвал исключение.]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet () + 0
System.Data.SqlServerCe.SqlSeProviderFactory..cctor () +41

[TypeInitializationException: инициализатор типа для исключений 'System.Data.SqlServerCe.rewserFeC.]

[TargetInvocationException: исключение было сгенерировано целью вызова.]
System.RuntimeFieldHandle.GetValue (RtFieldInfo, экземпляр объекта, RuntimeType fieldType, RuntimeType declaringType, Boolean & 0Init 0 0) 0 домен* System.Reflection.RtFieldInfo.InternalGetValue (Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) + 180
System.Reflection.RtFieldInfo.GetValue (Object obj) + 8
System.Data.Common.DbetFFFFFFproviderRow) + 232
System.Data.Common.DbProviderFactories.GetFactory (String providerInvariantName) + 88
Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection (параметры ConnectionStringSettings) в DatabaseExtensionMethods * 19: 1033: 1033airis.Web.Security.TableMembershipProvider.ValidateUser (String username, String password) в TableMembershipProvider.cs: 361

Я использовал декомпилятор для просмотра кода, и кажется, что внутренние компонентыSQL Server CE ищет запись в реестре, а затем пытается сделать код Assert().

Можно ли использовать SQL Server CE 4.0 в среде с частичным доверием, просто \bin развертывая DLL?

1 Ответ

1 голос
/ 21 января 2012

Да, если ваш хостер разрешает это - это разрешено по умолчанию в ASP.NET 4.0. Убедитесь, что вы используете версию сборки 4.0.0.0 (а не 4.0.0.1). Подробнее здесь: http://erikej.blogspot.com/2011/10/sql-server-compact-40-under-aspnet.html

...