2012-05-12 3 views
0

연결이 끊긴 구조에서 저장 프로 시저를 사용하지 않고 C# 코드에서 데이터베이스 필드를 추가 할 수 있습니다 볼 수 있습니다와 같은내가 어떻게 3 사용자 액세스 수준을 만들 필요가 어디 asp.net에 로그인 페이지를 만들 필요가

사용자 거기에 전자 메일을 보거나 업데이트 할 수있는 수퍼 유저가 이메일을 보내고 업데이트합니다. 모두 관리자를 표시하고 수퍼 유저도 모두 삭제할 수 있습니다. 버튼의 사용자/관리자/슈퍼 유저가 클릭 자동으로 그 사용자의 수준에 따라 리디렉션해야 할 때

내 로그인 페이지가 이름 암호 및 로그인 버튼

있습니다.

나는 username, password, userid, useraccesstype, email의 데이터베이스를 가지고 있습니다. 여기 내 문제는 데이터베이스의 연결이 끊긴 아키텍처에서 useraccesstype 기반의 if 명령을 작성하는 방법과 저장 프로 시저를 사용하지 않는 방법을 쓰는 중입니다.

String Uid = TextBox1.Text; 
String Pwd = TextBox2.Text; 

SqlConnection con = new SqlConnection(@"Data Source=Sun-PC\SQLEXPRESS;Initial Catalog=dts;Persist Security Info=True;User ID=sa;Password=********;"); 
SqlDataAdapter da; 
da = new SqlDataAdapter("Select userid,password,useraccesstype from Table2 WHERE userid = " + Uid + " and password ='" + Pwd + "'", con); 
DataSet ds = new DataSet("Table2"); 
da.Fill(ds, "Table2"); 

if (Uid == "userid" && Pwd == "password") 
{ 
    if (uzrtype3 = "componentadmin") 
    { 
     Response.Redirect("userpage.aspx"); 
    } 
    if (uzrtype = "user") 
    { 
     Response.Redirect("register.aspx"); 
    } 
} 
else 
{ 
    Label123.Text = "Sorry, user not recognized - please try again"; 
} 
+6

다른 작업 : *** SQL 주입에 대해 알아보십시오. 귀하의 코드는 현재 끔찍한 위험에 처해 있습니다. 마찬가지로 : 아무도 계정을 필요로하지 않고 * 해당 코드로 DB를 파괴 할 수 있습니다. 또한 암호 대신 소금에 절인 해시. (질문을 읽으 러 돌아 간다) –

+0

@ 마크 나는 내 아이폰 사용에 어려움을 겪고 있기 때문에 당신이 나를 이길 수있어서 기쁩니다! 또한 TextBox1, TextBox2 등을 호출하는 습관에 빠지지 마십시오. 게으르다가 결국 저주를합니다. –

+0

질문을 명확히 할 수 있습니까? 나는 제목에 "데이터베이스 필드 추가"가 무엇을 의미하는지 확실히 알지 못합니다 (그리고 질문에서 명확하지 않습니다). 그리고 저장 프로 시저가 질문과 관련이 있는지 여부는 명확하지 않습니다. 지금 너는 어떤 비트인가? 데이터 세트 내부를 보는 방법을 묻는 것처럼 보입니다. 어떤 경우에 ds.Tables [0] .Rows가 시작될 수 있습니다 (비록 여기에서는 DataSet을 모두 사용하면 과도한 것처럼 보일 수 있습니다). 확인하실 수 있습니다 : 일치하는 항목을 확인하기 만하면되는 문제입니까, 그렇다면 useraccesstype 값을 읽으시겠습니까? –

답변

1

당신이 "t이 useraccesstype 어떻게 얻을"물어, 내가 생각 행간 읽기? 어쩌면, 그래서 현재 코드을 가진 경우 : 그러나

if(ds.Tables[0].Rows.Count == 1) { 
    // match 
    var accessType = ({appropriate cast here})ds.Tables[0].Rows[0]["useraccesstype"]; 
} else { 
    // no match 
} 

!

string userid = .... 
string password = ... 
var row = con.Query(
    "Select useraccesstype from Table2 WHERE userid = @userid and password = @password", 
    new { userid, password }).FirstOrDefault(); 
if(row == null) { 
    // no match 
} else { 
    var accessType = ({some cast here})row.useraccesstype; 
} 

암호의 소금에 절인 해시는 것을 원입니다 (그것을 구글) 편의를 위해 "날씬한 점 그물"을 사용 - 나는 다양한 매개 변수의 문제를 해결하고 더 안전하고, 그것을 다른 방식으로 할 것 들여다 봐야 해.

사용자 ID/비밀번호를 반환하는 포인트가 없습니다. 이미 알고 있습니다. ExecuteScalar를 사용할 수도 있지만 직접 매개 변수를 처리해야합니다.

관련 문제