Ubuntu 21.01中 打开mariadb远程连接时报错ERROR 1356 (HY000): references invalid or definer/invoker of view lack rights
1. 原因
由于使用的是Ubuntu 21.04,直接使用命令
sudo apt install mariadb-server
安装的数据库
安装完后
使用mysql数据库查看user表关键字段会有如下情况,和我在centos中碰到的问题不一样
use mysql;
select host,user,password from user;
这里使用了语句直接对表进行更新
update user set host="%" where host="localhost";
然后就是如下1356报错
MariaDB [mysql]> update user set host="%" where host="localhost";
ERROR 1356 (HY000): View 'mysql.user' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
即视图引用了无效的表或者行数据或者函数,或者视图的定义者/调用者没有使用它们的权限
2.解决方法
2.2这里赋予用户远程连接数据库并对服务器上所有数据库或者表操作的权限,不能直接使用更新语句。
2.2.1使用mysql数据库
use mysql;
因为这里的操作本质上就是对mysql数据库里面的user表里进行操作
2.2.2 user表关键用处字段及用处
字段名 用处 Host 允许访问的主机ip User 数据库用户名 Password 数据库用户密码
2.2.3 设置用户,赋予其所有权限,并设置访问密码添加用户赋予远程链接权限
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
root用户名也可自己自定义
密码自己设置即可
2.2.4 命令作用
2.2.5赋予服务器的全部操作权限,服务器上所有数据库及其表的操作权限,给用户root,能从任意地址使用连接密码111111连接数据库,且用户能将自己全部权限赋予其他用户
2.2.6 语法
grant 权限1,权限2,…权限n ON 数据库名称.表名称 to '用户名'@'用户地址' identified by ‘此用户链接密码’WITH GRANT OPTION;
2.2.7 对照表
用处 字段名 作用 权限 all privileges/all 赋予服务器的全部14个权限给用户 数据库名称.表名 *.*
*.*
表示赋予用户服务器上所有数据库及其表的操作权限用户名 root 用户登录数据库名 对应User表属性Host,用户地址 ’%' ’%'能从任意地址使用连接 localhost,ip、机器名、域名皆可 对应User表属性Password ’此用户链接密码’ ‘链接密码值,可以任意设置’ user表中这个字段值是非空,不然会操作失败 赋予权限 WITH GRANT OPTION 能将自己全部权限赋予其他用户
权限有select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个
all privileges/all
2.3 赋予服务器的全部操作权限
*.*
2.3.1 本质是(数据库名称.表名称),
*.*
表示赋予用户服务器上所有数据库及其表的操作权限
’%'
用户地址 可以是localhost,localhost,ip、机器名、域名皆可’%'表示能从任意地址使用连接 对应User表属性Host,用户地址
'root'
用户名对应User表属性User属性,用户登录名
'密码'
‘链接密码’密码属性值是非空的,不然会操作失败对应User表属性Password,用户密码
WITH GRANT OPTION
2.3.2 该用户可以将自己拥有的权限授权给别人
select host,user,password from user;
2.4 先查看端口是否打开
netstat -nltp
2.5再修改mariadb的配置文件
2.6 编辑/etc/mysql/mariadb.conf.d/目录下的50-server.cnf配置文件
将bind-address =127.0.0.1注释或者修改成bind-address =0.0.0.0
vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address =0.0.0.0
修改成 0.0.0.0
再次查看端口打开情况
netstat -nltp
检查防火墙设置
sudo iptables -L -n
若是没有打开3306端口,打开
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
最后重启MariaDB服务即可
systemctl status mariadb#查看状态
systemctl restart mariadb#重启mariadb