【问题标题】:Sitemap Security Trimming throws SQL error站点地图安全修剪引发 SQL 错误
【发布时间】:2012-02-07 08:27:12
【问题描述】:

我正在使用默认站点地图提供程序with secutiry trimming。但是,我得到了一些方法:

与 SQL Server 建立连接时出现与网络相关或特定于实例的错误。

我认为站点地图提供商在错误的位置寻找角色。我的配置是这样的:

<connectionStrings>
   <add name="DB" ... />
</connectionStrings>


   <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear/>
        <add name="SqlProvider" .../>
      </providers>
    </membership>
    <roleManager enabled="true">
      <providers>
        <add connectionStringName="DB"  type="System.Web.Security.SqlRoleProvider" ... />
      </providers>
    </roleManager>

站点地图标签的定义如下:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"  >
      <providers>
          <clear/>
          <add name="XmlSiteMapProvider"
            description="Default SiteMap provider."
            type="System.Web.XmlSiteMapProvider "
            siteMapFile="Web.sitemap"
            securityTrimmingEnabled="true"  />
      </providers>
  </siteMap>

为什么会出现 sql 错误?修剪如何获得角色?

编辑:

【问题讨论】:

  • 您好,能否请您说出您得到的确切异常+任何堆栈跟踪。
  • 您绝对确定数据库连接实际上是正确的?
  • 是你的 asp:sitemapdatasource 那么像
  • 是的,连接正确。我确定,因为如果我去掉修剪,会员和角色 100% 工作
  • 是的:

标签: c# asp.net asp.net-membership roleprovider sitemapprovider


【解决方案1】:

你截图的核心错误是

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL 服务器

不幸的是,这被截断了。然后该消息通常会继续以“配置为允许远程连接。”,这可能会进一步跟一个特定的原因(例如,它可能状态(其中各种其他原因)“提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例”)

但是,根据您目前收到的消息,它看起来像是客户端计算机和 SQL Server 框之间的连接问题。所以我会先对 SQL Server 机器和网络连接进行尽职调查:

  • SQL Server 服务器名称可以解析
  • 可以通过 ping 访问服务器
  • 该 SQL 服务器配置为接受远程连接
  • SQL Browser 服务正在 SQL Server 机器上运行
  • Windows 防火墙没有妨碍
  • SQL Server 本身实际上首先在运行

如果他们通过了,那么您需要进行验证才能登录。我通常会使用 SQL 管理工具,尤其是命令行工具 sqlcmd 来测试基本连接(例如:sqlcmd -E -S mysqlserver\instance 连接到默认数据库或 sqlcmd -E -S mysqlserver\instance -d database 连接到特定数据库)。显然,您需要以运行 Web 应用程序的用户身份运行它们,否则它们将尝试以您的身份进行身份验证(使用 runas 或在不同的凭据下启动命令提示符 [在开头找到命令提示符)然后在菜单中,shift-right-click -> "Run as a different user].

但是,如果您能获得完整的错误消息文本(而不是截断的版本),最终会有所帮助,这可能有助于缩小您遇到的具体问题。

【讨论】:

    【解决方案2】:

    试试这个工作站点地图:

    <siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
      <providers>
        <add name="XmlSiteMapProvider" description="SiteMap provider which reads in .sitemap XML files." type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>
    

    【讨论】:

      【解决方案3】:

      我会尝试使用默认角色提供程序和安全调整创建一个全新的项目,看看你是否可以让它工作。

      【讨论】:

        【解决方案4】:

        如果 SqlRoleProvider 在没有启用安全修整的情况下工作,我的第一个猜测是您的数据库或连接字符串有一些东西阻止了多个同时连接。如果您可以提供DB 连接字符串的详细信息,这将更容易评估...

        【讨论】:

          【解决方案5】:

          总的来说,配置看起来是正确的。根据异常的消息,数据库不可用。请检查是否可以连接数据库?

          using (SqlConnection connection = new SqlConnection()) {
              connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
              try {
                  connection.Open();
              }
              catch() {
                  ...
              }
          }
          

          “Steps to troubleshoot SQL connectivity issues”

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-28
            • 2015-04-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多