본문 바로가기
개발/Database

EntityFramework : ConnectionStrings내의 특수문자 처리

by ispie 2019. 1. 28.

아래와 같은 방법으로 EntityFramework를 이용해서 MySQL 접속을 하고 있는 것을 전제로 합니다.

 

Entity Framework에서 MySQL 접속하기

 

 

패스워드에 특수문자가 들어있는 경우의 ConnectionString 기입 방법

 

수정전 : 기존의 connectionStrings

 

PW:abcefg

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=admin;password=abcefg;persistsecurityinfo=True;port=3306;database=wp01"" providerName="System.Data.EntityClient" />
</connectionStrings>

 

수정후 : 상기에서 보안 강화차원으로 특수문자를 넣은 패스워드로 변경

 

PW:abc123efg;

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=admin;password=abc123efg;;persistsecurityinfo=True;port=3306;database=wp01"" providerName="System.Data.EntityClient" />
</connectionStrings>

 

connectionStrings를 변경 후 실행해 보았습니다 ⇒ BUT 에러…

 

 

 

에러 발생 부분

using (var db = new WpEntities())
{
	// 쿼리 실행 ★여기서 에러 발생!
}

 

using (var db = new WpEntities())의 선언은 컴파일상의 문제는 없지만 쿼리를 실행 시키면 에러가 발생합니다.

db의 설정 내용을 확인해 보니 ConnectionString의 내용이 아래와 같이 되어 있었습니다.

"server=localhost;user id=admin;password=abc123efg;persistsecurityinfo=True;port=3306;database=wp01"

 

패스워드의 마지막 부분의 “;”이 사라져 버렸습니다…
참고로 에러 내용은 (using password: YES) 였기 때문에 패스워드는 올바른게 아닌가 하고 처음에 착각했지만 에러 메시지에 「using method ‘mysql_native_password’ failed 」라고 표기 되어 있었으므로 패스워드는 처음부터 틀렸던 것을 알 수 있었습니다.

즉 특수문자를 인식할 수 없었기 때문에 올바른 패스워드로 인식 할 수 없었던 것이 접속 에러의 원인이었습니다.

 

 

해결 방법

 

1. 위와 같은 케이스의 경우

 

패스워드 부분을 ‘(싱글 쿼테이션)으로 격납합니다.

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=admin;password='abc123efg;';persistsecurityinfo=True;port=3306;database=wp01"" providerName="System.Data.EntityClient" />
</connectionStrings>

 

2. HTML 특수문자의 경우

 

해당 기호의 기입법을 찾아보거나

http://pst.co.jp/powersoft/html/index.php?f=3401

 

HTML 특수문자 변환 툴을 써서 바르게 기입합니다.

http://tech-unlimited.com/escape.html

 

 

참고 사이트

Escape quote in web.config connection string

 

 

댓글