首页 文章

授予从任何IP地址远程访问MySQL数据库的权限

提问于
浏览
236

我知道这个命令:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

但是它只允许我授予一个特定的IP地址来访问这个远程MySQL数据库 . 如果我需要它以便任何远程主机可以访问此MySQL数据库怎么办?我怎么做?基本上我将这个数据库公开,所以每个人都可以访问它 .

17 回答

  • 13
    TO 'user'@'%'
    

    %是一个通配符 - 如果需要,你也可以做 '%.domain.com''%.123.123.123' 之类的东西 .

  • 229

    启用远程访问(授权)主页/教程/ Mysql /启用远程访问(授权)如果您尝试从远程计算机连接到您的mysql服务器,并遇到如下错误,本文适合您 .

    ERROR 1130(HY000):主机“1.2.3.4”不允许连接到此MySQL服务器

    更改mysql配置

    从编辑mysql配置文件开始

    vim /etc/mysql/my.cnf
    

    注释掉以下几行 .

    #bind-address           = 127.0.0.1
    #skip-networking
    

    如果您没有找到skip-networking line,请添加并注释掉它 .

    重启mysql服务器 .

    ~ /etc/init.d/mysql restart
    

    更改GRANT权限

    您甚至可能会惊讶地看到,即使在上述更改后,您仍未获得远程访问权限或访问权限但无法访问所有数据库 .

    默认情况下,允许使用的mysql用户名和密码在本地访问mysql-server . 所以需要更新权限 .

    运行如下命令以从所有计算机访问 . (用您的凭据替换 USERNAMEPASSWORD . )

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
    

    运行如下命令以从特定IP进行访问 . (用您的凭据替换 USERNAMEPASSWORD . )

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
    

    您可以用您的IP替换1.2.3.4 . 您可以多次运行上述命令以从多个IP进行GRANT访问 .

    您还可以为远程访问指定单独的 USERNAMEPASSWORD .

    您可以通过以下方式检查最终结

    SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";
    

    最后,您可能还需要运行:

    mysql> FLUSH PRIVILEGES;
    

    测试连接

    从终端/命令行:

    mysql -h HOST -u USERNAME -pPASSWORD
    

    如果你得到一个mysql shell,别忘了运行show databases;检查您是否拥有远程计算机的权限 .

    奖金提示:撤销访问权限

    如果您不小心授予用户访问权限,那么最好将撤销选项放在手边 .

    以下将撤消所有计算机上USERNAME的所有选项:

    mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
    Following will revoke all options for USERNAME from particular IP:
    
    mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
    Its better to check information_schema.user_privileges table after running REVOKE command.
    

    如果在运行REVOKE命令后看到USAGE权限,则可以 . 它完全没有特权 . 我不确定它是否可以撤销 .

  • 24

    假设完成上述步骤并且可以远程访问MySql端口3306;不要忘记在mysql配置文件中绑定公共IP地址 .

    例如在我的ubuntu服务器上:

    #nano /etc/mysql/my.cnf
    

    在该文件中,搜索 [mysqld] section块并添加新的绑定地址,在此示例中为192.168.0.116 . 它看起来像这样

    ......    
    .....    
    # Instead of skip-networking the default is now to listen only on
    # localhost which is more compatible and is not less secure.
    
    bind-address        = 127.0.0.1    
    bind-address        = 192.168.0.116
    
    .....    
    ......
    

    如果选择,您可以删除localhost(127.0.0.1)绑定,但是您必须专门提供IP地址才能访问本地计算机上的服务器 .

    然后最后一步是重启MySql服务器(在ubuntu上)

    stop mysql
    
    start mysql
    

    #/etc/init.d/mysql restart 用于其他系统

    现在可以通过以下方式远程访问MySQL数据库:

    mysql -u username -h 192.168.0.116 -p
    
  • 16

    对于任何弄乱这个的人来说,这就是我如何授予权限,希望它能帮到某个人

    GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
    'yourRootPassword';
    

    如上所述 % 是一个通配符,这将允许任何IP地址连接到您的数据库 . 我在这里做的假设就是当你连接时你会有一个名为 root 的用户(虽然这是默认的) . 输入root密码,你就可以了 . 请注意,我在用户root周围没有单引号( ' ) .

  • 0

    需要配置文件更改才能通过localhost启用连接 .

    要通过远程IP连接,请以“root”用户身份登录并在mysql中运行以下查询 .

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
    
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
    
    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
    
    FLUSH PRIVILEGES;
    

    这将创建一个可在localhost和远程IP上访问的新用户 .

    另请在/etc/mysql/my.cnf中的my.cnf文件中注释以下行

    bind-address = 127.0.0.1
    

    使用重启你的mysql

    sudo service mysql restart
    

    现在您应该能够远程连接到您的mysql .

  • 3

    使用此命令:

    GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';
    

    然后:

    FLUSH PRIVILEGES;
    

    然后注释掉文件“/etc/mysql/mysql.conf.d/mysqld.cnf”中的以下行(是必需的!):

    bind-address = 127.0.0.1
    

    适合我! :-)

  • 4

    运行以下命令:

    $ mysql -u root -p      
    mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
    mysql> FLUSH PRIVILEGES;     
    mysql> exit
    

    然后尝试从您指定的IP地址进行连接:

    mysql -h address-of-remove-server -u root -p
    

    你应该能够连接 .

  • 8

    你可以通过this command来解决MariaDB的问题:

    注意:

    GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
    

    % 是一个通配符 . 在这种情况下,它指的是所有IP地址 .

  • 135
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
    
  • 1

    编辑文件:

    /etc/mysql/percona-server.cnf

    在文件中的代码下方追加 .

    [mysqld] bind-address = 0.0.0.0

    创建用于远程访问的用户 .

    $ mysql -u root -p      
    mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
    mysql> FLUSH PRIVILEGES;    
    mysql> exit
    

    所有linux服务器都有效,

    对于MSWin c:\查找insatallation location \ file path

  • 20
    • 使用admin用户启动MYSQL

    • mysql -u admin-user -p(输入PASSWORD ON PROMPT)

    • 创建新用户:

    • CREATE USER 'newuser' @ '%' IDENTIFIED BY 'password'; (% - >任何主机)

    • 授予权限:

    • GRANT SELECT,DELETE,INSERT,UPDATE ON db_name . * TO 'newuser' @ '%';

    • FLUSH PRIVILEGES;

    如果您正在运行EC2实例,请不要忘记使用MYSQL / Aurura在安全组中添加入站规则 .

  • 1

    您需要更改mysql配置文件:

    从编辑mysql配置文件开始

    vim /etc/mysql/my.cnf
    

    加:

    bind-address = 0.0.0.0
    
  • 0

    只需将用户创建为某个数据库即可

    GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

    然后去

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 并将行 bind-address = 127.0.0.1 更改为 bind-address = 0.0.0.0

    之后,您可以从任何IP连接到该数据库 .

  • -6

    打开 mysql console 并执行以下命令(输入您的数据库名称,用户名和密码):

    全部取消您的数据库名称 . *管理员@'%'通过'yourRootPassword'识别;

    然后执行:

    FLUSH特权;

    打开命令行并使用任何带有 root privileges 的编辑器打开文件 /etc/mysql/mysql.conf.d/mysqld.cnf .

    例如:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    

    然后注释掉以下行:

    bind-address = 127.0.0.1

    使用命令重新启动mysql以反映更改:

    sudo service mysql restart
    

    请享用 ;)

  • 18

    在像cPanel这样的网站面板中,您可以在允许的主机名中添加一个 % (百分号)来访问您的MySQL数据库 .

    通过添加单个 % ,您甚至可以从桌面应用程序访问任何IP或网站中的数据库 .

  • 1

    例如在我的CentOS中

    sudo gedit /etc/mysql/my.cnf

    注释掉以下几行

    #bind-address = 127.0.0.1

    然后

    sudo service mysqld restart

  • 36

    您可以通过编辑/etc/my.cnf来禁用所有安全性:

    skip-grant-tables
    

相关问题