V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gdtv
V2EX  ›  问与答

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

  •  
  •   gdtv · Jan 24, 2017 · 1938 views
    This topic created in 3388 days ago, the information mentioned may be changed or developed.
    某服务器上装有 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 replies    2017-01-24 14:52:06 +08:00
    CloudMx
        1
    CloudMx  
       Jan 24, 2017
    你这三个方案,在同一环境下,两次密码不一致的话, 2 最安全,双重认证。 3 跟 1 在安全上没有什么区别( MYSQL 只允许你的 PHPMYADMIN 机器连接)。
    privil
        2
    privil  
       Jan 24, 2017
    你偷懒,就额外开一个监听本地的 web 站点,跑 phpmyadmin ,要用就远程上去用就算了。不过都搞成这样了,还不如直接远程跑 Navicat for MySQL 啥的了,你非要公网跑,那你随意咯
    gdtv
        3
    gdtv  
    OP
       Jan 24, 2017
    @CloudMx 补充一下, mysql 只允许本地连接

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

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

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

    还有一条路是 https 客户端证书,反正自签一个就行,如果现有内部自签证书在用,有严格执行标准流程的话,安全也是不成问题的,不过不会太方便
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   760 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 21:17 · PVG 05:17 · LAX 14:17 · JFK 17:17
    ♥ Do have faith in what you're doing.