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="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
참고
- https://stackoverflow.com/questions/3177861/escape-quote-in-web-config-connection-string