브라우저의 JavaScript에서 SQL Server 데이터베이스에 연결하는 방법은 무엇입니까?


285

JavaScript를 사용하여 로컬에서 SQL Server 2005 데이터베이스에 연결하는 방법을 보여주는 샘플 소스 코드를 제공 할 수 있습니까? 데스크탑에서 웹 프로그래밍을 배우고 있습니다.

아니면 다른 스크립트 언어를 사용해야합니까? 대안이 있다면 제안하십시오.하지만 지금은 JavaScript로 시도하고 있습니다. 내 SQL Server는 SQL Server Management Studio 2005 및 IE7 브라우저와 같은 데스크톱에 로컬로 설치됩니다.


16
확실히 권장하지는 않지만 어떤 결과가 나올지 보는 것이 좋습니다.
TheTXI

2
Node.JS (서버 측 자바 스크립트 구현)에서 데이터베이스에 연결하려고하는데 여기에 도착했습니다. 내가 어디로 가야할지 아는 사람 있습니까?
Roy Tinker

2
@RoyTinker : node-postgres와 node-mysql이 있습니다.
야누스 트롤

1
실제로 사용할 수있는 무료 데이터베이스가 있습니까?

1
Node.js와 JavaScript를 사용하여 REST 백엔드를 작성하고이를 클라이언트 측 JavaScript와 인터페이스 할 수 있습니다.
Fez Vrasta

답변:


701

클라이언트 자바 스크립트를 사용하여 몇 가지 이유로 (잘못된 연습, 보안 문제 등) 데이터베이스에 액세스해서는 안되지만 실제로이 작업을 수행하려는 경우 예를 들면 다음과 같습니다.

var connection = new ActiveXObject("ADODB.Connection") ;

var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";

connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");

rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
   document.write(rs.fields(1));
   rs.movenext;
}

rs.close;
connection.close; 

SQL 서버에 연결하는 더 좋은 방법은 PHP, Java, .NET과 같은 서버 측 언어를 사용하는 것입니다. 클라이언트 자바 스크립트는 인터페이스에만 사용해야합니다.

그리고 서버 자바 스크립트의 존재에 관한 고대 전설에 대한 소문이 있지만 이것은 또 다른 이야기입니다. ;)


323
실제로 이것이 가능하다는 것을 보여준 유일한 사람이 된 것을 축하합니다 (권장하지는 않지만).
TheTXI

6
이것은 OP의 설정에서 작동 할 수 있지만 "웹 프로그래밍"을 배우고 싶다고 말했으며 보안 수준이 낮은 환경의 Internet Explorer는 웹 프로그래밍이 아닙니다.
Quentin

27
이 의견이 부정적인 투표로 인정되는 이유를 이해하지 못합니다. 나는 그것을하는 방법을 설명하지만 사용하지 말라고 지시합니다.
Fabio Vinicius Binder

26
fbinder : 일부 사람들은 데이터베이스 연결 및 JavaScript에서 쿼리를 시도하는 것이 큰 도움이되지 않는다고 생각하기 때문에이 투표에 반대 할 것입니다. 내가 당신이라면, 나는 당신이 이것에 얻는 하나 또는 두 개의 부정적인 투표를 신경 쓰지 않고 실제로 제기 된 질문에 대답하는 유일한 대답이기 때문에 받게 될 수많은 투표를 즐기게됩니다.
TheTXI

36
그러나이 대답은 ActiveX 사용으로 인해 IE 이외의 브라우저에서는 작동하지 않을 수 있습니다 (원래 포스터가 IE 사용에 대해 명시 적 임에도 불구하고).
TheTXI

25

연결 문자열을 공유하면 웹 사이트가 너무 많은 취약점에 노출되어 단순히 패치 할 수 없으므로 보안을 유지하려면 다른 방법을 사용해야하기 때문에 이것은 매우 나쁜 일입니다. 그렇지 않으면 사이트를 이용하기 위해 많은 청중을 열게됩니다.


7
실제로 그것이 왜 나쁜 생각인지 설명했기 때문에 공감하십시오
Reverse Engineer

기술 솔루션보다 더 유용하고 중요한 보안 팁
세이버 tabatabaee 야 즈디

9
그들은 OP가 좋은지 나쁜지를 묻지 않았기 때문에 투표하지 않았다. 실제 답변에 따라 왜 나쁜 생각이 될 수 있는지를 삽입 할 수는 있지만, 그것이 나쁜 생각이라고 말하는 것은 그 자체의 대답이 될 가치가 없으며, 최선의 의견입니다.
Wobbles

1
온 프레미스 서버와 인터페이스하기 위해 보안 방화벽 뒤에 무언가를 작성하는 경우에도 여전히 문제가 있습니까?
브라이언 브라이스

내가 틀렸다면 정정하지만 사용자가 제공 한 사용자가 읽기 전용이며 액세스 할 수있는 테이블을 관리하면 변경 사항이있을 때까지 기술적으로 안전합니까? 전체 DB에 중요하지 않은 정보가 포함되어 있지 않으면 tho를 권하지 않습니다. 민감한 정보를 다른 DB에 넣을 수 있습니다. 민감한 정보가없는 정적 웹 사이트에 유용하다고 생각할 수 있습니다. 인증이 필요한 경우 다른 서버에서 oautj2 비동기를 사용할 수 있습니다.
Joe Flack

11

