mysql 学习笔记之用户授权
2024年6月16日...大约 3 分钟
切记
一定要刷新权限
FLUSH PRIVILEGES;
mysql 创建用户及授权
- 创建一个mysql 用户
CREATE USER username IDENTIFIED BY 'password';
- 带密码仅
本机
可以访问
GRANT ALL PRIVILEGES ON *.* TO username@'localhost' IDENTIFIED BY 'password';
- 带密码仅
192.168.10.1
可以访问
GRANT ALL PRIVILEGES ON *.* TO username@'192.168.10.1' IDENTIFIED BY 'password';
- 带密码仅
fe80::f048:b8a8:5637:64b4/64
可以访问
GRANT ALL PRIVILEGES ON *.* TO username@'fe80::f048:b8a8:5637:64b4/64' IDENTIFIED BY 'password';
- 带密码的授权
%
代表所有网络均可访问
GRANT ALL PRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'password';
- 使用默认密码登录
GRANT ALL PRIVILEGES ON *.* TO username@'%' ;
- 查看当前用户
SELECT CURRENT_USER();
- 查看当前用户授权
SHOW GRANTS FOR CURRENT_USER();
- 查看所有用户信息
SELECT * FROM mysql.user \G;
- 查看指定用户信息
SELECT * FROM mysql.user WHERE user='username' \G;
plugin 的选择
常见 MySQL 身份验证插件
mysql_native_password:
- 功能: 使用
SHA1
算法对密码进行加密。 - 优点: 兼容性较好,尤其适用于较老版本的 MySQL 客户端。
- 缺点: 安全性不如现代算法。
caching_sha2_password:
- 功能: 使用
SHA-256
算法对密码进行加密,支持非对称加密和加密连接。 - 优点: 安全性更高,适用于需要高安全性的场景。
- 缺点: 对某些老旧客户端可能不兼容。
sha256_password:
- 功能: 使用
SHA-256
算法对密码进行加密,并支持 SSL/TLS 加密。 - 优点: 安全性较高,可使用 SSL/TLS 保护数据传输。
- 缺点: 性能相对较低,配置复杂度较高。
auth_socket:
- 功能: 使用
Unix socket
文件进行身份验证,只适用于 Unix 系统。 - 优点: 适用于服务器端内部通信,避免了密码传输。
- 缺点: 仅适用于 Unix 系统。
pam:
- 功能: 使用 Pluggable Authentication Modules (PAM) 进行身份验证。
- 优点: 灵活性高,可以集成多种身份验证机制(如 LDAP、Kerberos)。
- 缺点: 配置和维护较复杂。
选择适合的身份验证插件
选择合适的 MySQL 身份验证插件需要考虑以下几个方面:
- 安全性:
- 对于高安全性要求的应用,推荐使用
caching_sha2_password
或sha256_password
。 - 如果对兼容性有要求,同时希望提高安全性,可以使用
caching_sha2_password
。
- 兼容性:
- 如果需要兼容老旧的 MySQL 客户端,可以选择
mysql_native_password
。 - 如果所有客户端都支持,可以选择更安全的插件如
caching_sha2_password
。
- 操作系统:
- 如果使用 Unix 系统并希望简化服务器端的内部通信,可以选择
auth_socket
。
- 集成性:
- 如果需要与企业级身份验证系统(如
LDAP
、Kerberos
)集成,可以选择pam
。
示例
示例
-- 使用 mysql_native_password 插件创建用户
CREATE USER 'user'@'host' IDENTIFIED WITH 'mysql_native_password' BY 'password';
-- 使用 caching_sha2_password 插件创建用户
CREATE USER 'user'@'host' IDENTIFIED WITH 'caching_sha2_password' BY 'password';
-- 使用 sha256_password 插件创建用户
CREATE USER 'user'@'host' IDENTIFIED WITH 'sha256_password' BY 'password';
-- 使用 auth_socket 插件创建用户
CREATE USER 'user'@'localhost' IDENTIFIED WITH 'auth_socket';
-- 使用 pam 插件创建用户
CREATE USER 'user'@'host' IDENTIFIED WITH 'pam' BY 'pam_service_name';
贡献者
change