2010-01-04 89 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