在任何操作系统上首次/全新安装 MySQL仅将 root 用户视为默认数据库用户,第一个数据库事务/活动仅由 root 用户执行。
因此,对于任何需要访问 MySQL 数据库以通过 root 用户凭据获得访问权限的用户来说,它并不理想,根用户访问权限应保留给数据库管理员,然后他们将使用根用户凭据创建数据库用户并授予执行不同数据库查询的权限。
对于数据库管理员来说,避免使用 root 用户访问MySQL数据库,而是创建另一个用户并授予该用户与 root 用户相同的访问和执行权限也是理想的做法。
本文指南非常适合MariaDB、MySQL 企业版和MySQL 社区版用户,为了演示如何检查 MySQL 用户权限,我们将首先创建具有不同 MySQL 权限的不同测试用户。
创建一个新的 MySQL 用户
首先,使用以下命令从 Linux 终端获取对MySQL数据库的 root 访问权限:
- $ mysql -u root -p
创建 MySQL 用户的命令语法如下:
- CREATE USER 'username'@'localhost' IDENTIFIED BY 'your_user_password';
上述用例适用于安装在本地机器上的 MySQL,如果您使用的是远程机器/服务器,则必须将'username'@'localhost'替换为'username'@'remote_machine_ip_address'。
如果您希望用户无需指定主机名或 IP 地址即可连接到任何 MySQL 安装系统,请遵循以下命令语法:
- CREATE USER 'username'@'%' IDENTIFIED BY 'your_user_password';
现在让我们创建几个 MySQL 数据库用户。
- CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1';
- CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password2';
- CREATE USER 'user3'@'%' IDENTIFIED BY 'password3';
请注意,这些用户用于演示目的,因此请考虑为您的生产环境创建更强的数据库用户密码。
授予新 MySQL 用户权限
下一步是为这些创建的数据库用户分配不同的角色(用户权限),这些用户权限与允许不同数据库用户执行的数据库操作有关。
我们可以将这些权限细分为:
- 所有权限:分配此权限的用户可以执行所有数据库角色。
- 插入:分配此权限的用户可以插入数据库表行数据。
- Delete:被赋予此权限的用户可以删除数据库表行数据。
- 创建:分配此权限的用户可以创建不存在的数据库和表。
- Drop:分配此角色的用户可以删除现有的数据库和表。
- 选择:分配此权限的用户可以读取数据库信息。
- 更新:分配此权限的用户可以修改数据库表行数据。
授予选项:分配此权限的用户可以修改其他数据库用户帐户的权限。
例如,如果我们要授予user1对所有数据库和表的所有权限,就像 root 用户一样,我们将执行以下命令:
- GRANT ALL PRIVILEGES ON *.* TO 'user1'@'localhost';
如果我们要授予user2对特定数据库(例如mysql)的所有数据库表的所有权限,我们将执行以下命令:
- GRANT ALL PRIVILEGES ON mysql.* TO 'user2'@'localhost';
如果我们要授予user3仅创建新 MySQL 用户的权限,我们将执行以下命令:
- GRANT INSERT ON mysql.user TO 'user3'@'%';
在 MySQL 中检查用户权限
要检查用户的数据库权限,请参考命令语法:
- SHOW GRANTS FOR username;
要检查这三个用户权限:
- SHOW GRANTS FOR user1@localhost;
- SHOW GRANTS FOR user2@localhost;
- SHOW GRANTS FOR user3;
要撤销用户分配的权限,请参考命令语法:
- REVOKE permission_type ON database.table FROM 'username'@'hostname';
例如;
- REVOKE INSERT ON mysql.user FROM user3;