關於mysql許可權管理

GOZO發表於2024-05-30

# 使用者賬戶
# MySQL使用者賬戶由使用者名稱和主機名組成,表示一個特定使用者從特定主機連線到MySQL伺服器。例如,'username'@'hostname'。每個使用者賬戶都有其獨立的密碼和許可權。
# 許可權等級
# MySQL的許可權分為多個等級,從粗粒度到細粒度:

# 全域性許可權:影響整個MySQL伺服器。儲存在 mysql.user 表中。
# 資料庫許可權:影響特定資料庫中的所有物件。儲存在 mysql.db 表中。
# 表許可權:影響特定資料庫中的特定表。儲存在 mysql.tables_priv 表中。
# 列許可權:影響特定表中的特定列。儲存在 mysql.columns_priv 表中。
# 過程許可權:影響儲存過程和函式。儲存在 mysql.procs_priv 表中。

# 許可權型別
# MySQL提供了多種許可權型別,每種許可權控制一種特定的操作。常見的許可權包括:
#
# ALL PRIVILEGES: 授予所有許可權。
# SELECT: 允許查詢表資料。
# INSERT: 允許插入資料到表中。
# UPDATE: 允許更新表中的資料。
# DELETE: 允許刪除表中的資料。
# CREATE: 允許建立資料庫和表。
# DROP: 允許刪除資料庫和表。
# INDEX: 允許建立和刪除索引。
# ALTER: 允許修改表結構。
# GRANT OPTION: 允許將許可權授予其他使用者。
管理使用者和許可權
透過SQL語句可以管理使用者和許可權,常用的語句有:

# 建立使用者:
# CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
# 比如:(本地賬號)CREATE USER 'xiaoming'@'localhost' IDENTIFIED BY '1234';
# 比如:(遠端賬號)CREATE USER 'xiaoming'@'客戶端ip(192.168.45.100)' IDENTIFIED BY '1234';
# 比如:(該使用者可以從任何主機連線到MySQL伺服器。)CREATE USER 'xiaoming'@'%' IDENTIFIED BY '1234';
# 刪除使用者:
# DROP USER 'username'@'hostname';
# 授予許可權:
# GRANT SELECT, INSERT ON database.table TO 'username'@'hostname';
# 這條語句的作用是授予使用者engo1從localhost(本地主機)連線到MySQL伺服器時,對所有資料庫和所有表的所有許可權。
# GRANT ALL ON *.* TO 'engo1'@'localhost';
# GRANT ALL ON *.* TO 'engo1'@'localhost';
# 使用者全域性許可權 (usr: *.*)這將授予使用者對所有資料庫和所有表的所有許可權。
# GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';
# 資料庫級別許可權 (db: db1.*)這個表示對特定資料庫的許可權。db1.*表示資料庫db1中的所有表。
# GRANT SELECT, INSERT, UPDATE ON db1.* TO 'username'@'host';
# 表級別許可權 (tables_priv: db1.t1)這個表示對特定表的許可權。db1.t1表示db1資料庫中的t1表
# GRANT SELECT, UPDATE ON db1.t1 TO 'username'@'host';
# 列級別許可權 (columns_priv: id, name)這個表示對特定表的特定列的許可權。id, name表示t1表中的id和name列。
# GRANT SELECT (id, name) ON db1.t1 TO 'username'@'host';
# 撤銷許可權:
# REVOKE SELECT, INSERT ON database.table FROM 'username'@'hostname';
# 檢視許可權:
# SHOW GRANTS FOR 'username'@'hostname';
# 修改使用者密碼:
# ALTER USER 'username'@'hostname' IDENTIFIED BY 'new_password';

相關文章