允许外部访问MariaDB 10.3中的特定用户
我正在尝试配置对MariaDB 10.3的有限外部访问 我想要什么 用户只能通过外部访问访问视图,但即使拥有密码,也不能作为root用户连接 初始配置 使用默认配置,我们从以下用户开始:允许外部访问MariaDB 10.3中的特定用户,mariadb,privileges,forge,Mariadb,Privileges,Forge,我正在尝试配置对MariaDB 10.3的有限外部访问 我想要什么 用户只能通过外部访问访问视图,但即使拥有密码,也不能作为root用户连接 初始配置 使用默认配置,我们从以下用户开始: $ mysql -u root -p > use information_schema; > select * from user_privileges; 全部结果: TLDR 两个根用户: root可从以下位置访问:[localhost,127.0.0.1,::1,51.99.999.10
$ mysql -u root -p
> use information_schema;
> select * from user_privileges;
全部结果:
TLDR
两个根用户:
可从以下位置访问:[root
,localhost
,127.0.0.1
,::1
*,51.99.999.101
]%
可从以下网址访问:[forge
*,51.99.999.101
]%
可从以下位置访问:[debian sys maint
]localhost
可从以下位置访问:[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
)没有更多权限
错误1045(28000):用户“dummyuser”@“%”的访问被拒绝(使用密码:是)
我所做的细节
通过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'@%'
- 表u目录:
def
- 特权类型:
用法
- 可授予:
NO
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;
返回所需内容:dummyuser@adsl-178-xx-xxx-123.adslplus.ch
但是现在,当我通过SSH(这次使用root)删除用户'forge'@'
时:
重要提示:在创建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)
首先找出授权表中存在哪些行。看起来您可能已经这样做了,但让我们分两步进行:
SELECT user, host FROM mysql.user;
然后,针对每一项,执行以下操作(适当填写…
):
现在接受GRANT。。。若要…
生成的语句,请将它们转换为REVOKE。。。从…
(并删除密码子句)
运行那些
撤销
以及您需要的任何新的授权。但要确保打字错误不会把你拒之门外。保持连接,同时连接其他地方并检查结果。在@rick james的帮助下,我得到了一个工作案例
我必须(重新)创建一个用户'forge'@'
,其访问权限与'dummyuser'@'%
相同
'forge'@'localhost'
keep is privilegesroot
> 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'@'%'
现在,当我用用户forge@localhost
并授予他:将mydb.v上的select授予dummyuser3代码>dummyuser3将能够选择视图。
如果用户获得了对forge@%
的访问权限,由于该限制,它将只能选择该视图。这是一个可接受的解决方案
[编辑]它适用于以下场景:create view mydb.v as select user()代码>
在现实世界中,我的视图基于另一个表。在这种情况下,用户'forge'@'
还需要在该表上进行选择的权限。
这是一个不太可接受的解决方案。但那是我仅有的一个
确切地说,这个问题仍然悬而未决我不确定我要用这个来寻找什么。他们确实有选择的特权。(dummyuser2@%
由forge@localhost
在forge@%
被删除之后。)---我假设%
和用户名存在某种继承。使用完全权限重新创建用户“”forge“@”
,允许dummyuser进行选择。@cbaconnier-不完全是“继承”,而是检查授予以查看哪一项适用的神秘顺序。一些注意事项:“%”
不包括localhost
。更具体(更少%s)的授权将覆盖其他授权。示例(使用您的授权):可能root@'
(不太具体)不允许任何内容,而root@'51.99.999.101'
(更具体)允许所有内容。我在您的帮助下解决了这个问题。我将回答最终配置如何。非常感谢你。
> 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'@'%'