我正在尝试配置对MariaDB 10.3的有限外部访问
我想要的
用户只能通过外部访问访问视图,但即使他有密码,也不能以root用户身份连接。
初始配置
使用默认的锻造配置,我们从以下用户开始:
$ mysql -u root -p
> use information_schema;
> select * from user_privileges;全部结果:https://pastebin.com/kNNVUjrz
TLDR;
两个根用户:
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.101forge:localhost,127.0.0.1,::1,51.99.999.101dummyuser可访问表单:%问题所在
当我删除用户'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'@'%'defUSAGENO通过我的本地电脑连接
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;返回我们想要的:dummyuser@adsl-178-xx-xxx-123.adslplus.ch
但是现在,当我通过SSH删除用户'forge'@'%'时(这次使用root )
重要注意事项:在创建虚拟用户之前执行此步骤的没有解决问题。
$ 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)发布于 2018-12-07 19:19:30
首先找出授权表中存在哪些行。看起来您可能已经这样做了,但是让我们执行两个步骤:
SELECT user, host FROM mysql.user;然后,对于其中的每一个,做(适当地填写了... ):
SHOW GRANTS FOR '...'@'...'现在,以生成的GRANT ... TO ...语句为例,将它们转换为REVOKE ... FROM ... (并删除密码子句)。
运行这些REVOKEs和所需的任何新GRANTs。但要确保错误不会把你拒之门外。当你连接到其他地方时,保持联系并检查结果。
发布于 2018-12-11 08:03:21
在里克-詹姆斯的帮助下,我找到了一个工作案例。
我必须(重新)创建一个具有与'dummyuser'@'%'相同的受限访问权限的用户'dummyuser'@'%'。
'forge'@'localhost'保存是特权root
> show grants for root@localhost;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*****' WITH GRANT OPTION
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
> show grants for forge@localhost;
GRANT ALL PRIVILEGES ON *.* TO 'forge'@'localhost' IDENTIFIED BY PASSWORD '*****' WITH GRANT OPTION
> show grants for 'forge'@'%';
GRANT USAGE ON *.* TO 'forge'@'%' IDENTIFIED BY PASSWORD '*****'
GRANT SELECT ON `mydb`.`v` TO 'forge'@'%'
> show grants for 'dummyuser'@'%';
GRANT USAGE ON *.* TO 'dummyuser'@'%' IDENTIFIED BY PASSWORD '*****'
GRANT SELECT ON `mydb`.`v` TO 'dummyuser'@'%' 现在,当我用用户dummyuser3@%创建forge@localhost并授予他:grant select on mydb.v to dummyuser3;时,dummyuser3将能够选择视图。
如果用户访问forge@%,由于受到限制,它将只能选择视图。这是一个可以接受的解决方案。
编辑它与此场景一起工作:create view mydb.v as select user();
在现实世界中,我的观点是基于另一张桌子。在这种情况下,用户'forge'@'%'还需要特权才能在该表上进行选择。这是一个较不容易接受的解决办法。但这是我唯一得到的。
在权威中,问题仍未解决,
https://stackoverflow.com/questions/53668369
复制相似问题