zoukankan      html  css  js  c++  java
  • linux上mysql访问:Access denied for user 'agtipay'@'iZm5ebiyb4f90ga9xiycgsZ' (using password: YES)

    公司的聚合支付测试环境出了一个问题(agtipay用户访问数据的时候出现如题错误),快搞死我两天时间(原谅技术不才),如题。首先明确一下问题:

            1、访问拒绝,说明数据库连接这里有问题,数据库连接访问拒绝,要么是没有相应的用户操作权限,要么是账号密码错误

            2、iZm5ebiyb4f90ga9xiycgsZ。这个参数说明。首先这个参数是系统/etc/hosts下面配置的ip的映射参数。

                3、数据库访问用户含:root  以及agtipay。

            4、mysql安装在本机的linux操作系统上面。

    再次明确一下问题的奇怪之处:linux本机上只要用主机IP地址访问数据库mysql,就无法连接,只能通过localhost连接。而同样的IP地址形式的JDBC连接从远程主机(用户root以及agtipay)却能正常连接。JDBC也正常.

    后面再次排查了一下,明确错误原因:远程主机能连接,说明mysql的远程连接已经打开,访问是正常的,这肯定没问题。服务器本机配置了ip映射在/etc/hosts文件, 在该文件中,机器的ip被DNS系统解释成主机名iZm5ebiyb4f90ga9xiycgsZ。

    jboss5数据源配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <datasources>
      <local-tx-datasource>
        <jndi-name>ibs/db/mysql</jndi-name>
        <connection-url>jdbc:mysql://ip:端口/pay?useUnicode=true&amp;characterEncoding=gbk&amp;useOldAliasMetadataBehavior=true&amp;autoReconnect=true</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
            <user-name>agtipay</user-name>
        <password>rklxi4PbXA8UmtrB</password>
        <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
        <background-validation>true</background-validation>
        <background-validation-millis>10000</background-validation-millis>
        <new-connection-sql>select 1</new-connection-sql>
        <check-valid-connection-sql>select 1</check-valid-connection-sql>
        <min-pool-size>10</min-pool-size>
        <max-pool-size>10</max-pool-size>
        <blocking-timeout-millis>5000</blocking-timeout-millis>
        <metadata>
           <type-mapping>mySQL</type-mapping>
        </metadata>
      </local-tx-datasource>
    </datasources>

    而在mysql的权限管理中, iZm5ebiyb4f90ga9xiycgsZ被配置成只能用root登录。所以导致应用中的agtipay用户无法连接。而远程主机mysql权限本身没有配置agtipay主机名, 所以需要通过mysql的进行权限检查配置给agtipay。

    查询权限表SQL如下:

    SELECT HOST ,USER FROM mysql.user

     解决办法:

     执行授权语句(授权语句的解释请自行百度):

    GRANT ALL PRIVILEGES ON *.* TO 'agtipay'@'iZm5ebiyb4f90ga9xiycgsZ' IDENTIFIED BY '相应用户ahtipay的密码' WITH GRANT OPTION;
     FLUSH PRIVILEGES;

    授权语句说明

    参数说明: ALL PRIVILEGES表示赋给远程登录用户的权限,ALL PRIVILEGES表示所有的权限,你也可以单独或组合赋select,update,insert,delete权限;*.*:第一个*表示要赋权的数据库名,*当然表示全部数据库了,第二个*表示数据库下的表名,同理,*表示全部表,像我这样的懒人当然就直接用*.*了,反正都是自己开发用
    
    agtipay表示要赋权的用户;iZm5ebiyb4f90ga9xiycgsZ表示远程登录的IP,如果要限制登录IP的话,这里就添你允许登录的IP,比如192.18.1.99等,%表示不限制IP,相应用户ahtipay的密码是用户远程登录的密码。就这么简单。这句运行以后再运行FLUSH PRIVILEGES,搞定!

    授权后,agtipay用户也能通过IP从本地连接, 应用恢复正常。

         

  • 相关阅读:
    HTML5保留的常用元素(三)
    HTML5保留的常用元素(二)
    HTML5保留的常用元素(一)
    vue项目打包部署到nginx 服务器上
    linux 前端部署
    window.open打开新窗口被浏览器拦截的处理方法
    windows java 环境变量配置
    npm 报错: npm ERR! Please try running this command again as root/Administrator.
    angular 之路由
    git 的日常使用命令
  • 原文地址:https://www.cnblogs.com/yuanchaoyong/p/9823622.html
Copyright © 2011-2022 走看看