用户管理是DBA的一项重要工作,DBA能够控制用户的活动,哪些事情可以做,哪些事情不能做。DBA需要为不同的用户和角色创建不同的权限,以适配各种用户的需求和使用范围,并尽可能避免使用“root”用户,以防止应用程序受损或者在日常运维中出现错误。此外,DBA需要通过正确分配个人用户权限来确保数据完整性,允许授权用户执行工作,防止未经授权的用户访问超越权限的数据。
认证和授权
Authentication和Authorization这两个单词令人经常混淆,认证和授权。当用户连接MySQL服务器,执行查询时,需要验证用户身份,并验证用户权限,换句话来说,需要验证正确的用户身份,并验证用户的权限,决定是否允许用户连接服务器,执行相关查询。
认证:验证用户的身份,这是访问控制的第一步,用户在每次连接时,需要成功认证,如果认证失败,则连接失败,客户端断开连接。
授权:验证用户的权限,这是访问控制的第二步,适用于所有经过用户身份验证的连接,MySQL将决定用户可以执行什么操作,用户是否有充足的权限去执行该操作。
DBA可以通过mysql数据库的user表查看认证信息,每一行表示一个独立的用户账户。“User”字段表示用户的名称,“Host”字段表示连接用户的DNS主机名或IP地址,“Authentication_string”字段是用户经过加密的密码。
代码语言:javascript复制 MySQL localhost:3309 ssl SQL > SELECT user,host, authentication_string from mysql.userG
*************************** 1. row ***************************
user: root
host: %
authentication_string: $A$005$JYU"hj1t 19gmd8BBOPNP45qwC5TQ5APJLGzTa991eiab0f1Qwu0
*************************** 2. row ***************************
user: mysql.infoschema
host: localhost
authentication_string: $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
认证插件
MySQL从8.0开始使用“caching-sha2_password”作为默认的认证插件,连接时需要使用用户名、密码,及客户端的主机名验证用户。注意,连接服务器时,需要在客户端指定服务器的主机名。在服务器添加用户时,需要指定客户端的主机名。
本地连接
使用mysql客户端连接本地服务器时指定用户名和密码
代码语言:javascript复制mysql -u username -ppassword
注意,-p后面直接输入密码,没有空格。
默认的主机名为“localhost”,用于标识类Unix系统的socket连接,如果指定连接选项“--protocol=TCP”或者使用“-h 127.0.0.1”则通过TCP/IP进行连接。
远程连接
如果用户需要从一个远程客户端连接mysql服务器,需要在连接时指定客户端所在的主机名(不是MySQL服务器主机名,mysql.user表中的客户端名称)。
代码语言:javascript复制mysql -u username -ppassword -h servername