首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拒绝特定主机访问mysql上的特定数据库

拒绝特定主机访问mysql上的特定数据库
EN

Server Fault用户
提问于 2015-08-12 07:39:22
回答 2查看 2.1K关注 0票数 0

我们有一个生产MySQL服务器,具有以下授权:

代码语言:javascript
运行
复制
mysql> show grants for the_db;
+------------------------------------------------------------------------------------------------------------+
| Grants for db_user@%                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'db_user'@'%' IDENTIFIED BY PASSWORD '*A236932DB5549260BDC088C4BC2F0C6DB04424D7' |
| GRANT ALL PRIVILEGES ON `xydb`.* TO 'db_user'@'%'                                                      |
| GRANT SELECT ON `xyie-db`.* TO 'db_user'@'%'                                                           |
| GRANT SELECT ON `supportdb`.* TO 'db_user'@'%'                                                         |
| GRANT SELECT ON `xbs`.* TO 'db_user'@'%'                                                               |
+------------------------------------------------------------------------------------------------------------+

是否可以阻止特定主机对这些数据库的访问?我们有一台新的服务器即将上线,它将在同一台服务器上使用其他测试数据库。我不希望新服务器意外地在生产数据库上做任何事情。

我知道我可以使用REVOKE访问,但我不确定这是否需要修改现有的授权,使其更适合它们所允许的主机。我不想猜测,因为这里的产品dbs一直在使用,并且意外地阻止了对活动主机的访问将是不好的。

理想情况下,我需要能说:

代码语言:javascript
运行
复制
BLOCK ACCESS ON 'xydb'.* TO 'db_user'@'192.168.1.4'
EN

回答 2

Server Fault用户

回答已采纳

发布于 2015-08-12 07:50:32

我不确定您是否可以使用REVOKE来完成这个任务,但是可以通过在mysql模式中的相关表中插入一个条目来做到这一点:

代码语言:javascript
运行
复制
INSERT INTO mysql.db (Host,Db) VALUES ('192.0.2.42','xydb');
INSERT INTO mysql.db (Host,Db) VALUES ('host.example.com','xydb');
FLUSH PRIVILEGES;

前两行执行插入DB的繁重工作;为了清楚起见,最好同时将IP和主机名放在其中,同时仍然确保即使反向查找不起作用,IP仍然会被阻塞。FLUSH PRIVILEGES是必需的,因为MySQL并不是每次需要知道信息时都会查看表--它会将信息缓存在内存中。您需要告诉MySQL刷新它的缓存。

票数 1
EN

Server Fault用户

发布于 2015-08-12 17:16:03

如果xydb可以在生产和测试DB服务器上使用不同的mysql密码,那么您可以使用在活动服务器上给mysql用户一个“错误”密码

代码语言:javascript
运行
复制
mysql> SELECT VERSION();
+-------------------------+
| VERSION()               |
+-------------------------+
| 5.1.73-0ubuntu0.10.04.1 |
+-------------------------+

要再现你的处境:

代码语言:javascript
运行
复制
mysql> SHOW GRANTS FOR db_user@`localhost`;
ERROR 1141 (42000): There is no such grant defined for user 'db_user' on host 'localhost'
mysql> SHOW GRANTS FOR db_user@`%`;
ERROR 1141 (42000): There is no such grant defined for user 'db_user' on host '%'

mysql> CREATE DATABASE xydb;
mysql> GRANT USAGE ON *.* TO 'db_user'@'%' IDENTIFIED BY '1234';
mysql> GRANT ALL PRIVILEGES ON `xydb`.* TO 'db_user'@'%';
mysql> SHOW GRANTS FOR db_user@`%`;
+--------------------------------------------------------------------------------------------------------+
| Grants for db_user@%                                                                                   |
+--------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'db_user'@'%' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' |
| GRANT ALL PRIVILEGES ON `xydb`.* TO 'db_user'@'%'                                                      |
+--------------------------------------------------------------------------------------------------------+

mysql> FLUSH PRIVILEGES;

这将导致用户能够从本地主机登录。

代码语言:javascript
运行
复制
$ mysql -u db_user -p1234 --host localhost xydb -e 'SHOW DATABASES'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| xydb               |
+--------------------+

然后专门为将被列入黑名单的主机添加用户。

代码语言:javascript
运行
复制
mysql> GRANT USAGE ON *.* TO 'db_user'@'localhost' IDENTIFIED BY 'AAAAAA';
mysql> SHOW GRANTS FOR db_user@`localhost`;
+----------------------------------------------------------------------------------------------------------------+
| Grants for db_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'db_user'@'localhost' IDENTIFIED BY PASSWORD '*4F1779C9918AA4ADD1DDB16A274A8D098DDCC0D0' |
+----------------------------------------------------------------------------------------------------------------+

然后用户就不能再登录了(当然,除非他提供了正确的密码)。

代码语言:javascript
运行
复制
mysql -u db_user -p1234 --host localhost xydb -e 'SHOW DATABASES'
ERROR 1045 (28000): Access denied for user 'db_user'@'localhost' (using password: YES)
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/713552

复制
相关文章

相似问题

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