Thứ năm, 15/10/2020 | 00:00 GMT+7

Cách cài đặt phpMyAdmin từ nguồn trên Debian 10

Trong khi nhiều user cần chức năng của hệ thống quản lý database như MariaDB, họ có thể không cảm thấy thoải mái khi tương tác với hệ thống chỉ từ dấu nhắc MariaDB.

phpMyAdmin được tạo ra để user có thể tương tác với MariaDB thông qua giao diện web. Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt và bảo mật phpMyAdmin để bạn có thể sử dụng nó một cách an toàn để quản lý database của bạn trên hệ thống Debian 10.

Yêu cầu

Trước khi bắt đầu với hướng dẫn này, bạn cần những thứ sau:

Lưu ý: MariaDB là một fork do cộng đồng phát triển của MySQL và mặc dù hai chương trình có liên quan chặt chẽ với nhau nhưng chúng không thể swap cho nhau hoàn toàn. Mặc dù phpMyAdmin được thiết kế đặc biệt để quản lý database MySQL và tham chiếu đến MySQL trong các hộp thoại khác nhau, hãy yên tâm rằng cài đặt MariaDB của bạn sẽ hoạt động chính xác với phpMyAdmin.

Cuối cùng, có những lưu ý quan trọng về bảo mật khi sử dụng phần mềm như phpMyAdmin, vì nó:

  • Giao tiếp trực tiếp với cài đặt MariaDB của bạn
  • Xử lý xác thực bằng thông tin đăng nhập MariaDB
  • Thực thi và trả về kết quả cho các truy vấn SQL tùy ý

Vì những lý do này và bởi vì nó là một ứng dụng PHP được triển khai rộng rãi thường bị nhắm đến tấn công, bạn không nên chạy phpMyAdmin trên các hệ thống từ xa qua kết nối HTTP thuần túy.

Nếu bạn không có domain hiện có được cấu hình với certificate SSL / TLS, bạn có thể làm theo hướng dẫn này về cách bảo mật Apache bằng Let's Encrypt trên Debian 10 để cài đặt một domain . Điều này sẽ yêu cầu bạn đăng ký domain , tạo bản ghi DNS cho server của bạn cài đặt Server ảo Apache .

Khi bạn đã hoàn thành các bước này, bạn đã sẵn sàng để bắt đầu với hướng dẫn này.

Trước khi cài đặt và cấu hình phpMyAdmin, tài liệu chính thức khuyên bạn nên cài đặt một vài phần mở rộng PHP vào server của bạn để kích hoạt một số chức năng nhất định và cải thiện hiệu suất.

Nếu bạn đã làm theo hướng dẫn về LAMP tiên quyết, một số module này sẽ được cài đặt cùng với gói php . Tuy nhiên, bạn cũng nên cài đặt các gói này:

  • php-mbstring : một phần mở rộng PHP được sử dụng để quản lý các chuỗi không phải ASCII và chuyển đổi các chuỗi thành các mã hóa khác nhau
  • php-zip : một module PHP hỗ trợ tải các .zip lên phpMyAdmin
  • php-gd : một module PHP khác, module này cho phép hỗ trợ Thư viện đồ họa GD

Trước tiên, hãy cập nhật index gói của server của bạn nếu gần đây bạn chưa làm như vậy:

  • sudo apt update

Sau đó, sử dụng apt để kéo các file xuống và cài đặt chúng trên hệ thống của bạn:

  • sudo apt install php-mbstring php-zip php-gd

Tiếp theo, ta có thể cài đặt phpMyAdmin. Khi viết bài này, phpMyAdmin không có sẵn từ repository Debian mặc định, vì vậy bạn cần tải mã nguồn xuống server của bạn từ trang phpMyAdmin.

Để làm điều đó, hãy chuyển đến trang Download phpMyAdmin , cuộn xuống bảng có liên kết download cho bản phát hành ổn định mới nhất và sao chép liên kết download có tar.gz Liên kết này trỏ đến một file lưu trữ được gọi là tarball , khi được giải nén , sẽ tạo ra một số file trên hệ thống. Tại thời điểm viết bài này, version mới nhất là version 4.9.0.1.

