Thiết lập MySQL trên Máy chủ. Tạo người dùng mới và cấp quyền trong MySQL

 

Sau một thời gian vắng bóng, mình đã quay trở lại rồi đây, haha....
Gần đây, mình cũng setup mysql trên server nên tiện viết blog về nó này luôn. Ok, vào việc luôn nhỉ.

1. Cài mysql trên server CentOS 7
 -  Update hệ thống:   sudo yum update 
 -  Cài MySQL repositories: 
  wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 
 -  Cài đặt MySQL:
  sudo rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
 -  Ok, yum thôi: 
 sudo yum install mysql-server
 Khởi động mysql: 
 sudo systemctl start mysqld
 Check mysql: 
 sudo systemctl status mysqld

2. Cài mysql trên server Ubuntu
-  Update hệ thống và cài mysql 
sudo apt update
sudo apt install mysql-server -y -  Kiểm tra trạng thái mysql 
sudo systemctl status mysql

Phía trên là 2 cách cài mysql. Sau khi cài xong thì mình còn phải setup bảo mật cho mysql (tức đặt mật khẩu cho root).
Với Centos thì bạn có thể dùng lệnh này để đặt mật khẩu cho root theo từng bước của nó: sudo mysql_secure_installation 

3. Tạo một user mới và cấp quyền
-
Chúng ta thường thao tác với database với đầy đủ các quyền, nhưng nhiều trường hợp chúng ta không muốn ai đó truy cập với quá nhiều quyền trong tay ( quá nguy hiểm quá ).
- Truy cập mysql: mysql -u root -p
-
Tạo user mới: 

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
- newuser: tên user bạn muốn tạo.
- localhost: user chỉ được phép kết nối đến MySQL từ local host. Dùng ký tự % để cho phép user được phép truy cập từ bất kỳ máy nào. ( có thể dùng địa chỉ ip cụ thể ).
- password: mật khẩu đăng nhập user đó.

- Khi bạn tạo xong user thì user mới này chưa có quyền gì cả. Giờ mình phải cấp quyền cho nó.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

FLUSH PRIVILEGES;

- Dùng câu lệnh trên mình đã cấp full quyền cho nó, nghĩa là nó có thể thao tác tất cả các bảng trong cơ sở dữ liệu. Căng, như vậy thì không an toàn lắm.  
- Vì vậy câu lệnh sau sẽ giúp thiết lập quyền cụ thể cho user: 

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

- Dưới đây là danh sách các lệnh thường dùng để gán quyền cho user.
+ ALL PRIVILEGES: lệnh này cho phép MySQL user thực hiện toàn quyền trên databases (hoặc 1 vài db được thiết lập) .
+ CREATE: Cho phép user tạo mới tables hoặc databases.
+ DROP: Cho phép xóa tables hoặc databases.
+ DELETE: Cho phép xóa bản ghi dữ liệu trong bảng tables.
+ INSERT: Cho phép thêm bản ghi mới vào bảng cơ sở dữ liệu
+ SELECT: Cho phép sử dụng lệnh Select để tìm kiếm dữ liệu.
+ UPDATE: Cho phép cập nhật cơ sở dữ liệu.
+ GRANT OPTION: Cho phép gán hoặc xóa quyền của người dùng khác.

- Để thu hồi quyền:

