创建用户并授权需用create user和grant命令,常见权限包括select、insert、update、delete、create、drop和all privileges,修改权限可用grant或revoke,设置时应注意作用范围、远程访问限制和密码安全。1. 创建用户使用create user ‘用户名’@’主机名’ identified by ‘密码’;2. 授予权限用grant 权限类型 on 数据库名.表名 to ‘用户’@’主机’;3. 修改权限可添加或回收特定权限;4. 执行后需刷新权限flush privileges;5. 注意权限范围、远程连接配置及密码强度,避免滥用all privileges。
安装完 mysql 后,设置用户权限是保障数据库安全的重要一步。很多新手在完成安装后不知道如何给用户授权,导致数据库可能面临安全隐患或者权限不足的问题。下面我们就来一步步讲讲怎么正确设置 MySQL 用户权限。
创建用户并授权基本操作
MySQL 从 8.0 版本开始,默认使用 caching_sha2_password 插件进行身份验证,创建用户时推荐使用 CREATE USER 命令而不是直接操作系统表。
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
这条命令创建了一个用户名为 newuser、密码为 password 的用户,且该用户只能从本地连接数据库。如果你希望这个用户可以从任意 IP 连接,可以把 ‘localhost’ 改成 ‘%’:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
创建完用户之后,就可以开始授权了。例如,授予某个数据库的所有权限:
GRANT ALL PRIVILEGES ON dbname.* TO 'newuser'@'%';
执行完授权语句后,记得刷新权限:
FLUSH PRIVILEGES;
常见权限类型与使用场景
不同用户的需求不同,对应的权限也应有所区别。以下是几种常见的权限及其适用场景:
- SELECT:允许读取数据,适合只读账户。
- INSERT, UPDATE, DELETE:适用于需要修改数据的应用账户。
- CREATE, DROP:用于创建或删除表和数据库,通常只分配给管理员。
- ALL PRIVILEGES:所有权限,建议仅用于超级管理员账户。
你可以根据实际需求组合这些权限。比如,授予用户对某个数据库的增删改查权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'newuser'@'%';
小贴士:不要轻易使用 GRANT ALL,除非你确实需要全部权限。
修改已有用户的权限
有时候我们已经创建了用户,但后来发现权限不够或者需要调整。这时候可以用 GRANT 或者 REVOKE 来修改权限。
例如,添加权限:
GRANT CREATE ON dbname.* TO 'newuser'@'%';
收回权限:
REVOKE DELETE ON dbname.* FROM 'newuser'@'%';
同样别忘了执行:
FLUSH PRIVILEGES;
注意事项和常见问题
- 权限作用范围:权限可以作用于全局(所有数据库)、特定数据库、特定表,甚至特定列。使用时要明确指定范围。
- 远程访问限制:如果用户无法远程连接,请检查是否使用了 ‘%’ 而不是 localhost,并且防火墙是否放行了 MySQL 端口(默认3306)。
- 密码安全性:设置强密码,避免使用简单密码或空密码。
- 用户重复问题:同一个用户名但主机不同的情况会被视为不同用户,如 ‘user’@’localhost’ 和 ‘user’@’%’ 是两个独立账户。
基本上就这些。只要掌握了上面这些操作,就能满足大多数 MySQL 用户权限管理的需求了。