Lưu ý: Trên trang Download này, bạn sẽ nhận thấy rằng có các liên kết download có nhãn all-languagesenglish . Các liên kết all-languages sẽ download version phpMyAdmin cho phép bạn chọn một trong 72 ngôn ngữ có sẵn, trong khi các liên kết english sẽ chỉ cho phép bạn sử dụng phpMyAdmin bằng tiếng Anh.

Hướng dẫn này sẽ sử dụng gói all-languages để minh họa cách cài đặt phpMyAdmin, nhưng nếu bạn định sử dụng phpMyAdmin bằng tiếng Anh, bạn có thể cài đặt gói english . Chỉ cần đảm bảo thay thế các liên kết và tên file nếu cần trong các lệnh sau.

Thay thế liên kết trong lệnh wget sau bằng liên kết download bạn vừa sao chép, sau đó nhấn ENTER . Thao tác này sẽ chạy lệnh và tải tarball xuống server của bạn:

  • wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

Sau đó extract tarball:

  • tar xvf phpMyAdmin-4.9.0.1-all-languages.tar.gz

Thao tác này sẽ tạo một số file và folder mới trên server của bạn trong folder mẹ có tên phpMyAdmin- 4.9.0.1 - all-languages .

Sau đó chạy lệnh sau. Thao tác này sẽ di chuyển folder phpMyAdmin- 4.9.0.1 - all-languages và tất cả các folder con của nó đến folder /usr/share/ , vị trí mà phpMyAdmin dự kiến sẽ tìm thấy các file cấu hình của nó theo mặc định. Nó cũng sẽ đổi tên folder tại chỗ thành phpmyadmin :

  • sudo mv phpMyAdmin-4.9.0.1-all-languages/ /usr/share/phpmyadmin

Như vậy, bạn đã cài đặt phpMyAdmin, nhưng có một số thay đổi cấu hình bạn phải thực hiện để có thể truy cập phpMyAdmin thông qua trình duyệt web.

Bước 2 - Cấu hình phpMyAdmin theo cách thủ công

Khi cài đặt phpMyAdmin bằng trình quản lý gói, như một người có thể làm trong môi trường Ubuntu, phpMyAdmin mặc định ở chế độ “Cấu hình không” thực hiện một số hành động tự động để cài đặt chương trình. Vì ta đã cài đặt nó từ nguồn trong hướng dẫn này, ta cần thực hiện các bước đó theo cách thủ công.

Để bắt đầu, hãy tạo một folder mới nơi phpMyAdmin sẽ lưu trữ các file tạm thời của nó:

  • sudo mkdir -p /var/lib/phpmyadmin/tmp

Đặt www-data - profile user Linux mà các web server như Apache sử dụng theo mặc định cho các hoạt động bình thường trong hệ thống Ubuntu và Debian - làm chủ sở hữu của folder này:

  • sudo chown -R www-data:www-data /var/lib/phpmyadmin

Các file bạn đã extract trước đó bao gồm file cấu hình mẫu mà bạn có thể sử dụng làm file cấu hình cơ sở của bạn . Tạo một bản sao của file này, giữ nó trong folder /usr/share/phpmyadmin và đổi tên nó là config.inc.php :

  • sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Mở file này bằng editor bạn muốn . Ở đây, ta sẽ sử dụng nano :

  • sudo nano /usr/share/phpmyadmin/config.inc.php

phpMyAdmin sử dụng phương pháp xác thực cookie theo mặc định, cho phép bạn đăng nhập vào phpMyAdmin với quyền là bất kỳ user MariaDB hợp lệ nào với sự trợ giúp của cookie . Trong phương pháp này, password user MariaDB được lưu trữ và mã hóa bằng thuật toán Tiêu chuẩn mã hóa nâng cao (AES) trong một cookie tạm thời.

Trước đây, phpMyAdmin thay vào đó đã sử dụng mật mã Blowfish cho mục đích này và điều này vẫn được phản ánh trong file cấu hình của nó. Cuộn xuống dòng bắt đầu bằng $cfg['blowfish_secret'] . Nó sẽ trông giống thế này:

/usr/share/phpmyadmin/config.inc.php
. . . $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ . . . 

Ở giữa các dấu nháy đơn, hãy nhập một chuỗi gồm 32 ký tự ngẫu nhiên. Đây không phải là passphrase (password bảo vệ) bạn cần nhớ, nó sẽ chỉ được sử dụng nội bộ bởi thuật toán AES:

/usr/share/phpmyadmin/config.inc.php
. . . $cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ . . . 

