#nas #mysql #database #mariadb ```table-of-contents ``` ## Internal Access | IP | 192.168.3.17 | | -------- | ------------ | | Port | 3307 | | Username | shenwei | | Password | !Abcde12345 | | Username | root | | Password | !Abcde12345 | ## Public Access | Domain | mysql.ishenwei.online | | -------- | --------------------- | | Port | 63307 | | Username | shenwei | | Password | !Abcde12345 | | Username | root | | Password | !Abcde12345 | ## MariaDB新安装后,需要强制创建一个用户用于远程访问(非本机IP访问),本机IP访问仅限root用户 进入 MariaDB(使用 socket 登陆): ``` sudo mysql -u root -p -S /run/mysqld/mysqld10.sock ``` 查看 root 主机权限: ``` sql select host, user from mysql.user; ``` ``` bash shenwei@SHENWEI_DS718:/usr/local/mariadb10/etc/mysql$ sudo mysql -u root -p -S /run/mysqld/mysqld10.sock Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 10.11.6-MariaDB Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> select host, user from mysql.user; +-----------+-------------+ | Host | User | +-----------+-------------+ | | PUBLIC | | localhost | mariadb.sys | | localhost | mysql | | localhost | root | +-----------+-------------+ 4 rows in set (0.002 sec) ``` 这里已经看到关键问题了: **你的 MariaDB 只有 `root@localhost`,并没有 `root@%` 或你要连接用的用户账号**。 而从你外部客户端连接失败的最常见原因就是:**没有对应的 Host/User 组合 + 缺少权限**。 你现在的 `mysql.user` 内容: ``` bash | | PUBLIC | | localhost | mariadb.sys | | localhost | mysql | | localhost | root | ``` 这里唯一能用的账号就是: - `root@localhost` → **只能从本机 localhost 登录** 这意味着从 **Synology Docker、其他机器、同网段的客户端** 都不能用 root 连接。 ## 创建一个允许远程访问的用户 ``` sql CREATE USER 'shenwei'@'%' IDENTIFIED BY '!Abcde12345'; GRANT ALL PRIVILEGES ON *.* TO 'shenwei'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; ```