REVOKE [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

- Xóa một user nào đó: DROP USER 'user'@'localhost';
- Để chắc chắn các câu lệnh thực thi thì các bạn nhớ FLUSH PRIVILEGES nhé.
- Hiện thị quyền của một user: 
 SHOW GRANTS FOR 'newuser'@'localhost';
- Xem các user có trong mysql:  Select * from mysql.user;

4. Truy cập từ xa
* Để truy cập từ xa, hay truy cập tới mysql server của máy này từ một máy khác.

- Đảm bảo cổng được mở ( mặc định là cổng 3306, check xem cổng được mở ra chưa )
  Mình đưa ra một số cách để mở cổng trên server 
  C1: sử dụng firewall:  firewall-cmd --zone=public --add-port=3306/tcp --permanent
                                      firewall-cmd --reload
  C2: sử dụng ufw:        sudo ufw allow 3000/tcp
  Check port:                 netstat -lntu

- Đảm bảo rằng user mysql có thể truy cập được ( tức xem nó cho phép host nào được truy cập )

- Hoặc có thể thay đổi nội dung bind-address của file my.cnf từ localhost thành 0.0.0.0
Sau khi chuyển xong bạn cần chạy lệnh reset mysql: sudo /etc/init.d/mysql restart

5. Một số câu lệnh MySQL

Hiển thị toàn bộ databases:
mysql> SHOW DATABASES;
Tạo database:
mysql> CREATE DATABASE mydatabase;

Sử dụng một database:
mysql> USE mydatabase;

Xóa một database:
mysql> DROP DATABASE mydatabase;

Update cần tắt safe, update xong bật lại;
SET SQL_SAFE_UPDATES = 0; 
UPDATE 
SET SQL_SAFE_UPDATES = 1;
Cảm ơn các bạn đã đọc. Nếu thấy có ích thì share để mọi người cùng biết nhé. Thanks.

Authentication use Passport and Jwt in Nodejs ( Phần 2 )

 


Hi! Lại là mình đây, hôm nay mình tiếp tục cùng các bạn tìm hiểu về xác thực trong nodejs nhé!

Link phần 1, các bạn có thể vào xem qua để hiểu rõ hơn trước khi đọc phần 2 nhé: 

Như ở phần trước mình đã cùng các bạn tạo một user rồi. Giờ sẽ là kịch bản khi user login. ( sử dụng passport, jwt)

Kịch bản:

1. Đầu tiên người dùng sẽ submit form đăng nhập, một request POST được tạo ra với route api/sigin. Nó sẽ chạy cái middleware passport.authenticate.

2. Mình sẽ thiết lập kịch bản local cho thằng passport.authenticate nên nó sẽ gọi đến cái kịch bản đã cài đặt.

3. Kịch bản mà ta cài đặt, nó sẽ lấy email, password mà user submit lên để xử lý. Nó sẽ kiểm tra xem user đó có tồn tại hay không. Nếu không tồn tại nó sẽ gọi đến callback done(null, false) ( bạn có thể thêm thông báo bằng cách thêm info, done(null, false, info) ). Còn nếu đăng nhập thành công thì trả ra callback done(null, user).

4. Sau khi qua kịch bản local passport thì thằng passport.authenticate nếu có user sẽ tiến hành sinh token cho user và trả về cho người dùng.

Ok. kịch bản là như vậy, xắn tay lên code thôi.

Thiết lập kịch bản local passport.


Hàm xử lý 


Khá dễ hiểu đúng không các bạn.
Mình dùng postman test luôn nhé.


Sau khi đăng nhập thành công, mình sẽ trả về thông tin user và token của user đó.

Code mình để trên đây, các bạn kéo về chạy sẽ hiểu tổng quát hơn nhé.


Passport còn thể dễ dàng làm với những kịch bản như đăng nhập bằng Facebook, Twitter, Google,... 

Cảm ơn mọi người đã đọc bài viết của mình nhé, mọi người cùng góp ý, trao đổi để cùng tiến bộ nhé. 

Tài liệu tham khảo:




Duy trì server luôn sống với PM2 !



     Nếu mình tắt server thì có call được api không nhỉ? 

     Ngày xưa mình từng nghĩ như vậy, bạn có nghĩ giống mình, haha..... Code server rồi chạy trên localhost, vậy làm sao để mình ko mở máy tính hoặc đi ngủ mà server vẫn sống được ta! Hôm nay mình sẽ cùng các bạn tìm hiểu và giải quyết bài toán này nhé!