2010-01-04 37 views
0

我有一個問題,那真的讓我發瘋。重新安裝SQL Server後從網絡共享中訪問SQL Server的問題

首先我必須承認,大部分的工作都是由一個不再可用的同事完成的。

重新安裝MSSQL服務器鑽機之前,整個事情看起來就像是:

  • 有人開發了一個連接到SQL Server的一個小的.Net C#程序,即位於不同的網絡共享。一切工作

我們不得不重新安裝服務器(Windows + SQL Server)的,自那一刻,如果程序是從網絡共享運行,我得到以下錯誤:

"Unhandled Exception: System.Security.SecurityException: Request for the permissi on of type 'System.Data.SqlClient.SqlClientPermission, System.Data, ......"

如果我從共享所在的計算機本地運行程序,它工作正常 - 所以我猜想所有安全問題都在SQL Server上正確設置。但是必須有一個問題,因爲它在重新安裝之前工作正確。

這對某人有意義嗎?或者有什麼想法如何解決這個問題?

編輯:下面張貼錯誤消息。該程序由批處理腳本調用。

C:\Projekte\Tool>\\server\c$\Projekte\Tool\ToolRea 
der.exe 

Unhandled Exception: System.Security.SecurityException: Request for the permissi 
on of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0. 
0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089' failed. 
    at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMa 
rk& stackMark, Boolean isPermSet) 
    at System.Security.PermissionSet.Demand() 
    at System.Data.Common.DbConnectionOptions.DemandPermission() 
    at System.Data.SqlClient.SqlConnection.PermissionDemand() 
    at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection o 
uterConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection ou 
terConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionU 
ser user) 
    at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() 
    at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() 
    at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider 
.Execute(Expression query) 
    at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.Get 
Enumerator() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at System.Data.Linq.Table`1.DeleteAllOnSubmit[TSubEntity](IEnumerable`1 entit 
ies) 
    at ToolReader.DataAccessLayer.ToolInfoDAO.deleteAllEntries(
) 
    at ToolReader.ToolReader.Main(String[] args) 
The action that failed was: 
Demand 
The type of the first permission that failed was: 
System.Data.SqlClient.SqlClientPermission 
The first permission that failed was: 
<IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Vers 
ion=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
AllowBlankPassword="False"> 
<add ConnectionString="Data Source=sqlserver\SQLEXPRESS;Initial Catalog=ToolDB;Integrated Security=True" 
KeyRestrictions="" 
KeyRestrictionBehavior="AllowOnly"/> 
</IPermission> 

The demand was for: 
<PermissionSet class="System.Security.PermissionSet" 
version="1"> 
<IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Vers 
ion=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
AllowBlankPassword="False"> 
<add ConnectionString="Data Source=sqlserver\SQLEXPRESS;Initial Catalog=ToolDB;Integrated Security=True" 
KeyRestrictions="" 
KeyRestrictionBehavior="AllowOnly"/> 
</IPermission> 
</PermissionSet> 

The granted set of the failing assembly was: 
<PermissionSet class="System.Security.PermissionSet" 
version="1"> 
<IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Read="USERNAME"/> 
<IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Unrestricted="true"/> 
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Vers 
ion=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Read="\\server\C$\Projekte\Tool\" 
PathDiscovery="\\server\C$\Projekte\Tool\"/> 
<IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, m 
scorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Allowed="AssemblyIsolationByUser" 
UserQuota="9223372036854775807" 
Expiry="9223372036854775807" 
Permanent="True"/> 
<IPermission class="System.Security.Permissions.ReflectionPermission, mscorlib, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Flags="ReflectionEmit"/> 
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Ve 
rsion=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Flags="Assertion, Execution, BindingRedirects"/> 
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version= 
2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Unrestricted="true"/> 
<IPermission class="System.Security.Permissions.UrlIdentityPermission, mscorlib, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Url="file://server/c$/Projekte/Tool/ToolReader.exe"/> 
<IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib 
, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Zone="Intranet"/> 
<IPermission class="System.Net.DnsPermission, System, Version=2.0.0.0, Culture=n 
eutral, PublicKeyToken=a76a5c5b1932e089" 
version="1" 
Unrestricted="true"/> 
<IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
version="1" 
Level="DefaultPrinting"/> 
</PermissionSet> 

The assembly or AppDomain that failed was: 
ToolReader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
The method that caused the failure was: 
Void deleteAllEntries() 
The Zone of the assembly that failed was: 
Intranet 
The Url of the assembly that failed was: 
file://server/c$/Projekte/Tool/ToolReader.exe 
+0

請發佈完整的錯誤消息(通過編輯您的消息,或在這裏評論) - 這將確實幫助我們確定問題的原因。簡而言之,這是SQL Server問題或(更可能)C#程序配置方式的問題:默認情況下,無法從網絡共享運行C#程序。 – 2010-01-04 11:04:04

回答

0

這是一個.NET安全問題。它將來自網絡共享的應用程序視爲與本地文件夾不同。

現在我不確定我們過去如何解決這個問題,但請嘗試以下操作:在調用計算機(而不是服務器)上使用.Net嚮導爲該程序(= Assembly)設置手動信任從控制面板,使用\ server \ share \程序進行導航。

我想你可以通過改變安全級別/區域來使它工作。

+0

謝謝你的回答。我也找到了。 我已經將所有.Net區域更改爲FullTrusted,但不會影響問題。 並提醒大家:它以前工作過,我們從來沒有碰過這個程序,只有SQL Server ... – powerbar 2010-01-04 12:36:43