【问题标题】:How to solve this error in ASP.NET如何在 ASP.NET 中解决此错误
【发布时间】:2016-09-26 07:41:13
【问题描述】:

我是 asp.net 和 sql server 的初学者。我已经在 sql server 2014 中创建了一个带有 sql 身份验证的数据库。

这是我的代码:

注册.aspx.cs

public partial class Registration : System.Web.UI.Page
{
     SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-U9DUN78\SQLEXPRESS;Initial Catalog=LoginRegisterData;Persist Security Info=True;User ID=sa;Password=***********;Pooling=False");
     protected void Page_Load(object sender, EventArgs e)
     {

     }


     protected void Button1_Click(object sender, EventArgs e)
     {      
        try
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into UserDetails values('" + TextBoxUsername.Text + "','" + TextBoxEmailid.Text+ "','" + TextBoxPassword.Text + "','" + TextBoxDate.Text + "','" + DropDownListCountry.SelectedItem + "')";
            cmd.ExecuteNonQuery();
            con.Close();
       }
       catch(Exception ee)
       {
            Response.Write(ee);
       }

  }

我想将数据存储到 sql server 数据库中。以下快照是我得到的错误:

Error page

【问题讨论】:

  • 检查您传递给 SqlConnection 的连接字符串中的密码是否与您用于 SSMS 的密码完全匹配;
  • 根据您的错误,听起来您的凭据不正确。尝试使用相同的登录到 SQL Server Management Studio,看看是否有帮助。此外,请考虑使用参数来构建查询,而不是连接字符串。
  • 正如以前的用户指出的那样(确认凭据)您可以在代码中尝试打开连接的地方设置断点。附加建议: 1. 不要为您的网络应用程序 sql 连接使用“sa” - 非常危险的做法 2. 将您的插入查询参数化或至少使用 @ 的准备好的语句
  • 您还应该检查您的 SQL Server 是否启用了混合身份验证
  • 如果您安装了 MSSQL Management Studio,请尝试使用正确的密码以“sa”身份登录。如果你不能,那么很可能 sa 帐户确实将混合身份验证设置为 true 或 yes 或其他任何值。这是默认设置

标签: c# asp.net sql-server


【解决方案1】:

正如其他人所说,这可能只是一个错误的密码。 要确保在 SSMS 中启用 Sql Server 身份验证,请右键单击实例,选择属性并确保选中 Sql Server 和 Windows 身份验证。

还有……

  1. 要创建和测试连接字符串,您可以创建一个新的文本文件并将其重命名为anything.udl。 如果双击它,您将能够为几种不同的连接类型创建和测试连接字符串。如果您保存更改,然后在记事本中打开文件,您将看到所需格式的连接字符串。

  2. 你不应该使用 sa 连接到你的数据库,就好像你有一个 sql 注入漏洞(就像你做的那样),如果你只有一个普通用户,可能造成的损害要大得多。

  3. 在您做任何其他事情之前,请阅读sql injection,因为您编写的代码是教科书示例。

【讨论】:

  • 谢谢你们。一旦我将身份验证更改为“Windows 身份验证”,我就会得到一个输出,但它在 sql 身份验证中不起作用。你能告诉我原因吗?
【解决方案2】:

在 Sql Server 2008 R2 上测试。正如@etoisarobot 所说,如上所述配置服务器以接受 SQL 和 Windows 身份验证。管理员(希望是您)然后使用 Windows 身份验证进行连接。运行此脚本以更改 sa 密码 - 这样您就知道自己拥有正确的密码。运行此脚本:

ALTER LOGIN [sa] WITH PASSWORD='PickAPassword', CHECK_POLICY=OFF
GO
ALTER LOGIN [sa] ENABLE
GO

重新启动“Sql Server”服务以使更改生效。 然后您应该能够以sa 的身份登录。

正如其他人所说,您应该创建一个新的登录帐户,而不是sa,仅具有他们需要的权限,例如数据读取器和数据写入器。您不想授予用户更改表结构等的权限。

更安全的是仅授予数据读取者权限并授予对存储过程的执行权限。此链接显示如何:GRANT EXECUTE to all stored procedures

您放弃了使用 UPDATE、INSERT、DELETE 语句的能力,并且需要做一些工作来编写存储过程来执行这些更新。但是您可以控制数据的更新方式。您不希望用户能够在他们想要DELETE MyPreciousTable WHERE id = 123456789 时执行DELETE MyPreciousTable

您可以以管理员身份使用GRANTDENY 命令来微调允许外部用户执行的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2017-12-12
    • 2012-02-14
    • 2015-04-12
    相关资源
    最近更新 更多