MariaDB的权限管理遵循“用户识别→权限分配→权限生效”的核心逻辑,关键命令包括CREATE USER(创建用户)、GRANT(授予权限)、FLUSH PRIVILEGES(刷新生效)、REVOKE(撤销权限)、DROP USER(删除用户)。所有操作需通过root用户或具有GRANT OPTION权限的用户登录MariaDB执行。
使用root用户登录MariaDB(需输入root密码):
sudo mysql -u root -p
登录成功后进入MariaDB命令行界面(显示MariaDB [(none)]>)。
使用CREATE USER语句创建用户,格式为'用户名'@'主机名'(主机名决定用户可从哪些主机连接):
localhost;192.168.1.100;%。示例:
-- 创建本地用户(仅本机可登录)
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- 创建远程用户(允许192.168.1.100访问)
CREATE USER 'remote_user'@'192.168.1.100' IDENTIFIED BY 'AnotherSecurePass!';
-- 创建任意主机用户(允许所有IP访问,生产环境不推荐)
CREATE USER 'global_user'@'%' IDENTIFIED BY 'CriticalPassword!';
注意:密码需包含大小写字母、数字和符号,长度≥8位。
使用DROP USER语句彻底删除用户(会自动回收其所有权限):
DROP USER 'dev_user'@'localhost';
提示:删除用户前无需手动撤销权限,
DROP USER会自动处理。
使用ALTER USER语句修改密码(需指定新密码):
ALTER USER 'dev_user'@'localhost' IDENTIFIED BY 'NewSecurePassword456!';
建议:定期更换密码(尤其是具有高权限的用户)。
使用GRANT语句为用户分配权限,格式为GRANT 权限类型 ON 数据库对象 TO '用户'@'主机':
SELECT、INSERT);-- 授予dev_user对mydb数据库的所有表的SELECT、INSERT权限
GRANT SELECT, INSERT ON mydb.* TO 'dev_user'@'localhost';
ALL PRIVILEGES);-- 授予dev_user对mydb数据库的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'dev_user'@'localhost';
-- 授予global_user对所有数据库的所有权限(生产环境禁用)
GRANT ALL PRIVILEGES ON *.* TO 'global_user'@'%';
GRANT CREATE USER, CREATE DATABASE ON *.* TO 'admin_user'@'localhost';
-- 创建角色并授予权限
CREATE ROLE 'read_only_role';
GRANT SELECT ON mydb.* TO 'read_only_role';
-- 将角色授予用户
GRANT 'read_only_role' TO 'dev_user'@'localhost';
分配权限后,需执行FLUSH PRIVILEGES使更改立即生效(或重启MariaDB服务)。
使用SHOW GRANTS语句查看用户的权限:
-- 查看dev_user@localhost的权限
SHOW GRANTS FOR 'dev_user'@'localhost';
-- 查看所有用户的权限(需root权限)
SELECT User, Host FROM mysql.user;
输出示例:
+--------------------------------------------------------------+
| Grants for dev_user@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `dev_user`@`localhost` |
| GRANT SELECT, INSERT ON `mydb`.* TO `dev_user`@`localhost` |
+--------------------------------------------------------------+
使用REVOKE语句撤销用户的特定权限,格式为REVOKE 权限类型 ON 数据库对象 FROM '用户'@'主机':
-- 撤销dev_user对mydb数据库的INSERT权限
REVOKE INSERT ON mydb.* FROM 'dev_user'@'localhost';
-- 撤销dev_user对mydb数据库的所有权限
REVOKE ALL PRIVILEGES ON mydb.* FROM 'dev_user'@'localhost';
撤销后需执行FLUSH PRIVILEGES使更改生效。
SELECT、INSERT,无需DROP);localhost,若需远程访问,明确指定IP范围(如192.168.1.%);SELECT User, Host FROM mysql.user;查看所有用户,移除无用账户;