如何检查用户是否输入正确的用户名密码和数据库名称?

时间:2013-09-13 19:51:37

标签: c# winforms exception-handling oracle11g

我有以下表格,如果以下任何条目不正确,我想提醒用户。哪里可以在代码下面添加我的例外?

enter image description here

mycode的:

 public static void GetTables(Members src)
    {

        OracleConnection conn1 = MyConnectionClass.GetConnection(src.DB, src.ID, src.Password);

        conn1.Open();
        using (OracleCommand command= new OracleCommand("SELECT * FORM DBA_USERS WHERE USER NAME=" + src.ID + " and PASSWORD=" + src.Password + "", conn1))
        {
            using (OracleDataReader reader = command.ExecuteReader())
            {
                int count = 0;
                while (reader.Read())
                {
                    count = count + 1;
                }
            }
        }
  }

1 个答案:

答案 0 :(得分:3)

我只是再次查看代码,这是彻底的灾难。 所以你告诉我应用程序建立的连接可以访问DBA_Users表吗?这是一个很大的红旗。

你应该:

  • 创建一个将成为您的应用程序架构的架构

  • 在连接字符串中使用该架构的pwd和用户名,加密,用户无法访问

  • 您的应用程序中的
  • 具有不仅仅是“用户”而是“users1f0tm34m”之类的表。

  • 使用该表来验证您的应用程序传入用户。

基本上,您将使用应用程序加密的连接字符串建立连接。这是您检查连接是否正确的地方。如果用户凭据正确,则第二次检查将针对您的表。

现在,您需要停止对此的争论:

"SELECT * FROM DBA_USERS WHERE USERNAME=" + src.ID + " and PASSWORD=" + src.Password + ""

除了SQL注入之外,还有优化。上面的代码将导致oracle优化器在下次用户登录时为查询创建计划。为避免这种情况,您需要通过参数使用绑定变量:

SELECT * FROM DBA_USERS WHERE USERNAME=:uname and PASSWORD=:pwd

这是Oracle推荐的方法,您所做的是动态SQL,这是Oracle不推荐的。

如果您的公司有过审核,那么您已经熟了。