MySQL là một Hệ thống quản lý cơ sở dữ liệu quan hệ [RDBMS] cực kỳ phổ biến - và từ lâu đã trở thành một phần chính trong bộ công cụ của bất kỳ kỹ sư back-end nào, ngay bên cạnh PostgreSQL
Với sự ra đời của JavaScript cho back-end, thông qua Node. js' tăng ngoạn mục về mức độ phổ biến và khả năng ứng dụng - MySQL thường được sử dụng làm cơ sở dữ liệu cho các dự án và ứng dụng được xây dựng bằng Node
Trong hướng dẫn này, chúng ta sẽ xem cách tích hợp MySQL với một máy chủ Node. ứng dụng js. Chúng ta sẽ thực hiện quy trình thiết lập, thực hiện các hoạt động CRUD theo chương trình và xem xét bảo mật truy vấn cơ bản bằng cách thoát đầu vào và đặt thời gian chờ
Ghi chú. Xuyên suốt hướng dẫn, chúng tôi sẽ gọi trình điều khiển MySQL của
$ npm install mysql
8 là $ npm install mysql
9 và bản thân cơ sở dữ liệu MySQL là MySQLThiết lập MySQL
Để làm việc với MySQL - bạn cần tải xuống Cơ sở dữ liệu MySQL và lưu trữ một máy chủ nhỏ trên máy cục bộ của bạn. Phiên bản cộng đồng hoàn toàn miễn phí
Bạn cũng có thể chọn cài đặt máy chủ web nguồn mở có hỗ trợ cơ sở dữ liệu MySQL [Xampp, Lampp] - chúng cũng hoạt động tốt với trình điều khiển MySQL của Node
Trình cài đặt rất đơn giản và khi bạn đã thiết lập một phiên bản dịch vụ, bạn có thể tạo một dự án để kết nối với nó
Trình điều khiển MySQL cho các dự án nút
Giả sử rằng máy chủ đang chạy, bạn có thể giao tiếp với nó theo chương trình thông qua ứng dụng Nút, sử dụng trình điều khiển. Để một ứng dụng có khả năng này, bạn cần cài đặt Trình điều khiển MySQL. Một trình điều khiển có sẵn trên
$ npm install mysql
8 như $ npm install mysql
9Để bắt đầu, hãy tạo một thư mục mới để lưu trữ ứng dụng của chúng ta và khởi tạo một dự án Node mới, với các cài đặt mặc định
$ mkdir mysql-app
$ cd mysql-app
$ npm init -y
Điều này sẽ tạo ra một
...
"dependencies": {
"mysql": "^2.18.1"
}
2 mới chứa siêu dữ liệu cơ bản cho dự án của chúng ta. Khi điều này được thực hiện, chúng tôi có thể cài đặt gói trình điều khiển nút MySQL qua $ npm install mysql
8$ npm install mysql
Chúng tôi có thể xác minh rằng quá trình cài đặt đã thành công bằng cách kiểm tra tệp
...
"dependencies": {
"mysql": "^2.18.1"
}
2 của bạn, nơi chúng tôi sẽ tìm thấy một mục nhập mới cho _______ 09 được thêm vào dưới _________ 56 ...
"dependencies": {
"mysql": "^2.18.1"
}
Ghi chú.
...
"dependencies": {
"mysql": "^2.18.1"
}
7 đại diện cho số phiên bản và số này sẽ khác nhau tùy thuộc vào phiên bản MySQL bạn đã cài đặtThiết lập kết nối
Một đối tượng kết nối có thể được tạo thông qua hàm
...
"dependencies": {
"mysql": "^2.18.1"
}
8 của thể hiện $ npm install mysql
9. Đối tượng này sau đó có thể được sử dụng để tạo kết nối giữa máy chủ và máy khách/trình điều khiển. Nó chấp nhận ba tham số- Máy chủ lưu trữ -
50 cơ sở dữ liệu của bạn. Giá trị mặc định là$ npm install mysql
51$ npm install mysql
- Người dùng - Tên người dùng của quản trị viên cơ sở dữ liệu được ủy quyền. Giá trị mặc định là
52$ npm install mysql
- Mật khẩu - Mật khẩu của quản trị viên cơ sở dữ liệu được ủy quyền. Giá trị mặc định là một chuỗi rỗng [không có mật khẩu]
- Cơ sở dữ liệu - Một đối số tùy chọn xác định tên cơ sở dữ liệu mà bạn muốn thực hiện sửa đổi
Với những lưu ý này, hãy mở tệp
$ npm install mysql
53 mặc định - và chúng tôi có thể kết nối với máy chủ MySQL bằng$ npm install mysql
5Khi một kết nối đã được cấu hình, bạn chỉ cần
$ npm install mysql
54 tới máy chủ. Hàm $ npm install mysql
54 sử dụng hàm gọi lại cho phép bạn kiểm tra xem kết nối có thành công hay khôngViết truy vấn thông qua JavaScript
Hầu như tất cả các hành động bạn cần thực hiện trong cơ sở dữ liệu MySQL đều được thực hiện thông qua các truy vấn, được viết bằng SQL một cách tự nhiên. Phương thức
$ npm install mysql
56 của đối tượng $ npm install mysql
57 chấp nhận một chuỗi, đại diện cho một truy vấn mà chúng tôi muốn gửi đến cơ sở dữ liệuMột truy vấn có thể không thành công hoặc trả về một số kết quả, vì vậy, chúng tôi sẽ có một cuộc gọi lại khác với
$ npm install mysql
58 hoặc $ npm install mysql
59 dựa trên cách hoạt động diễn raTạo cơ sở dữ liệu
Hãy bắt đầu bằng cách tạo cơ sở dữ liệu thông qua trình điều khiển MySQL của Node. Bạn có thể tạo cơ sở dữ liệu trên máy chủ thông qua CLI [nếu bạn đã cài đặt nó] hoặc thông qua bất kỳ hình thức GUI nào - chính thức hoặc bên thứ ba.
Ngoài ra, bạn có thể sử dụng kết nối chúng tôi đã tạo để gửi truy vấn tạo cơ sở dữ liệu cho bạn. Hãy tạo một cơ sở dữ liệu
$ npm install mysql
60 mới. Trong thư mục gốc của dự án, trong cùng một $ npm install mysql
53 mà chúng ta đã sử dụng trước đây, hãy thêm một cuộc gọi $ npm install mysql
56 sau khi kết nối với cơ sở dữ liệu, nếu kết nối thành côngSau khi xác minh xem kết nối của chúng tôi có thành công hay không, chúng tôi đã thực hiện truy vấn bằng chuỗi truy vấn -
$ npm install mysql
63, tạo cơ sở dữ liệu mới nếu chưa có. Bây giờ, hãy chạy dự án$ npm install mysql
6Kết quả nào trong
$ npm install mysql
1Đáng kinh ngạc. Bây giờ cơ sở dữ liệu
$ npm install mysql
60 đã tồn tại, chúng ta có thể loại bỏ truy vấn tạo cơ sở dữ liệu và thay vào đó kết nối thẳng với $ npm install mysql
60 trong cấu hình$ npm install mysql
4Tạo bản ghi
Cũng giống như mọi cơ sở dữ liệu quan hệ khác, các bản ghi dữ liệu trong MySQL được lưu trữ trong các bảng có cột và hàng. Một bảng có thể bao gồm bất kỳ số lượng cột và hàng tùy ý nào, nhưng chúng phải nhất quán. Các cột trong cơ sở dữ liệu đại diện cho các tính năng/trường của một đối tượng và mỗi hàng đại diện cho một mục nhập
Mỗi hàng phải có một giá trị cho mỗi cột và chỉ những cột đó, ngay cả khi nó chỉ là
66. Lược đồ phải nhất quán cho bất kỳ cơ sở dữ liệu quan hệ nào$ npm install mysql
Điều này có nghĩa là chúng ta sẽ cần tạo trước một bảng và xác định lược đồ của nó [các cột và loại cho mỗi bảng] để thêm các bản ghi mới vào cơ sở dữ liệu của chúng ta
Để tạo một bảng mới trong MySQL, chúng ta sử dụng câu lệnh
$ npm install mysql
67. Giả sử chúng tôi muốn tạo một bảng $ npm install mysql
68 trong cơ sở dữ liệu $ npm install mysql
60 của chúng tôi. Một lần nữa, sau khi được kết nối, chúng ta có thể thực hiện truy vấn có liên quan$ npm install mysql
9Điều này tạo ra một bảng mới có thể chứa các bản ghi với các trường
$ npm install mysql
10 và $ npm install mysql
11. Mỗi mục nhập sẽ có một $ npm install mysql
10 và $ npm install mysql
11, ngay cả khi một số trong số chúng là null. Ngoài ra, chúng tôi đã đặt loại của chúng là $ npm install mysql
14 với độ dài tối đa là 255 ký tựĐây là nơi bạn có thể đặt thêm các ràng buộc khác, chẳng hạn như một số trường nhất định là bắt buộc [
$ npm install mysql
15] hoặc $ npm install mysql
16/$ npm install mysql
17$ mkdir mysql-app
$ cd mysql-app
$ npm init -y
8Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Ở đây, không có trường nào có thể được đặt thành
$ npm install mysql
66 và mỗi trường có một số loại dữ liệu được liên kếtGhi chú. Trong SQL, viết hoa từ khóa hay không không quan trọng.
$ npm install mysql
19 về mặt chức năng tương đương với $ npm install mysql
67, vì $ npm install mysql
41 là với $ npm install mysql
14. Tuy nhiên, quy ước chung là viết hoa các lệnh, từ khóa và các ràng buộc, đó không phải là một yêu cầuTạo bản ghi
Truy vấn
$ npm install mysql
43, theo sau là tên bảng và $ npm install mysql
44 được ánh xạ tới các cột của nó được sử dụng để chèn/tạo bản ghi bằng SQL. Chẳng hạn, hãy thêm một $ npm install mysql
45 vào bảng $ npm install mysql
68 của chúng ta ...
"dependencies": {
"mysql": "^2.18.1"
}
8Câu lệnh này, không ngạc nhiên, sẽ chèn một bản ghi [hàng] vào bảng
$ npm install mysql
68, với các giá trị cho $ npm install mysql
10 và $ npm install mysql
11. Truy vấn, như thường lệ, có thể được thực hiện thông qua $ npm install mysql
90Đọc hồ sơ
Chúng tôi không chỉ muốn lưu trữ dữ liệu - chúng tôi còn muốn có thể đọc được dữ liệu đó. Và, như được thấy bên dưới, chúng ta có thể truy xuất dữ liệu từ bảng
$ npm install mysql
68 bằng truy vấn $ npm install mysql
92Chúng tôi có thể chọn các bản ghi cụ thể hoặc sử dụng ký tự đại diện [______393] để chọn tất cả các bản ghi có sẵn
$ npm install mysql
0Chạy mã này sẽ trả về tất cả dữ liệu có trong bảng của chúng tôi
$ npm install mysql
1Ngoài ra, bạn có thể sử dụng câu lệnh
$ npm install mysql
94 để tạo một dải các hàng phù hợp$ npm install mysql
2Cái nào sẽ trả về tất cả các sinh viên, có ID nằm trong khoảng từ 1 đến 5
Cập nhật hồ sơ
Chúng ta có thể sử dụng câu lệnh
$ npm install mysql
95 để cập nhật các bảng cơ sở dữ liệu và nội dung của chúng. Chẳng hạn, bạn có thể sử dụng một số câu lệnh để xác định một bản ghi nhất định và cập nhật bản ghi đó. Nói chung, một $ npm install mysql
96 phải là một $ npm install mysql
16 để xác định một hàng, cũng như một giá trị duy nhất, vì vậy, $ npm install mysql
96 thường là cột để tìm kiếm các bản ghiGiả sử chúng ta muốn cập nhật khóa học của sinh viên,
$ npm install mysql
45, từ $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
80 lên $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
81, cùng với người anh em họ của anh ấy. John's $ npm install mysql
96 là $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
83$ npm install mysql
3Kết quả của một truy vấn như thế này thường bao gồm các chi tiết về cách truy vấn ảnh hưởng đến bảng, đó là cách bạn có thể xác minh xem kết quả có hoạt động như bạn dự định hay không.
$ npm install mysql
4Xóa bản ghi
Cuối cùng, để xóa bản ghi - chúng tôi sử dụng câu lệnh
$ mkdir mysql-app
$ cd mysql-app
$ npm init -y
84 và chỉ định bản ghi nào sẽ bị xóa$ npm install mysql
5Ghi chú. Bạn nên cẩn thận khi sử dụng câu lệnh
$ mkdir mysql-app
$ cd mysql-app
$ npm init -y
84 và chỉ định cẩn thận mệnh đề $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
86. Ngoài ra, nếu bạn không chỉ định mệnh đề $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
86, toàn bộ nội dung của bảng sẽ bị xóaThoát giá trị truy vấn
Một khai thác ban đầu phổ biến đã được phát hiện khi các kỹ sư phần mềm cho phép sử dụng đầu vào của người dùng trong các lệnh gọi SQL. Chẳng hạn, bạn có thể có một thanh tìm kiếm với trường nhập liệu. Người dùng sẽ chèn tên của một cuốn sách và đầu vào đó sẽ được sử dụng trong một truy vấn, chẳng hạn như
$ npm install mysql
6Đương nhiên,
$ mkdir mysql-app
$ cd mysql-app
$ npm init -y
88 sẽ được thay thế bằng một chuỗi, chẳng hạn như $ mkdir mysql-app
$ cd mysql-app
$ npm init -y
89. Tuy nhiên, điều này mở ra cơ hội cho những khai thác khổng lồ, đơn giản như thoát khỏi truy vấn bạn đã tạo và chạy truy vấn của riêng chúngChẳng hạn, nếu hệ thống được xây dựng để chấp nhận đầu vào một cách ngây thơ và chèn nó vào truy vấn, thì người dùng chỉ cần nhập
...
"dependencies": {
"mysql": "^2.18.1"
}
80 để khai thác truy vấn của bạn là đủ$ npm install mysql
7Dấu chấm phẩy sẽ kết thúc câu lệnh trước đó và câu lệnh tiếp theo sẽ chạy, xóa toàn bộ bảng khỏi cơ sở dữ liệu và xóa tất cả sách. Đây là một ví dụ đơn giản về SQL Injection và các cuộc tấn công có thể phức tạp hơn thế này rất nhiều. Ngoài ra, không phải tất cả các cuộc tấn công đều có thể phá hoại - kẻ tấn công cũng có thể chỉ đọc dữ liệu nhạy cảm, đây là một cuộc tấn công thầm lặng thường nằm dưới radar
Dựa vào mức độ phổ biến của các cuộc tấn công này - hầu hết các gói đều có bảo mật tích hợp cơ bản. Trình điều khiển
$ npm install mysql
9 được xây dựng cho Node cung cấp các chức năng và biện pháp giúp tránh SQL InjectionsPhương pháp phổ biến nhất là thoát các giá trị và sử dụng chúng làm tham số được đặt tên thay thế
Bằng cách sử dụng ký tự thoát
...
"dependencies": {
"mysql": "^2.18.1"
}
82 - bạn thoát đầu vào và biến nó thành một chuỗi ký tự, không thể đánh giá được. Nếu ai đó đã nhập một lệnh vào trường đầu vào dẫn đến tham số này - nó sẽ không được đánh giá là một lệnh. Nó sẽ được coi là một chuỗi ký tự và thay vào đó, một truy vấn sẽ được gửi để tìm một cuốn sách có tên khớp với lệnh đóPhương thức chấp nhận một mảng các tham số, được nhập tuần tự vào truy vấn. Nếu truy vấn có 2 tham số được chú thích, thì mục đầu tiên trong danh sách sẽ được ánh xạ tới tham số đầu tiên và các mục thứ hai trong danh sách sẽ được ánh xạ tới tham số thứ hai
Ngoài ra, bạn có thể thêm các giá trị này một cách rõ ràng thông qua định dạng chuỗi của JavaScript và sử dụng phương thức
...
"dependencies": {
"mysql": "^2.18.1"
}
83 để thoát khỏi các lệnh có thể, tuy nhiên - cách tiếp cận này thường khó đọc hơnMọi hoạt động liên quan đến kết nối sẽ chấm dứt sau khoảng thời gian chờ mặc định và chúng tôi có thể khắc phục điều này bằng cách đặt phiên hết thời gian ưu tiên của riêng mình. Điều này được thực hiện bằng cách chuyển một đối tượng tới hàm
...
"dependencies": {
"mysql": "^2.18.1"
}
84, với truy vấn của chúng tôi và phiên hết thời gian chờ [tính bằng mili giây] là các trường của đối tượng đóMã này sẽ chạy một truy vấn
$ npm install mysql
92 sẽ kết thúc sau 50 giây, nếu không có kết quả nào được trả vềSự kết luận
MySQL là một cơ sở dữ liệu quan hệ thường được sử dụng. Trong hướng dẫn này, chúng ta đã xem cách cài đặt trình điều khiển cho máy chủ MySQL cho một máy chủ Node. js, cách thiết lập kết nối với máy chủ và thực hiện các thao tác CRUD
Cuối cùng, chúng tôi đã lưu ý tầm quan trọng của việc thoát đầu vào của người dùng và đã xem xét tùy chỉnh thời gian chờ