μ΅μ nodejsμ μ§λ£¨ν λ²μ κ³Ό λ€μ μ½λ μ¬μ©:
var μ°κ²° = νμ('μ§λ£¨ν').μ°κ²°;
var μμ² = μꡬ('μ§λ£¨ν').μμ²;
λ³μ κ΅¬μ± =
{
μλ²: '192.168.1.113',
μ¬μ©μ μ΄λ¦: 'myUserName',
λΉλ°λ²νΈ: 'myPassword',
μ΅μ
:
{
λ°μ΄ν°λ² μ΄μ€: 'MyDatabase',
ν¬νΈ: '1433',
μνΈν: μ¬μ€,
λλΌμ΄λ²: 'SQL Server λ€μ΄ν°λΈ ν΄λΌμ΄μΈνΈ 11.0'
},
λλ²κ·Έ:
{
ν¨ν·: μ¬μ€,
λ°μ΄ν°: μ¬μ€,
νμ΄λ‘λ: μ¬μ€,
ν ν°: μ¬μ€,
λ‘κ·Έ: μ¬μ€
}
};
var μ°κ²° = μλ‘μ΄ μ°κ²°(ꡬμ±);
connection.on('μ°κ²°', μ°κ²°λ¨);
connection.on('μ 보 λ©μμ§', μ 보 μ€λ₯);
connection.on('μ€λ₯ λ©μμ§', infoError);
connection.on('λ', λ);
connection.on('λλ²κ·Έ', λλ²κ·Έ);
κΈ°λ₯ μ°κ²°(μ€λ₯)
{
console.log('μ°κ²°λ¨=> ' + μ€λ₯);
}
ν¨μ μ 보 μ€λ₯(μ 보)
{
console.log('infoError=> ' + μ 보);
}
ν¨μ λλ²κ·Έ(λ©μμ§)
{
console.log('λλ²κ·Έ=> ' + λ©μμ§);
}
ν¨μ λ()
{
}
μ€νν ν λ€μ μ€λ₯κ° λ°μν©λλ€.
λ
Έλ test_sqlserver_tedious.js
λλ²κ·Έ => 192.168.1.113:1433μ λν μ°κ²° - μ€ν¨ μ€λ₯: ECONNREFUSED μ°κ²°
λλ²κ·Έ=> μν λ³κ²½: μ°κ²° μ€ -> μ΅μ’
λλ²κ·Έ => 192.168.1.113:1433μ λν μ°κ²°μ΄ λ«νμ΅λλ€.
λλ²κ·Έ=> μν λ³κ²½: μ΅μ’
-> μ΅μ’
μ΄λ€ μμ΄λμ΄? λ°©λ²μ μλ €μ£Όμλ©΄ μμ€ ν μ€νΈλ₯Ό λμλ릴 μ μμ΅λλ€.
κ°μ¬ ν΄μ
ECONNREFUSEDλ 192.168.1.113μ΄ ν¬νΈ 1433μμ μμ λκΈ°νμ§ μμμ λνλ λλ€.
SQL Server μΈμ€ν΄μ€μ νμ€ν TCPκ° νμ±νλμ΄ μμ΅λκΉ?
192.168.1.113μ ν¬νΈ 1433μΌλ‘ ν
λ·ν μ μμ΅λκΉ(μ§λ£¨ν μμ€ν
μ μ¬μ©νλ μμ€ν
μμ)? κ·Έλ μ§ μμ κ²½μ° 192.168.1.113μμ μ§μ ν¬νΈ 1433μΌλ‘ ν
λ·ν μ μμ΅λκΉ? μλμ€μΈ κ²½μ° SQL Serverκ° ν¬νΈμμ μμ λκΈ°νκ³ μμ§ μμμ λνλ
λλ€. κ·Έλ λ€λ©΄ 무μΈκ°(λ°©νλ²½ λ±)κ° λ¬Έμ μ μμΈμμ μμ¬ν©λλ€.
μ€λ₯κ° λ°μν©λλ€.
λλ²κ·Έ=> μ μλμ§ μμ μ°κ²°:1433 - μ€ν¨ μ€λ₯: ECONNREFUSED μ°κ²°
λλ²κ·Έ=> μν λ³κ²½: μ°κ²° μ€ -> μ΅μ’
λλ²κ·Έ=> μ μλμ§ μμ μ°κ²°:1433 λ«ν
λλ²κ·Έ=> μν λ³κ²½: μ΅μ’
-> μ΅μ’
debug=> connection to undefined:1433 closed
undefined
μ΄ μμ¬μ€λ½μ΅λλ€. κ±°κΈ°μ μλ² μ΄λ¦μ΄λ IP μ£Όμκ° νμλ κ²μΌλ‘ μμν©λλ€.
λ°μ΄ν°λ² μ΄μ€ μλ²: 192.168.11.8\SQLEXPRESS2008
λ°μ΄ν°λ² μ΄μ€ ν¬νΈ: 1433
@flybluewolf λ΄ λ΅λ³μ΄ κ΄λ ¨μ΄ μλ€κ³ μκ°νλ―λ‘ λ¬Έμ #68μ μ΄ν΄λ³΄μΈμ.
OK μ§κΈ μ°κ²°λλ κ² κ°μ΅λλ€. κ·Έλ¬λ κ°λ¨ν μ νμ μλνλ©΄ κ·Έλ₯ λ©μΆ₯λλ€.
λλ²κ·Έ μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€.
ν¬νΈ 51981μμ μμ λκΈ°νλ λλ²κ±°
λλ²κ·Έ => 127.0.0.1:1433μ μ°κ²°λ¨
λλ²κ·Έ=> μν λ³κ²½: μ°κ²° μ€ -> SentPrelogin
λλ²κ·Έ=> μν λ³κ²½: SentPrelogin -> SentLogin7WithStandardLogin
infoError=> [κ°μ²΄ κ°μ²΄]
infoError=> [κ°μ²΄ κ°μ²΄]
debug=> ν¨ν· ν¬κΈ°κ° 4096μμ 4096μΌλ‘ λ³κ²½λ¨
λλ²κ·Έ=> μν λ³κ²½: SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
λλ²κ·Έ=> μν λ³κ²½: LoggedInSendingInitialSql -> LoggedIn
λ΄ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
var μ°κ²° = νμ('μ§λ£¨ν').μ°κ²°;
var μμ² = μꡬ('μ§λ£¨ν').μμ²;
λ³μ κ΅¬μ± =
{
μλ²: "127.0.0.1",
μ¬μ©μ μ΄λ¦: "μ¬μ©μ μ΄λ¦",
λΉλ°λ²νΈ: "μ¬μ©μ λΉλ°λ²νΈ",
λ°μ΄ν°λ² μ΄μ€: "MyDatabase",
μ΅μ
:
{
λ°μ΄ν°λ² μ΄μ€: "MyDatabase",
// ν¬νΈ: "1433",
//μνΈν: μ°Έ,
// λλΌμ΄λ²: "SQL μλ² λ€μ΄ν°λΈ ν΄λΌμ΄μΈνΈ 11.0"
},
λλ²κ·Έ:
{
ν¨ν·: μ¬μ€,
λ°μ΄ν°: μ¬μ€,
νμ΄λ‘λ: μ¬μ€,
ν ν°: μ¬μ€,
λ‘κ·Έ: μ¬μ€
}
};
var μ°κ²° = μλ‘μ΄ μ°κ²°(ꡬμ±);
connection.on('μ°κ²°', μ°κ²°λ¨);
connection.on('μ 보 λ©μμ§', μ 보 μ€λ₯);
connection.on('μ€λ₯ λ©μμ§', infoError);
connection.on('λ', λ);
connection.on('λλ²κ·Έ', λλ²κ·Έ);
κΈ°λ₯ μ°κ²°(μ€λ₯)
{
μ€νλ¬Έ();
}
ν¨μ μ€νλ¬Έ()
{
var request = new Request("Property.PropertyGroupsμμ * μ ν", function(err, row_count)
{
λ§μ½(μ€λ₯)
{
}
λ λ€λ₯Έ
{
console.log(row_count);
}
connection.close();
});
request.on('row', function(columns)
{
columns.forEach((function(column)
{
console.log(column.value);
}))
})
}
ν¨μ μ 보 μ€λ₯(μ 보)
{
var dd = μ 보;
console.log('infoError=> ' + μ 보);
}
ν¨μ λλ²κ·Έ(λ©μμ§)
{
var dd = λ©μμ§;
console.log('λλ²κ·Έ=> ' + λ©μμ§);
}
ν¨μ λ()
{
var dd = '';
}
'netstat -na'λ₯Ό μ€ννμ§λ§ UDP 1444 ν¬νΈλ₯Ό μ°Ύμ§ λͺ»νμ΅λλ€.
κ·νμ μ½λμμ connection.exec...(request)
μ λν νΈμΆμ λ³Ό μ μμ΅λλ€. λ°λΌμ μμ²μ΄ μ€νλμ§ μμ΅λλ€. μ΄λ debug=> State change: ...
λ©μμ§μ μΌμΉν©λλ€. μΈμ¦μ΄ μλ£λλ©΄ μ€μ§λ©λλ€.
μ΄, μκ² μ΅λλ€. νΈλ¦μ νμ΅λλ€. μ λ§ κ°μ¬ν©λλ€ :D
@adviner μ @flybluewolf λ λμΌμΈλ¬Όμ΄λ©° μ΄ λ¬Έμ λ ν κ°μ§ λ¬Έμ λ§ λ€λ£¨κ³ μλ€κ³ μκ°νμλκΉ?
μ κ° ν리면 λ€μ μ΄μ΄μ£ΌμΈμ.
μλ, λ μ¬λμ λ€λ₯Έ μ¬λμ λλ€. λλ ν¬μ€νΈλ₯Ό μμνκ³ μ§κΈ κ·Έκ²μ μλμν¨λ€.
μλ νμΈμ, μ΄κ²μ λμ΄λ €μ μ£μ‘νμ§λ§ @advinerκ° κ²μν λ§μ§λ§ μ½λ μ‘°κ°μ μ¬μ©νλ λ° λ¬Έμ κ°
λλ²κ·Έ=> SERVERt:1433μ μ°κ²°λ¨
λλ²κ·Έ=> μν λ³κ²½: μ°κ²° μ€ -> SentPrelogin
λλ²κ·Έ=> μν λ³κ²½: SentPrelogin -> SentLogin7WithStandardLogin
debug=> SERVERμ λν μ°κ²°:1433μ΄ λ«νμ΅λλ€.
λλ²κ·Έ=> μν λ³κ²½: SentLogin7WithStandardLogin -> μ΅μ’
debug=> SERVERμ λν μ°κ²°:1433μ΄ λ«νμ΅λλ€.
λλ²κ·Έ=> μν λ³κ²½: μ΅μ’
-> μ΅μ’
(μλ² URLμ΄ κ°λ €μ‘μ΅λλ€).
λ°μ΄ν°λ² μ΄μ€λ Azureμμ μ€ν μ€μ΄λ©° λ Έλλ₯Ό μ€ννλ λ¨Έμ μμ ν λ·μΌλ‘ μ°κ²°ν μ μμ΅λλ€.
λμμ μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
μ κ° μκΈ°λ‘λ Azure λ°μ΄ν°λ² μ΄μ€μλ μνΈνλ μ°κ²°μ΄ νμν©λλ€.
κ·Έλμ μλ§λ μ°κ²° μ΅μ
μμ encrypt: true
λ‘ μ°κ²°νλ κ² κ°μ΅λκΉ? https://github.com/pekim/tedious/issues/65#issuecomment -11765693μ΄ μ£Όμ μ²λ¦¬λμ΄ μκΈ° λλ¬Έμ 묻μ΅λλ€.
μ¬μ© μ€μΈ μ½λλ connected
ν¨μμΈ Connection μ½λ°±μμ μ€λ₯λ₯Ό νμΈνμ§ μμ΅λλ€. μ€λ₯κ° λ³΄κ³ λ μ μμΌλ―λ‘ μμ ν΄μΌ ν©λλ€.
λ Έλ v0.10(λ° v0.9)κ³Όμ μνΈνλ μ§λ£¨ν μ°κ²°μ΄ λμ΄μ‘μ΅λλ€. μ’ λ μμΈν μ 보λ #86μ μ°Έμ‘°νμΈμ. 컀λ°μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ€κ³ μκ°ν©λλ€.
v0.10 λ¬Έμ λ₯Ό μμ νλ λμΌν 컀λ°μ μνΈν μνΈλ₯Ό κΈ°λ³Έμ μΌλ‘ RC4-MD5λ‘ μ€μ ν©λλ€. μμ§ DES-CBC3-SHAμμ μλνλ μνΈνλ μ°κ²°μ κ΄λ¦¬νμ§ λͺ»νκΈ° λλ¬Έμ λλ€. μ΄λ λ Έλ v0.8μλ μ μ©λ©λλ€.
λ§μ€ν°μμ μ΅μ μ½λλ₯Ό μ¬μ©νμ¬ μμ μ¬νμ λ°μλ³Ό μ μμ΅λκΉ?
κ·Έλλ μ€ν¨νλ©΄ λͺ¨λ λλ²κ·Έ μΆλ ₯μ μμ μ΄λ pastebinμ λ£μ μ μμ΅λκΉ? TDS ν¨ν·μ 16μ§ λ€νλ₯Ό ν¬ν¨νμ¬ λ§μ μΈλΆ μ 보λ₯Ό μ»μ΄μΌ ν©λλ€. μλ§λ login7 ν¨ν·μμ μΌλΆ μΈλΆ μ 보λ₯Ό μμ νκ³ μΆμ κ²μ λλ€.
λΉ λ₯Έ μλ΅μ κ°μ¬λ립λλ€. μ΄μ μ€λ₯κ° λ°μνμ§λ§ μ΄μ λ€μκ³Ό κ°μ κ²°κ³Όκ° λνλ©λλ€.
λλ²κ·Έ=> XXX.database.windows.net:1433μ μ°κ²°λ¨
λλ²κ·Έ=> μν λ³κ²½: μ°κ²° μ€ -> SentPrelogin
λλ²κ·Έ=> μν λ³κ²½: SentPrelogin -> SentTLSSSLNegotiation
λλ²κ·Έ=> TLS νμ(RC4-MD5, TLSv1/SSLv3)
λλ²κ·Έ=> μν λ³κ²½: SentTLSSSLNegotiation -> SentLogin7WithStandardLogin
infoError=> [κ°μ²΄ κ°μ²΄]
{"number":40531,"state":1,"class":11,"message":"μλ² μ΄λ¦μ νμΈν μ μμ΅λλ€. μλ² dns μ΄λ¦(servername.database.windows.net)μ 첫 λ²μ§Έ μΈκ·Έλ¨ΌνΈλ‘ λνλμΌ ν©λλ€. ). μΌλΆ λΌμ΄λΈλ¬λ¦¬λ μλ² μ΄λ¦μ 보λ΄μ§ μμ΅λλ€. μ΄ κ²½μ° μλ² μ΄λ¦μ μ¬μ©μ μ΄λ¦(username@servername)μ μΌλΆλ‘ ν¬ν¨λμ΄μΌ ν©λλ€. λν λ νμμ λͺ¨λ μ¬μ©νλ κ²½μ° μλ² μ΄λ¦μ΄ μΌμΉν΄μΌ ν©λλ€."," serverName":"","procName":"","lineNumber":1,"μ΄λ¦":"μ€λ₯","μ΄λ²€νΈ":"μ€λ₯ λ©μμ§"}
λ‘κ·ΈμΈ μ€ν¨; νλ μ΄μμ errorMessage μ΄λ²€νΈκ° λ°μνμ΄μΌ ν©λλ€.
λλ²κ·Έ=> μν λ³κ²½: SentLogin7WithStandardLogin -> μ΅μ’
debug=> XXXX.database.windows.net:1433μ λν μ°κ²°μ΄ λ«νμ΅λλ€.
λλ²κ·Έ=> μν λ³κ²½: μ΅μ’
-> μ΅μ’
μλ² μ΄λ¦μ XXXλ‘ νμλλ©°(κ°μ ) azure dbμ λν μ°κ²° λ¬Έμμ΄μ μΌλΆμ λλ€.
λ§μ§λ§ λ¬Έμ λ μ°κ²° λ¬Έμμ΄ Everything's working nowμ λ¬Έμ κ° μμμ΅λλ€. κ°μ¬ν©λλ€!
νμμ μ΄λ€.
μ΄κ²μ masterμ μ΅μ μ½λμ
λκΉ, μλλ©΄ μ§λ£¨ν λ¦΄λ¦¬μ€ λ²μ μ
λκΉ?
λ§μ€ν°μμ μ΅μ λ²μ 볡μ
μΉμ νλ μ λ¬Έκ° μ¬λ¬λΆ,
λλ κ°μ μ€λ₯μ μ§λ©΄νμ§λ§ λ¬Έμ λ μ°κ²°μ΄ μ€μ λ ν μ€λ₯κ° λ°μνκ³ λ°μ΄ν°λ² μ΄μ€μ ν° νμΌμ μ½μ
νκ³ μλ€λ κ²μ
λλ€. μμ νμΌμλ λ¬Έμ κ° μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΆκ°
dbμμ μ΄ κ°μ Έμ€κΈ°
ν
μ΄λΈ μ΄μ μ±κ³΅μ μΌλ‘ κ°μ Έμμ΅λλ€.
DBμ ν μΆκ°
μ±κ³΅μ μΌλ‘ μ½μ
λ ν
λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΆκ°
dbμμ μ΄ κ°μ Έμ€κΈ°
ν
μ΄λΈ μ΄μ μ±κ³΅μ μΌλ‘ κ°μ Έμμ΅λλ€.
DBμ ν μΆκ°
μ±κ³΅μ μΌλ‘ μ½μ
λ ν
λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΆκ°
dbμμ μ΄ κ°μ Έμ€κΈ°
ν
μ΄λΈ μ΄μ μ±κ³΅μ μΌλ‘ κ°μ Έμμ΅λλ€.
DBμ ν μΆκ°
μ±κ³΅μ μΌλ‘ μ½μ
λ ν
λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΆκ°
dbμμ μ΄ κ°μ Έμ€κΈ°
ν
μ΄λΈ μ΄μ μ±κ³΅μ μΌλ‘ κ°μ Έμμ΅λλ€.
DBμ ν μΆκ°
{ [ConnectionError: localhost:1433 μ°κ²° μ€ν¨ - EADDRINUSE 127 .0.0.1:1433 μ°κ²°] μ΄λ¦: 'ConnectionError', λ©μμ§: ' localhost:1433 μ°κ²° μ€ν¨ - EADDRINUSE 127.0.0.1:1 433 μ°κ²°', μ½λ : 'μμμΌ' }
κ·νμ μ§μμ κ°μ¬λ립λλ€.
@Beniy μ΄κ²μ μ¬ννλ λ° μ¬μ©ν μ μλ μμ μ½λκ° μμ΅λκΉ?
μΉμ νλ Arthurschreiber,
μ€μ λ‘ λ¬Έμ λ ν
μ€νΈ νμΌμ ꡬ문 λΆμνκ³ dbμ μ½μ
νκΈ° λλ¬Έμ μ½λμ κ΄λ ¨μ΄ μμ μ μμ§λ§ λμΌν νμΌκ³Ό λμΌν 쑰건μ΄μ§λ§ λ€λ₯Έ μκ°μ ν΄λΉ μ€λ₯κ° νμλλ κ²½μ°λ μμ΅λλ€.
μ΄ μμ
μ λν λ€λ₯Έ μ’
μμ±μ μκ³ μΆμ΅λκΉ?
κ°μ¬ ν΄μ
κ°μ₯ μ μ©ν λκΈ
ECONNREFUSEDλ 192.168.1.113μ΄ ν¬νΈ 1433μμ μμ λκΈ°νμ§ μμμ λνλ λλ€.
SQL Server μΈμ€ν΄μ€μ νμ€ν TCPκ° νμ±νλμ΄ μμ΅λκΉ?
192.168.1.113μ ν¬νΈ 1433μΌλ‘ ν λ·ν μ μμ΅λκΉ(μ§λ£¨ν μμ€ν μ μ¬μ©νλ μμ€ν μμ)? κ·Έλ μ§ μμ κ²½μ° 192.168.1.113μμ μ§μ ν¬νΈ 1433μΌλ‘ ν λ·ν μ μμ΅λκΉ? μλμ€μΈ κ²½μ° SQL Serverκ° ν¬νΈμμ μμ λκΈ°νκ³ μμ§ μμμ λνλ λλ€. κ·Έλ λ€λ©΄ 무μΈκ°(λ°©νλ²½ λ±)κ° λ¬Έμ μ μμΈμμ μμ¬ν©λλ€.