완벽한 작업 코드 ..

    <script>
    var objConnection = new ActiveXObject("adodb.connection");
    var strConn = "driver={sql server};server=QITBLRQIPL030;database=adventureworks;uid=sa;password=12345";
    objConnection.Open(strConn);
    var rs = new ActiveXObject("ADODB.Recordset");
    var strQuery = "SELECT * FROM  Person.Address";
    rs.Open(strQuery, objConnection);
    rs.MoveFirst();
    while (!rs.EOF) {
        document.write(rs.fields(0) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(1) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(2) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(3) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(4) + "<br/>");
        rs.movenext();
    }
</script>

10

웹 서비스

SQL 2005+는 보안 위험으로 인해 제안하지는 않지만 거의 사용할 수있는 기본 웹 서비스를 지원합니다 . 나는 왜 거의 말했다 . Javascript는 SOAP 네이티브가 아니므로 실제로 만드는 것이 조금 더 복잡합니다. 를 통해 SOAP를주고 받아야 XmlHttpRequest합니다. Google에서 Javascript SOAP 클라이언트를 확인하십시오.


5

HTA에서 JavaScript를 사용하여 driver={SQL Server};...연결 문자열을 사용하면 운이 없었지만 이름이 지정된 DSN은 정상입니다. TestDSN을
설정하고 테스트 한 다음 제대로var strConn= "DSN=TestDSN"; 작동하여 자체 테스트 및 학습 목적으로 실험을 진행했습니다.

우리 서버는 server1 \ dev 와 같은 여러 인스턴스를 실행 하고 있습니다. 서버 1 \ 테스트 나는 탈출을 잊고 시간을 낭비 관리로 일이 약간 더 까다 만든 \같은 \\:
일부 데드 엔드 후 server=server1;instanceName=dev연결 문자열에서, 나는 결국 가지고이 하나는 작동합니다 :
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

사용자 / 암호를 제공하는 대신 Windows 자격 증명을 사용하여 흥미로운 전환이 Integrated Security = truev Integrated Security = SSPIv 의 미묘함을 발견하는 것으로 나타났습니다 Trusted_Connection=Yes- 통합 보안 = True 및 통합 보안의 차이점 = SSPI 참조

-1기본 adOpenForwardOnly 유형을 사용하는 것처럼 RecordCount가 다시 표시됩니다 . 작은 결과 세트로 작업하거나 메모리의 전체 로트를 한 번에 신경 쓰지 않으면 rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic)을 사용 하십시오.rs.RecordCount


4

앞서 언급했듯이 클라이언트 측 자바 스크립트를 사용하여 수행해서는 안되지만 원하는 것을보다 안전하게 구현하기위한 프레임 워크가 있습니다.

Nodejs는 자바 스크립트로 서버 연결을 코딩 할 수있는 프레임 워크이므로 Nodejs를 살펴보고 데이터베이스와 통신하고 필요한 데이터를 얻는 방법에 대해 조금 더 배우게 될 것입니다.


3

(죄송하지만, 이것은 SQL 백엔드에 대한보다 일반적인 답변입니다. SQL Server 2005의 WebServices 기능에 대한 답변을 읽지 못했습니다. 그러나이 기능은 여전히 ​​소켓을 통해 직접 실행되는 것이 아니라 HTTP를 통해 실행되므로 기본적으로 빌드되었습니다. 미니 웹 서버를 데이터베이스 서버에 삽입 하므로이 답변은 여전히가는 또 다른 경로입니다.)

소켓 (google "javascript sockets")을 사용하여 직접 연결할 수도 있으며이 시점에서 직접 플래시 파일을 사용하는 것이 좋습니다 .HTML5에는 동일한 기능을 수행 할 수 있다고 생각하는 사양의 일부로 웹 소켓이 있습니다.

어떤 사람들은 보안 문제를 인용하지만 데이터베이스 권한을 올바르게 설계했다면 이론적으로 OSQL을 포함한 모든 프런트 엔드에서 데이터베이스에 액세스 할 수 있어야하며 보안 침해가 발생하지 않아야합니다. 그러면 SSL을 통해 연결하지 않은 경우 보안 문제가 발생합니다.

마지막으로 SSL 또는 SQL Server의 통신 프로토콜을 처리하기위한 JavaScript 라이브러리가 없다고 생각하기 때문에 이것이 이론적이라고 확신합니다. 따라서 이러한 것들을 스스로 알아낼 수 없다면 브라우저와 데이터베이스 사이에 웹 서버 및 서버 측 스크립팅 언어를 사용하는 것이 좋습니다.


2
잘했다. 웹 서비스가 아닌 클라이언트 (즉, 모든 씩 클라이언트)에서 직접 데이터베이스에 액세스하는 데 아무런 문제가 없습니다. Windows 인증과 좋은 보안 계층을 사용한다면 이것에
아무런

1

클라이언트 측 자바 스크립트에서 SQL Server에 연결할 수 있다고 생각하지 않습니다. 데이터베이스와 상호 작용하고 사용자 인터페이스와의 상호 작용을 개선하기 위해 자바 스크립트 만 사용하는 웹 응용 프로그램을 구축하려면 일부 서버 측 언어를 선택해야합니다.

언어 환경 설정에 따라 서버 측 스크립팅 언어를 선택할 수 있습니다.

  • PHP
  • ASP.Net
  • 루비 온 레일즈

1
이것은 내가 찾을 수있는 유일한 진정한 대답 중 하나였습니다. 어떤 ASP.net 옵션을 조사해야합니까? Microsoft 드라이버 외에 어떤 것이 더 필요합니까?
Rachael

ADO.Net 또는 Entity Framework / LinqToSql을 실제로 사용할 수 있습니다.
Vikram
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.