首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许外部访问MariaDB 10.3中的特定用户

允许外部访问MariaDB 10.3中的特定用户
EN

Stack Overflow用户
提问于 2018-12-07 11:11:52
回答 2查看 984关注 0票数 2

我正在尝试配置对MariaDB 10.3的有限外部访问

我想要的

用户只能通过外部访问访问视图,但即使他有密码,也不能以root用户身份连接。

初始配置

使用默认的锻造配置,我们从以下用户开始:

代码语言:javascript
复制
$ mysql -u root -p
 > use information_schema;
 > select * from user_privileges;

全部结果:https://pastebin.com/kNNVUjrz

TLDR;

两个根用户:

  • 可访问的rootlocalhost127.0.0.1::151.99.999.101*、%
  • forge可访问地址:51.99.999.101*,%

一个奇怪的用户:

  • debian-sys-maint可访问:localhost

.*这显然是个假的公共ip

我要的配置

  • 可访问的rootlocalhost127.0.0.1::151.99.999.101
  • 可访问的forgelocalhost127.0.0.1::151.99.999.101
  • dummyuser可访问表单:%

问题所在

当我删除用户'forge'@'%'但保留'forge'@'localhost'时,用户(dummyuser)就没有更多的特权了。

ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)

我做的事的细节

通过SSH连接到服务器

代码语言:javascript
复制
$ 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

通过我的本地电脑连接

代码语言:javascript
复制
$ mysql -u dummyuser -h 51.99.999.101 -p
 > select * from mydb.v;

返回我们想要的:dummyuser@adsl-178-xx-xxx-123.adslplus.ch

但是现在,当我通过SSH删除用户'forge'@'%'时(这次使用root )

重要注意事项:在创建虚拟用户之前执行此步骤的没有解决问题。

代码语言:javascript
复制
$ 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并重试时:

代码语言:javascript
复制
$ mysql -u dummyuser -h 51.99.999.101 -p
 > select * from mydb.v;
 ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)
EN

回答 2

Stack Overflow用户

发布于 2018-12-07 19:19:30

首先找出授权表中存在哪些行。看起来您可能已经这样做了,但是让我们执行两个步骤:

代码语言:javascript
复制
SELECT user, host FROM mysql.user;

然后,对于其中的每一个,做(适当地填写了... ):

代码语言:javascript
复制
SHOW GRANTS FOR '...'@'...'

现在,以生成的GRANT ... TO ...语句为例,将它们转换为REVOKE ... FROM ... (并删除密码子句)。

运行这些REVOKEs和所需的任何新GRANTs。但要确保错误不会把你拒之门外。当你连接到其他地方时,保持联系并检查结果。

票数 2
EN

Stack Overflow用户

发布于 2018-12-11 08:03:21

在里克-詹姆斯的帮助下,我找到了一个工作案例。

我必须(重新)创建一个具有与'dummyuser'@'%'相同的受限访问权限的用户'dummyuser'@'%'

'forge'@'localhost'保存是特权root

代码语言:javascript
复制
> 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'@'%'还需要特权才能在该表上进行选择。这是一个较不容易接受的解决办法。但这是我唯一得到的。

在权威中,问题仍未解决,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53668369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档