使用root用戶或具有sudo權限的用戶登錄MariaDB,命令如下:
sudo mysql -u root -p
輸入密碼后進入MariaDB命令行界面。
通過CREATE USER
語句創建用戶,指定用戶名、主機(localhost
表示本地連接,%
表示允許遠程連接)和密碼:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword123';
示例:創建本地用戶db_user
,密碼為SecurePass@2025
:
CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'SecurePass@2025';
遵循最小權限原則,僅授予用戶完成任務所需的權限,避免使用GRANT ALL PRIVILEGES
(除非必要)。常見權限類型:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost';
GRANT SELECT ON database_name.* TO 'username'@'localhost';
GRANT SELECT, UPDATE ON database_name.table_name TO 'username'@'localhost';
db_user
對mydb
數據庫的讀寫權限:GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'db_user'@'localhost';
執行FLUSH PRIVILEGES;
命令,使權限修改立即生效(MariaDB 10.4+版本會自動刷新,但顯式執行更安全)。
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'username'@'localhost';
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
DROP USER 'username'@'localhost';
若需允許遠程連接,需修改MariaDB配置文件并調整權限:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
,找到bind-address
并將其修改為服務器IP地址或0.0.0.0
(允許所有IP連接);sudo systemctl restart mariadb
;GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'remote_ip' IDENTIFIED BY 'StrongPassword123';
(remote_ip
為遠程客戶端IP)。定期審計用戶權限,刪除不必要的權限或用戶。例如,若用戶僅需讀取數據,應將權限從ALL PRIVILEGES
調整為SELECT
;禁止為開發人員分配生產數據庫的DROP
或ALTER
權限。
使用SELECT User, Host, Select_priv, Insert_priv, Update_priv FROM mysql.db;
命令查看用戶權限詳情,識別并移除未使用的權限或用戶。建議每月執行一次權限審計。
GRANT
語句指定username@specific_ip
;bind-address
限制監聽地址(如bind-address = 192.168.1.100
);ufw
)允許僅必要的端口(默認3306):sudo ufw allow from trusted_ip to any port 3306
。ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE INTERVAL 90 DAY;
設置)。運行mysql_secure_installation
腳本,自動移除匿名用戶、禁止root遠程登錄、刪除測試數據庫(test
),提升數據庫安全性。
編輯/etc/mysql/mariadb.conf.d/50-server.cnf
文件,調整關鍵參數:
innodb_buffer_pool_size
:設置為總內存的70%左右(如16GB內存設置為11GB),用于緩存InnoDB表數據和索引;innodb_log_file_size
:增大日志文件大?。ㄈ?56MB-1GB),減少日志刷盤頻率,提升寫入性能;innodb_flush_log_at_trx_commit
:設置為2(平衡性能與安全性,犧牲部分數據安全性換取更高性能,適用于非金融場景);max_connections
:根據應用需求設置(如100-500),避免過多連接導致資源耗盡;query_cache_size
:啟用查詢緩存(如64MB),緩存重復查詢結果(注意:MariaDB 10.4+版本已移除查詢緩存,需使用其他緩存機制)。WHERE
、JOIN
、ORDER BY
子句中頻繁使用的列創建索引(如CREATE INDEX idx_column ON table_name(column_name);
);CREATE INDEX idx_name_age ON users(last_name, first_name);
);OPTIMIZE TABLE
命令整理表碎片,保持索引效率(如OPTIMIZE TABLE large_table;
)。EXPLAIN
分析查詢:通過EXPLAIN SELECT * FROM table_name WHERE condition;
查看查詢計劃,識別全表掃描、索引未使用等問題;SELECT *
:僅選擇需要的列(如SELECT id, name FROM users;
),減少數據傳輸量和內存占用;JOIN
替代子查詢(如SELECT a.name FROM table_a a JOIN table_b b ON a.id = b.a_id WHERE b.status = 1;
);LIMIT
限制結果集:對于大數據量分頁查詢,使用LIMIT 10 OFFSET 20
(獲取第3頁,每頁10條)。OPTIMIZE TABLE
命令,整理表碎片(適用于頻繁更新的表);mysqlbinlog
)和慢查詢日志(slow_query_log
),釋放磁盤空間;mysqldump
或mariabackup
工具定期備份數據(如每日增量備份、每周全量備份)。