Lỗi khi dùng quyền root để update mysql năm 2024

Để thực hiện bạn cần ssh vào máy chủ với quyền root. Nếu bạn chưa biết cách SSH bạn có thể thực hiện theo hướng dẫn bên dưới nhé.

Bước 2: Điều chỉnh file cấu hình mysql

cp  /etc/mysql/my.cnf  /etc/mysql/my.cnf.bak
 /etc/mysql/my.cnf

Đầu tiên bạn hãy mở file my.cnf lên. Sau đó tìm giá trị bind-address = 127.0.0.1, với dòng này có nghĩa là máy chủ sẽ chỉ tìm kiếm các kết nối cục bộ. Và bạn cần thay đổi giá trị này bằng IP cố định của bạn, hoặc sử dụng *, :: hoặc 0.0.0.0 để cho phép tất cả các kết nối.

Lỗi khi dùng quyền root để update mysql năm 2024

Bước 3: Cấu hình Firewall

  • Đối với UFW (Uncomplicated Firewall)

UFW là công cụ tường lửa mặc định trong Ubuntu, bạn cần mở cho phép IP hoạt động trên port 3306

ufw allow from 0.0.0.0 to any port 3306

  • Đối với FirewallD

FirewallD là ứng dụng firewall mặc định của CentOS. Bạn cần tạo một zone mới để cho phép IP truy cập.

firewall-cmd --new-zone=mysqlrule --permanent
firewall-cmd --reload
firewall-cmd --permanent --zone=mysqlrule --add-source=11.22.33.44
firewall-cmd --permanent --zone=mysqlrule --add-port=3306/tcp
firewall-cmd --reload

  • Đối với iptables

iptables có sẵn trên hầu hết các bản phân phối mặc định của Linux. Bạn sử dụng lệnh sau để mở


# Cho phép tất cả kết nối qua cổng 3306
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT 
# Cho phép IP được chỉ định kết nối qua cổng 3306
iptables -A INPUT -p tcp -s 11.22.33.44 --dport 3306 -j ACCEPT

# Lưu lại cấu hình
service iptables save

Bước 4: Bật Remote MySQL Server

Trong bài viết này mình sẽ chủ thích một số dòng và bạn hãy thay đổi bằng thông tin của bạn.

  • user_1: Tên user
  • database1: Tên Database
  • %: Giá trị % sẽ cho phép tất cả IP access vào
  • 11.22.33.44: IP được chỉ định access vào
  • *.: Áp dụng toàn bộ Database

Trường hợp 1: Cho phép kết nối với tất cả IP và Tất cả User

Ở trường hợp này sẽ cho phép bạn kết nối với tất cả IP access vào và sẽ nhìn thấy tất cả các Database trên đó. Trường hợp này ít dùng vì mang tính nguy hiểm do access được tất cả DB

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'user_1'@'%' IDENTIFIED BY 'Mat Khau' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Lỗi khi dùng quyền root để update mysql năm 2024

Trường hợp 2: Cho phép kết nối với tất cả IP với Database nhất định

Trường hợp này thường sử dụng nhiều. Khi bạn sử dụng trường hợp này thì tất cả IP sẽ access được và chỉ access vào duy nhất Database chỉ định khi remote qua user/passwd

mysql -u root -p
GRANT ALL PRIVILEGES ON database1.* TO 'user_1'@'%' IDENTIFIED BY 'Mat Khau' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Trường hợp 3: Cho phép kết nối với IP và Database cố định

Trường hợp này khi bạn cấu hình chỉ định thì chỉ duy nhất IP bạn chỉ định mới được quyền access vào. Với các IP khác sẽ không thể truy cập vào được.

mysql -u root -p
GRANT ALL PRIVILEGES ON database1.* TO 'user_1'@'11.22.33.44' IDENTIFIED BY 'Mat Khau' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Lỗi khi dùng quyền root để update mysql năm 2024

Sau mỗi thiết lập bạn cần khởi động lại dịch vụ MySQL để áp dụng thay đổi. Bạn hãy khởi động với lệnh sau

Qúy khách có thể thực hiện việc liệt kê các danh sách các user đã được tạo ra trong dịch vụ MySQL bằng cách query thông tin đến table của MySQL có tên là “mysql.users” và bạn cũng hoàn toàn có thể liệt kê các quyền hạn mà từng user được phép tương tác với database cụ thể trong MySQl.

1. Liệt kê các user đang có trong dịch vụ MySQL

– Giả sử trong hệ thống dịch vụ chỉ có 3 user tương ứng 3 host khác nhau.

mysql> SELECT user, host FROM mysql.user; +--+----+

user host
+----------+------------+
cuongqc %
root %
root localhost
+----------+------------+

rows in set (0.00 sec) mysql> SELECT user, host FROM mysql.user; +--+----+

user host
+----------+------------+
cuongqc %
root %
root localhost
+----------+------------+

3 rows in set (0.00 sec)

2. Liệt kê các quyền hạn được cấp cho 1 user

– Trong dịch vụ MySQL, bạn có thể sử dụng lệnh “SHOW GRANTS” để hiển thị thông tin về phân quyền được gán cho user. Lệnh này sẽ hiển thị đầy đủ những quyền hạn nào đã được gán cho user trước đó được gán quyền bằng lệnh “GRANT”. – Để coi được quyền của 1 user khác, bạn phải có quyền sử dụng “SELECT” trong Cơ Sở Dữ Liệu MySQL.

Cấu trúc câu lệnh SHOW GRANTS FOR [username]@[host] SHOW GRANTS FOR [username]@[host]