Lưu ý: Nếu passphrase (password bảo vệ) bạn nhập ở đây có độ dài ngắn hơn 32 ký tự, điều đó sẽ dẫn đến việc cookie được mã hóa kém an toàn hơn. Tuy nhiên, nhập một chuỗi dài hơn 32 ký tự sẽ không gây hại gì.

Để tạo một chuỗi ký tự ngẫu nhiên thực sự, bạn có thể cài đặt và sử dụng chương trình pwgen :

  • sudo apt install pwgen

Theo mặc định, pwgen tạo password dễ phát âm, mặc dù kém an toàn hơn. Tuy nhiên, bằng cách thêm cờ -s , như trong lệnh sau, bạn có thể tạo một password hoàn toàn ngẫu nhiên, khó ghi nhớ. Lưu ý hai đối số cuối cùng của lệnh này: 32 , cho biết chuỗi password mà pwgen sẽ tạo ra sẽ dài bao nhiêu; và 1 cho pwgen biết nó sẽ tạo ra bao nhiêu chuỗi:

  • pwgen -s 32 1

Tiếp theo, kéo xuống phần đọc comment /* User used to manipulate with storage */ . Phần này bao gồm một số chỉ thị xác định user database MariaDB có tên pma thực hiện các việc quản trị nhất định trong phpMyAdmin. Theo tài liệu chính thức , account user đặc biệt này không cần thiết trong trường hợp chỉ có một user truy cập vào phpMyAdmin, nhưng nó được khuyến khích trong các trường hợp nhiều user .

Gỡ bỏ chú controlusercontrolpass chỉ thị bằng cách loại bỏ các dấu gạch chéo trước. Sau đó cập nhật controlpass chỉ để trỏ đến một password an toàn mà bạn chọn. Nếu bạn không làm điều này, password mặc định sẽ vẫn ở nguyên vị trí và user không xác định có thể dễ dàng truy cập vào database của bạn thông qua giao diện phpMyAdmin.

Sau khi thực hiện những thay đổi này, phần này của file sẽ giống như sau:

/usr/share/phpmyadmin/config.inc.php
. . . /* User used to manipulate with storage */ // $cfg['Servers'][$i]['controlhost'] = ''; // $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'password'; . . . 

Bên dưới phần này, bạn sẽ tìm thấy một phần khác trước đó là phần đọc comment /* Storage database and tables */ . Phần này bao gồm một số chỉ thị xác định lưu trữ cấu hình phpMyAdmin , database và một số bảng được user database pma quản trị sử dụng. Các bảng này kích hoạt một số tính năng trong phpMyAdmin, bao gồm Dấu trang, comment , tạo PDF, v.v.

Bỏ ghi chú từng dòng trong phần này bằng cách xóa dấu gạch chéo ở đầu mỗi dòng để nó trông giống như sau:

