EntityFramework ConnectionStrings내의 특수문자 처리

EntityFramework ConnectionStrings내의 특수문자 처리

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

Entity Framework로 MySQL 접속하기
EntityFramework와 MySQL 접속하기 -2

패스워드에 특수문자가 들어있는 경우의 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=&quot;server=localhost;user id=admin;password=abcefg;persistsecurityinfo=True;port=3306;database=wp01&quot;" 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=&quot;server=localhost;user id=admin;password=abc123efg;;persistsecurityinfo=True;port=3306;database=wp01&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

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

0046-1.png

0046-2.png

에러 발생 부분

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=&quot;server=localhost;user id=admin;password='abc123efg;';persistsecurityinfo=True;port=3306;database=wp01&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

2. HTML 특수문자의 경우

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

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

참고

Pie's Tech Note

생계형 개발자의 메모장

comments powered by Disqus

    rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora