【发布时间】:2019-05-09 03:38:10
【问题描述】:
我正在尝试配置对 MariaDB 10.3 的有限外部访问
我想要什么
用户只能从外部访问视图,但即使他有密码也不能以 root 身份连接。
初始配置
使用默认的forge 配置,我们从这些用户开始:
$ mysql -u root -p
> use information_schema;
> select * from user_privileges;
完整结果:https://pastebin.com/kNNVUjrz
TLDR;
两个root用户:
-
root可通过以下方式访问:[localhost,127.0.0.1,::1,51.99.999.101*,%] -
forge可通过以下方式访问:[51.99.999.101*,%]
一个奇怪的用户:
-
debian-sys-maint访问地址:[localhost]
.* 这明显是假的公网ip
我想要的配置
-
root可通过以下方式访问:[localhost,127.0.0.1,::1,51.99.999.101] -
forge可通过以下方式访问:[localhost,127.0.0.1,::1,51.99.999.101] -
dummyuser可访问表单:[%]
问题
当我删除用户 'forge'@'%' 但保留 'forge'@'localhost' 时,用户 (dummyuser) 没有更多权限。
ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)
我所做的细节
通过 SSH 连接到服务器
$ mysql -u forge -p
> create database mydb;
> create view mydb.v as select user();
> create user dummyuser identified by 'password';
> grant select on mydb.v to dummyuser;
> select * from information_schema.user_privileges where grantee like '%dummyuser%';
- 受赠人:
'dummyuser'@'%' - TABLE_CATALOG:
def - PRIVILEGE_TYPE:
USAGE - IS_GRANTABLE:
NO
通过我的本地电脑连接
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;
返回我们想要的:dummyuser@adsl-178-xx-xxx-123.adslplus.ch
但是现在当我通过 SSH 删除用户 'forge'@'%'(这次是 root):
重要提示:在创建 dummyuser 之前执行此步骤并不能解决问题。
$ mysql -u root -p
> drop user 'forge'@'%';
> create user 'forge'@'localhost' identified by 'passowrd';
> grant all privileges on *.* to 'forge'@'localhost' with grant option;
> flush privileges;
问题来了:当我使用dummyuser 登录并重试时:
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;
ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)
【问题讨论】:
标签: mariadb privileges forge