/usr/share/phpmyadmin/config.inc.php
. . . /* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; . . . 

Các bảng này chưa tồn tại, nhưng ta sẽ tạo chúng trong thời gian ngắn.

Cuối cùng, cuộn xuống cuối file và thêm dòng sau. Thao tác này sẽ cấu hình phpMyAdmin để sử dụng folder /var/lib/phpmyadmin/tmp mà bạn đã tạo trước đó làm folder tạm thời của nó. phpMyAdmin sẽ sử dụng folder tạm thời này làm cache ẩn các mẫu cho phép tải trang nhanh hơn:

/usr/share/phpmyadmin/config.inc.php
. . . $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp'; 

Lưu file sau khi thêm dòng này. Nếu bạn đã sử dụng nano , bạn có thể thực hiện bằng cách nhấn CTRL + X , Y , sau đó ENTER .

Tiếp theo, bạn cần tạo database lưu trữ phpMyAdmin và các bảng. Khi bạn cài đặt phpMyAdmin ở bước trước, nó đi kèm với một file có tên là create_tables.sql . Tệp SQL này chứa tất cả các lệnh cần thiết để tạo database lưu trữ cấu hình và các bảng phpMyAdmin cần hoạt động chính xác.

Chạy lệnh sau để sử dụng file create_tables.sql để tạo database lưu trữ cấu hình và bảng:

  • sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

Sau đó, bạn cần tạo user pma quản trị. Mở dấu nhắc MariaDB:

  • sudo mariadb

Từ dấu nhắc , hãy chạy lệnh sau để tạo user pma và cấp cho nó các quyền thích hợp. Đảm bảo thay đổi password để phù hợp với password bạn đã xác định trong file config.inc.php :

  • GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';

Nếu chưa tạo, bạn cũng nên tạo user MariaDB thông thường cho mục đích quản lý database thông qua phpMyAdmin, vì bạn nên đăng nhập bằng account khác không phải user pma . Bạn có thể tạo user có quyền đối với tất cả các bảng trong database cũng như quyền thêm, thay đổi và xóa quyền user bằng lệnh này. Dù bạn chỉ định quyền nào cho user này, hãy đảm bảo cung cấp cho user một password mạnh:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Sau đó, thoát khỏi shell MariaDB:

  • exit

phpMyAdmin hiện đã được cài đặt và cấu hình đầy đủ trên server của bạn. Tuy nhiên, server Apache của bạn chưa biết cách phục vụ ứng dụng. Để giải quyết vấn đề này, ta sẽ tạo một file cấu hình Apache cho nó.

Bước 3 - Cấu hình Apache để cung cấp phpMyAdmin

Khi cài đặt phpMyAdmin từ repository mặc định , quá trình cài đặt sẽ tự động tạo file cấu hình Apache và đặt file đó vào folder /etc/apache2/conf-enabled/ . Tuy nhiên, vì ta đã cài đặt phpMyAdmin từ nguồn, ta cần tạo và kích hoạt file này theo cách thủ công.

Tạo một file có tên phpmyadmin.conf trong folder /etc/apache2/conf-available/ :

  • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Sau đó thêm nội dung sau vào file

/etc/apache2/conf-available/phpmyadmin.conf
# phpMyAdmin default Apache configuration  Alias /phpmyadmin /usr/share/phpmyadmin  <Directory /usr/share/phpmyadmin>     Options SymLinksIfOwnerMatch     DirectoryIndex index.php      <IfModule mod_php5.c>         <IfModule mod_mime.c>             AddType application/x-httpd-php .php         </IfModule>         <FilesMatch ".+\.php$">             SetHandler application/x-httpd-php         </FilesMatch>          php_value include_path .         php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp         php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/         php_admin_value mbstring.func_overload 0     </IfModule>     <IfModule mod_php.c>         <IfModule mod_mime.c>             AddType application/x-httpd-php .php         </IfModule>         <FilesMatch ".+\.php$">             SetHandler application/x-httpd-php         </FilesMatch>          php_value include_path .         php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp         php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/         php_admin_value mbstring.func_overload 0     </IfModule>  </Directory>  # Authorize for setup <Directory /usr/share/phpmyadmin/setup>     <IfModule mod_authz_core.c>         <IfModule mod_authn_file.c>             AuthType Basic             AuthName "phpMyAdmin Setup"             AuthUserFile /etc/phpmyadmin/htpasswd.setup         </IfModule>         Require valid-user     </IfModule> </Directory>  # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/templates>     Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries>     Require all denied </Directory> <Directory /usr/share/phpmyadmin/setup/lib>     Require all denied </Directory> 

Đây là file cấu hình phpMyAdmin Apache mặc định được tìm thấy trên các bản cài đặt Ubuntu, mặc dù file này cũng sẽ đủ cho cài đặt Debian.

Lưu file , sau đó bật nó bằng lệnh :

  • sudo a2enconf phpmyadmin.conf

Sau đó reload dịch vụ apache2 để thay đổi cấu hình có hiệu lực:

  • sudo systemctl reload apache2

Sau đó, bạn có thể truy cập vào màn hình đăng nhập phpMyAdmin bằng cách chuyển đến URL sau trong trình duyệt web :

https://your_domain/phpmyadmin 

Bạn sẽ thấy màn hình đăng nhập sau:

màn hình đăng nhập phpMyAdmin

Đăng nhập vào giao diện với tên user và password MariaDB mà bạn đã cấu hình. Sau khi đăng nhập, bạn sẽ thấy giao diện user trông giống như sau:

giao diện  user  phpMyAdmin

Đến đây bạn có thể kết nối và tương tác với phpMyAdmin, tất cả những gì còn lại cần làm là tăng cường bảo mật cho hệ thống của bạn để bảo vệ nó khỏi những kẻ tấn công.

Bước 4 - Bảo mật version phpMyAdmin của bạn

Do tính phổ biến của nó, phpMyAdmin là mục tiêu phổ biến của những kẻ tấn công và bạn nên cẩn thận hơn để ngăn chặn truy cập trái phép. Một trong những cách dễ nhất để thực hiện việc này là đặt một cổng vào phía trước toàn bộ ứng dụng bằng cách sử dụng các chức năng ủy quyền và xác thực .htaccess được tích hợp sẵn của Apache.

Để thực hiện việc này, trước tiên bạn phải cho phép sử dụng overrides file .htaccess bằng cách chỉnh sửa file cấu hình Apache của bạn.

Chỉnh sửa file được liên kết đã được đặt trong folder cấu hình Apache của bạn:

  • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Thêm chỉ thị AllowOverride All trong phần <Directory /usr/share/phpmyadmin> của file cấu hình, như sau:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>     Options FollowSymLinks     DirectoryIndex index.php     AllowOverride All      <IfModule mod_php5.c>     . . . 

Khi bạn đã thêm dòng này, hãy lưu file .

Để áp dụng các thay đổi bạn đã thực hiện, hãy khởi động lại Apache:

  • sudo systemctl restart apache2

Đến đây bạn đã bật sử dụng .htaccess cho ứng dụng của bạn , bạn cần tạo một cái để thực sự triển khai một số bảo mật.

Để thành công, file phải được tạo trong folder ứng dụng. Bạn có thể tạo file cần thiết và mở file đó trong editor của bạn với quyền root bằng lệnh :

  • sudo nano /usr/share/phpmyadmin/.htaccess

Trong file này, hãy nhập nội dung sau:

/usr/share/phpmyadmin/.htaccess
AuthType Basic AuthName "Restricted Files" AuthUserFile /usr/share/phpmyadmin/.htpasswd Require valid-user 

Đây là ý nghĩa của mỗi dòng này:

  • AuthType Basic : Dòng này chỉ định kiểu xác thực mà bạn đang triển khai. Loại này sẽ triển khai xác thực password bằng file password .
  • AuthName : Điều này đặt thông báo cho hộp thoại xác thực. Bạn nên giữ điều này chung chung để user lạ sẽ không nhận được bất kỳ thông tin nào về những gì đang được bảo vệ.
  • AuthUserFile : Điều này đặt vị trí của file password sẽ được sử dụng để xác thực. Điều này phải nằm ngoài các folder đang được phục vụ. Ta sẽ tạo file này trong thời gian ngắn.
  • Require valid-user : Điều này chỉ định rằng chỉ những user được xác thực mới được cấp quyền truy cập vào tài nguyên này. Đây là những gì thực sự ngăn user lạ xâm nhập.

Khi bạn hoàn tất, hãy lưu file .

Vị trí bạn đã chọn cho file password của bạn là /usr/share/phpmyadmin/.htpasswd . Đến đây bạn có thể tạo file này và chuyển nó thành user ban đầu bằng tiện ích htpasswd :

  • sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd username

Bạn sẽ được yêu cầu chọn và xác nhận password cho user bạn đang tạo. Sau đó, file được tạo bằng password băm mà bạn đã nhập.

Nếu bạn muốn nhập thêm user , bạn cần phải làm như vậy mà không có cờ -c , như sau:

  • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Bây giờ, khi bạn truy cập vào folder con phpMyAdmin của bạn , bạn sẽ được yêu cầu nhập tên account và password bổ sung mà bạn vừa cấu hình :

https://your_domain_or_IP/phpmyadmin 

mật khẩu apache phpMyAdmin

Sau khi nhập xác thực Apache, bạn sẽ được đưa đến trang xác thực phpMyAdmin thông thường để nhập thông tin đăng nhập MariaDB của bạn . Cài đặt này bổ sung một lớp bảo mật bổ sung, điều đáng mong đợi vì phpMyAdmin đã bị các lỗ hổng bảo mật trong quá khứ.

Kết luận

Đến đây bạn đã cấu hình phpMyAdmin và sẵn sàng sử dụng trên server Debian 10 của bạn . Sử dụng giao diện này, bạn có thể dễ dàng tạo database , user , bảng, v.v. và thực hiện các thao tác thông thường như xóa và sửa đổi cấu trúc và dữ liệu.


Tags:

Các tin liên quan