【MySQL】用户账户、角色、口令、PAM

目录

查看用户账户设置

连接

1.本地连接

2.远程连接

账户

角色

操作用户账户和角色

配置口令和账户有效期限

手工使口令过期

配置口令有效期限

PAM身份验证插件

[客户端连接:使用 PAM 账户登录](#客户端连接:使用 PAM 账户登录)


在连接到MySQL服务器并执行查询时,会验证 你的身份并为您的活动授权。

查看用户账户设置

查询mysql数据库以查看user标识信息:SELECT user, host, authentication_string FROM mysql.user;

  • user:此账户上的用户名。
  • host:用户可以连接的DNS主机名或IP地址。
  • authentication_string:用户必须对该账户提供的口令,是加密的(AES加密算法)。

连接

1.本地连接

要使用mysql客户机连接到本地服务器,为要使用的帐户指定用户名和口令:

bash 复制代码
mysql -u username -ppassword -h localhost

默认主机名是localhost(127.0.0.1/::1),表示本机套接字连接。

mysql.user 表包含具有正确口令的 username@localhost 帐户。

2.远程连接

要连接到未安装在客户端本地主机上的服务器,必须提供要连接的服务器的主机名:

bash 复制代码
mysql -u username -ppassword -h servername

mysql.user 表中与用户关联的主机名是指发起连接的客户端主机的名称,而不是服务器主机的名称。

账户

账户名由用户名 (可以不唯一,长度最长32个字符)和连接到客户端主机的名称或IP地址组成。

使用 create user 用户@主机名 identified by '口令' 创建账户,不要创建无口令和匿名帐户,避免通配符的使用。

角色

角色是一组权限的集合,可以更加方便地添加、删除和管理授权。角色类似于用户,存储在 mysql.users 表中,角色名由用户和主机组成,但不能像用户一样登录,可以将一个用户账户角色授予另一个用户。

使用 create role 用户@主机名 创建一个或多个角色。角色是作为一个特殊类型的账户创建的,没有口令,被锁定无法登录,而且指定了默认的验证插件。

操作用户账户和角色

  1. 使用 rename user 用户@主机名 to 用户@主机名 语句重命名账户和角色。
  2. 使用 drop user/role 用户@主机名 语句删除用户账户和角色。

配置口令和账户有效期限

  1. 创建用户时使用 create user 用户@主机名 identified by '口令';设置账户口令。
  2. 更改现有用户使用 alter user 用户@主机名 identified by '新口令'
  3. 更改当前用户口令:alter user user() 用户@主机名 identified by '新口令'
  4. 使用 **mysqladmin -u 用户 -p password '新口令';**也可更改口令。

手工使口令过期

  1. 创建口令过期账户:CREATE USER 用户@主机名 IDENTIFIED BY '口令' PASSWORD EXPIRE; 在新用户第一次登录时需要重新设置密码。
  2. 使用户口令过期:ALTER USER 用户@主机名 PASSWORD EXPIRE;(追加 ACCOUNT LOCK 还可以使用户锁定)

配置口令有效期限

  1. 使用 default_password_lifetime 全局变量指定多少天后必须要更改口令,默认为0,表示口令长期有效。
  2. 创建用户时配置:CREATE USER 'user'@'host' IDENTIFIED BY '口令' PASSWORD EXPIRE INTERVAL 30 DAY;
  3. 将默认口令有效期应用于账户:ALTER USER 'user'@'host' PASSWORD EXPIRE DEFAULT;
  4. 禁用自动的账户失效:ALTER USER 'user'@'host' PASSWORD EXPIRE NEVER;

PAM身份验证插件

PAM 身份验证插件是一个企业版插件,可根据操作系统对MySQL 帐户进行身份验证。

PAM 定义了配置身份验证的服务,这些服务存储在 /etc/pam.d 中 ,每个服务对应一个文件。

复制代码
MySQL客户端 → MySQL服务器 → PAM插件 → /etc/pam.d/mysql-pam → 操作系统认证

(1)直接映射:要创建直接映射到操作系统用户的 MySQL 用户,使用语句:

bash 复制代码
CREATE USER bob@localhost IDENTIFIED WITH authentication_pam AS 'mysql-pam';

用户:bob,主机:localhost,插件:authentication_pam,验证字符串:mysql-pam。

  • 用户 bob@localhost 必须同时是操作系统用户
  • 密码验证完全由操作系统处理
  • 口令不存储在MySQL 的 mysql.user 表中,它是操作系统验证口令。
  • 用户只能使用操作系统密码登录

(2)组映射代理:创建一个使用PAM并从OS操作系统组映射到MySQL用户的匿名代理用户

bash 复制代码
 CREATE USER ''@''
 IDENTIFIED WITH authentication_pam 
   AS 'mysql-pam, www=webuser, root=root';
  • 匿名用户账户(''@'')作为代理
  • 根据操作系统组自动映射到不同 MySQL 账户:操作系统 www 组的成员映射到MySQL webuser 帐户,root组的成员映射到MySQL root 帐户。
  • 代理用户必须对映射的帐户具有PROXY权限:
bash 复制代码
GRANT PROXY ON webuser@localhost TO ''@'';
GRANT PROXY ON root@localhost TO ''@'';

客户端连接:使用 PAM 账户登录

MySQL 将从客户端收到的用户名和口令传递给PAM,PAM针对操作系统进行身份验证。

(1)PAM 只能处理纯文本的口令,必须启用明文客户端身份验证插件:

bash 复制代码
mysql --enable-cleartext-plugin -u username -p

(2)连接示例:代理用户采用映射帐户的身份。示例:Anne 不是MySQL 用户,但在操作系统的www组中:

bash 复制代码
# 直接映射用户连接
mysql --enable-cleartext-plugin -u os_user -p

# 组映射用户连接(用户 anne 属于 www 组)
mysql --enable-cleartext-plugin -u anne -p

Anne 的客户端现在使用webuser@localhost 帐户的权限登录。

相关推荐
永卿00127 分钟前
mysql 日志机制
数据库·mysql
wu~9701 小时前
Mysql深入学习:慢sql执行
mysql
先鱼鲨生1 小时前
etcd 的安装与使用
数据库·etcd
crossoverJie2 小时前
StarRocks 如何在本地搭建存算分离集群
数据库·后端
潇凝子潇3 小时前
如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?
数据库·mysql·架构
Tapdata3 小时前
什么是 Operational Data Hub?它因何而生,又为何能够在当下成为技术共识?
数据库
Seven973 小时前
Mysql的索引数量是否越多越好?为什么?
mysql
这里有鱼汤3 小时前
普通人做量化,数据库该怎么选?
数据库·后端
BOOM朝朝朝4 小时前
Mongo索引
数据库·后端
Java烘焙师5 小时前
架构师必备:实时对账与离线对账
hive·mysql·架构·对账