0
点赞
收藏
分享

微信扫一扫

MySQL/MariaDB小白指南:用Socket认证创建用户,不用密码也能安全登录

Go_Viola 1天前 阅读 1

在Linux上用MySQL时,你是不是每天都要输好几次数据库密码?比如登录数据库查日志、执行脚本,每次都要敲密码,既麻烦又有密码泄露的风险。其实MySQL/MariaDB支持一种更安全的“免密登录”方式——Socket认证,它不用记密码,直接用Linux系统的用户身份就能登录数据库,既方便又能减少密码管理的麻烦。今天就用6步教你创建Socket认证的MySQL用户,小白也能轻松上手!

一、先搞懂:Socket认证是啥?为啥比密码登录好?

简单说,Socket认证是“让MySQL用Linux系统的用户身份来验证登录”,不用单独设置数据库密码。举个生活例子:你在公司用工牌(Linux用户)就能进大门,不用再输一次大门密码(数据库密码)——MySQL相当于“大门保安”,看到你的工牌(Linux用户)符合要求,就直接让你进。

它的优点很明显:

  1. 免密码,更方便:不用记复杂的数据库密码,也不用每次登录都输入;
  2. 更安全:避免密码被泄露(比如写在脚本里、传错聊天记录),因为登录权限和Linux用户绑定,只有系统里存在的用户才能登录;
  3. 只适用于本地:Socket认证只能在Linux服务器本地使用,远程连接(比如从Windows连Linux的MySQL)还是需要密码,兼顾方便和安全。

二、6步实操:创建Socket认证的MySQL用户

核心思路是“先建Linux用户→再建对应MySQL用户→绑定Socket认证”,全程在终端操作,每步都有详细命令:

步骤1:创建Linux系统用户(关键:MySQL用户要和它对应)

Socket认证的前提是“MySQL用户名和Linux用户名一致”,所以首先要在Linux上创建一个系统用户(如果已有,可跳过这步)。
打开终端,执行命令(把myuser换成你想创建的用户名,比如dbuser):

sudo adduser myuser
  • 执行后会提示你设置Linux用户的密码(这个是系统登录密码,不是数据库密码)、填写用户信息(可选,直接按回车跳过);
  • 完成后,Linux里就多了一个叫myuser的用户,后续MySQL的Socket用户也要叫这个名字。

步骤2:登录MySQL/MariaDB(用root用户操作)

接下来需要以MySQL的root用户登录(只有root有创建新用户的权限),执行命令:

sudo mysql -u root -p
  • sudo:用管理员权限执行;
  • -u root:指定以root用户登录MySQL;
  • -p:表示需要输入MySQL root密码(输入时不显示星号,输完按回车)。

如果登录成功,终端会显示mysql>的提示符,说明已经进入MySQL命令行。

步骤3:创建Socket认证的MySQL用户

在MySQL命令行里,执行以下命令,创建一个和Linux用户同名(myuser)、用Socket认证的MySQL用户:

CREATE USER 'myuser'@'localhost' IDENTIFIED WITH auth_socket;
  • 拆解命令:
    • 'myuser'@'localhost'myuser是MySQL用户名(必须和Linux用户名一致),localhost表示只能从本地登录(Socket认证只支持本地);
    • IDENTIFIED WITH auth_socket:指定用auth_socket插件做认证(这是Socket认证的核心)。

执行后如果显示Query OK, 0 rows affected (0.0X sec),说明用户创建成功。

步骤4:给MySQL用户授权(让它能操作数据库)

刚创建的用户只有“登录权限”,没有操作数据库的权限(比如查数据、建表),需要给它授权。
比如想让myuser能操作名为mydb的数据库(换成你的实际数据库名),执行命令:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
  • 权限说明:
    • ALL PRIVILEGES:授予所有权限(包括查、改、删数据,建表等,根据需求可换成SELECT(只读)、INSERT(插入)等);
    • mydb.*mydb是数据库名,*表示所有表(比如mydb.user表示只授权user表);
    • 'myuser'@'localhost':指定给哪个用户授权。

如果想给用户“所有数据库的所有权限”(谨慎使用,适合管理员),命令改成:

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'localhost';

步骤5:刷新权限(让授权生效)

授权后需要“刷新MySQL权限表”,否则设置不会立即生效,执行命令:

FLUSH PRIVILEGES;

显示Query OK, 0 rows affected (0.0X sec)就表示刷新成功。

之后可以退出MySQL命令行,执行:

exit;

步骤6:验证Socket登录(不用密码,直接进!)

现在测试一下:用Linux的myuser用户登录系统,然后直接登录MySQL,看是否需要密码。

  1. 切换到Linux的myuser用户(如果当前不是这个用户):
    su - myuser
    
    (输入myuser的Linux用户密码,切换成功后,终端提示符会变成myuser@xxx:~$);
  2. 直接登录MySQL,执行命令(不用加-p):
    mysql -u myuser
    

如果登录成功,终端会显示mysql>提示符,而且全程没有让你输MySQL密码——这就说明Socket认证配置好了!

三、避坑提醒:3个新手容易犯的错

  1. MySQL用户名和Linux用户名不一致:比如Linux用户叫myuser,MySQL用户叫dbuser,Socket认证会失败,必须保证两者名字完全一样;
  2. 远程连接用Socket认证:Socket认证只能在Linux本地用,如果你从Windows或其他服务器远程连MySQL,还是需要用密码登录,别指望用Socket;
  3. 忘记给用户授权:刚创建的Socket用户只有登录权,没授权的话,登录后执行USE mydb;会报错“Access denied”,记得步骤4的授权操作。

四、总结:Socket认证的核心要点

用Socket认证创建MySQL用户,关键记住“三个一致”和“一个限制”:

  1. 用户名一致:MySQL用户名必须和Linux用户名相同;
  2. 认证方式一致:创建MySQL用户时必须用IDENTIFIED WITH auth_socket
  3. 登录位置一致:只能从Linux本地登录(localhost);
  4. 权限要授权:创建用户后必须用GRANT授权,否则无法操作数据库。

这种方式特别适合Linux服务器本地的数据库管理——不用记密码,登录快,还能避免密码泄露风险。如果你的MySQL主要在本地用,试试这种认证方式,会省很多麻烦~

举报

相关推荐

0 条评论