V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gdtv
V2EX  ›  问与答

phpmyadmin 使用 HTTP BASIC 认证是否比使用数据库账号密码认证更安全?

  •  
  •   gdtv · 2017-01-24 10:49:15 +08:00 · 1458 次点击
    这是一个创建于 2653 天前的主题,其中的信息可能已经有所发展或是发生改变。
    某服务器上装有 apache + php + phpmyadmin 并且允许外网访问。

    现在有三个方案:
    1 、使用数据库的账号和密码登录——这样每次要输入数据库账号和密码
    2 、 phpmyadmin 所在目录设置 HTTP BASIC 认证——这样每次要输入 HTTP BASIC 认证的账号和密码,以及数据库账号和密码
    3 、 phpmyadmin 所在目录设置 HTTP BASIC 认证,并且将数据库的 root 账号和密码设置到 phpmyadmin 的 config 文件里——这样每次要输入 HTTP BASIC 认证的账号和密码,不用输入数据库密码

    第 2 种方法太麻烦,请问 1 和 3 哪种方案更安全呢?

    我知道在公网使用 phpmyadmin 是不安全的,使用 root 账号登录更不安全,但为了方便,只好这样。
    12 条回复    2017-01-24 14:52:06 +08:00
    CloudMx
        1
    CloudMx  
       2017-01-24 10:58:36 +08:00
    你这三个方案,在同一环境下,两次密码不一致的话, 2 最安全,双重认证。 3 跟 1 在安全上没有什么区别( MYSQL 只允许你的 PHPMYADMIN 机器连接)。
    privil
        2
    privil  
       2017-01-24 10:59:26 +08:00
    你偷懒,就额外开一个监听本地的 web 站点,跑 phpmyadmin ,要用就远程上去用就算了。不过都搞成这样了,还不如直接远程跑 Navicat for MySQL 啥的了,你非要公网跑,那你随意咯
    gdtv
        3
    gdtv  
    OP
       2017-01-24 11:03:19 +08:00
    @CloudMx 补充一下, mysql 只允许本地连接

    @privil 补充一下,现在 mysql 只允许本地连接,如果为了用 Navicat 而允许远程连接是不是更不安全了?是不是还不如用 phpmyadmin 然后禁止远程连接? 开一个监听本地的 web 站点然后远程上去,可是我这是 linux 没有图形界面怎么访问 web 站呢?
    donlxn22
        4
    donlxn22  
       2017-01-24 11:03:56 +08:00
    第四种方案: SSH TUNNEL + phpmyadmin localhost 访问

    phpmyadmin 设置为只允许内网 localhost 访问;需要连接的时候使用 SSH 隧道映射到服务器的 localhost ;可以依赖于 SSH 协议的安全机制,也方便些;

    https://degreesofzero.com/article/manage-remote-mysql-servers-with-local-phpmyadmin.html
    Tink
        5
    Tink  
       2017-01-24 11:04:43 +08:00
    建议用 ssl 客户端认证,这应该是最安全的方案
    privil
        6
    privil  
       2017-01-24 11:24:27 +08:00
    @gdtv 四楼正解,反正你只要通过隧道代理啥的,就能访问服务器本地监听的服务了
    CloudMx
        7
    CloudMx  
       2017-01-24 11:29:40 +08:00
    只允许本地连接,那就是只有一个口登录操作你的 MYSQL 了, PHPMYADMIN.所以,两次密码不一致的话, 2 最安全,双重认证,但是麻烦。 3 跟 1 在安全上没有什么区别。
    zjqzxc
        8
    zjqzxc  
       2017-01-24 11:32:23 +08:00
    所以说,这才是 VPN 的目标使用环境
    shiji
        9
    shiji  
       2017-01-24 13:56:15 +08:00 via Android
    @gdtv 如果没上 HTTPS ,这三个都不安全。 上了 HTTPS ,方案 1 就行。
    我自己的 MySQL 开启远程连接三四年了,啥事没有。需要注意的是,权限配置要细化。我一般的操作方案是,比如要装 WordPress ,新建用户 wp ,新建库 wp ,只分配给 wp 用户所有 wp 数据库的权限。 WordPress 在本机, wp 用户就只允许 localhost 连接。如果给远程别的服务器用,也同样尽可能的限制 IP 。
    我的 root 也允许远程,给 navicat 用。为了保证数据安全开启了 ssl 。(类似于自签发证书的步骤,但是稍微麻烦些,跟着教程走就好)
    我服务器有个简单的分析端口扫描的 iptables 规则,根据统计,攻击我 3306 的超级超级少。
    shiji
        10
    shiji  
       2017-01-24 14:05:51 +08:00 via Android
    @shiji 补充说明,扫描的多,攻击的少。
    ryd994
        11
    ryd994  
       2017-01-24 14:47:21 +08:00
    看你对安全的定义
    个人观点而言, apache 的 http 验证是很成熟了,而 php 下的验证虽然逻辑上是可靠的,但想想 apache 的验证模块可能比 php 还老……而且资源消耗肯定也低
    其次只要你用 apache ,就能用 http 各种 slow 攻击打到你服务器卡死, prefork 硬伤,必须做好连接频率限制,或者前面 nginx 鉴权,限流,顶压力
    ryd994
        12
    ryd994  
       2017-01-24 14:52:06 +08:00
    如果你系统运维和数据库运维是同一批人的话, ssh 其实是最好的,因为不需要额外设置,反正能拿到 ssh 的人基本上也就有机会 dump 你数据库了,没差
    如果不同的话, ssh 加个转发专用用户固然可以,但其实管起来麻烦

    还有一条路是 https 客户端证书,反正自签一个就行,如果现有内部自签证书在用,有严格执行标准流程的话,安全也是不成问题的,不过不会太方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   880 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 477ms · UTC 22:12 · PVG 06:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.