Chú thích : – username : tên của user mysql mà bạn muốn hiển thị thông tin. – host : gồm “%”, “127.0.0.1” và “localhost” . Các giá trị này đại diện cho cổng kết nối tới CSDL của dịch vụ như “127.0.0.1” thì kết nối thông qua socket 127.0.0.1:3306 ; “localhost” thì thông qua socket pipe ; % thì có thể kết nối từ bất cứ IP local hay public hoặc socket đều được. Phần này quý khách sẽ cần coi lại ở phần khởi tạo User trong MySQL.

Ví dụ 1: mysql> SHOW GRANTS FOR 'cuongquach'@'localhost'; +-------+

Grants for cuongquach@localhost
+-----------------------------------------------------------------------+
GRANT USAGE ON *.* TO 'cuongquach'@'localhost'
GRANT ALL PRIVILEGES ON `cuongquachp_db`.* TO 'cuongquach'@'localhost'
+-----------------------------------------------------------------------+

mysql> SHOW GRANTS FOR 'cuongquach'@'localhost'; +-------+

Grants for cuongquach@localhost
+-----------------------------------------------------------------------+
GRANT USAGE ON *.* TO 'cuongquach'@'localhost'
GRANT ALL PRIVILEGES ON `cuongquachp_db`.* TO 'cuongquach'@'localhost'
+-----------------------------------------------------------------------+

Ví dụ 2: mysql> SHOW GRANTS FOR 'root'@'%'; +------+

Grants for root@%
+------------------------------------------------------+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'....
+------------------------------------------------------+

mysql> SHOW GRANTS FOR 'root'@'%'; +------+

Grants for root@%
+------------------------------------------------------+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'....
+------------------------------------------------------+

– Quý khách cũng có thể sử dụng cách khác để liệt kê quyền hạn của các user bằng cách query table “user_privileges” nằm trong CSDL “information_schema“. mysql> SELECT * FROM information_schema.user_privileges; +----+---+-----+--+

GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
+--------------------+---------------+-------------------------+--------------+
'root'@'localhost' NULL SELECT YES
'root'@'localhost' NULL INSERT YES
'root'@'localhost' NULL UPDATE YES
'root'@'localhost' NULL DELETE YES
'root'@'localhost' NULL CREATE YES
'root'@'localhost' NULL DROP YES
'root'@'localhost' NULL RELOAD YES
'root'@'localhost' NULL SHUTDOWN YES
'root'@'localhost' NULL PROCESS YES
'root'@'localhost' NULL FILE YES
'root'@'localhost' NULL REFERENCES YES
'root'@'localhost' NULL INDEX YES
'root'@'localhost' NULL ALTER YES
'root'@'localhost' NULL SHOW DATABASES YES
'root'@'localhost' NULL SUPER YES
'root'@'localhost' NULL CREATE TEMPORARY TABLES YES
'root'@'localhost' NULL LOCK TABLES YES
'root'@'localhost' NULL EXECUTE YES
'root'@'localhost' NULL REPLICATION SLAVE YES
'root'@'localhost' NULL REPLICATION CLIENT YES
'root'@'localhost' NULL CREATE VIEW YES
'root'@'localhost' NULL SHOW VIEW YES
'root'@'localhost' NULL CREATE ROUTINE YES
'root'@'localhost' NULL ALTER ROUTINE YES
'root'@'localhost' NULL CREATE USER YES
'root'@'localhost' NULL EVENT YES
'root'@'localhost' NULL TRIGGER YES
'root'@'%' NULL USAGE NO
'cuongquach'@'localhost' NULL USAGE NO
+--------------------+---------------+-------------------------+--------------+

mysql> SELECT * FROM information_schema.user_privileges; +----+---+-----+--+

GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
+--------------------+---------------+-------------------------+--------------+
'root'@'localhost' NULL SELECT YES
'root'@'localhost' NULL INSERT YES
'root'@'localhost' NULL UPDATE YES
'root'@'localhost' NULL DELETE YES
'root'@'localhost' NULL CREATE YES
'root'@'localhost' NULL DROP YES
'root'@'localhost' NULL RELOAD YES
'root'@'localhost' NULL SHUTDOWN YES
'root'@'localhost' NULL PROCESS YES
'root'@'localhost' NULL FILE YES
'root'@'localhost' NULL REFERENCES YES
'root'@'localhost' NULL INDEX YES
'root'@'localhost' NULL ALTER YES
'root'@'localhost' NULL SHOW DATABASES YES
'root'@'localhost' NULL SUPER YES
'root'@'localhost' NULL CREATE TEMPORARY TABLES YES
'root'@'localhost' NULL LOCK TABLES YES
'root'@'localhost' NULL EXECUTE YES
'root'@'localhost' NULL REPLICATION SLAVE YES
'root'@'localhost' NULL REPLICATION CLIENT YES
'root'@'localhost' NULL CREATE VIEW YES
'root'@'localhost' NULL SHOW VIEW YES
'root'@'localhost' NULL CREATE ROUTINE YES
'root'@'localhost' NULL ALTER ROUTINE YES
'root'@'localhost' NULL CREATE USER YES
'root'@'localhost' NULL EVENT YES
'root'@'localhost' NULL TRIGGER YES
'root'@'%' NULL USAGE NO
'cuongquach'@'localhost' NULL USAGE NO
+--------------------+---------------+-------------------------+--------------+

Như vậy quý khách đã xong phần hướng dẫn này chúc quý khách thành công.