ローカルNavicatはリモートデータベースに接続します

この記事を作成する理由は、Navicatを介してローカルでリモートサーバーのmysqlデータベースにローカルで接続しようとしたときに問題が発生したためです。接続できませんでした。多くの解決策が試行されました。AlibabaCloudサーバーの3306ポートも開いている、またはいいえ、最終的に解決策を見つけました、ここで共有してください!

まず、私の質問は次のとおりです。リモートサーバーのmysqlデータベースにローカルに接続したいのですが、ルートユーザーとして接続していますが、アクセスが拒否されましたAccess denied for user 'root'@'我本机的公网ip(using password:YES)。エラーメッセージは次のとおりです。そのときは非常に落ち込んでおり、エラーメッセージに表示されるIPアドレスはリモートのAliではありませんでした。クラウドサーバーのパブリックネットワークIP。後で確認しました。これは私のマシンのパブリックネットワークIPでした(Baiduで「ip」を検索すると表示されるIPアドレス)

結局、問題が見つかりました。私のマシンがrootユーザーとしてリモートサーバーのmysqlデータベースに接続できないのは、ネットワーク上の他のホストがデータベースのrootユーザーへのアクセスを許可されていないためです。問題を解決するには、次の設定が必要です。

  1. '123456'で識別されるユーザー 'root' @ '%'を作成します。
  2. すべての権限を付与*。* '123456'によって識別される 'root' @ '%'へ;
  3. FLUSH PRIVILEGES;

上記の3つのステップの説明:

  1. ネットワーク上の他のホストがデータベースにアクセスできるようにするrootユーザーを作成し、パスワードを123456に設定します(%はlocalhost以外のネットワーク上の他のホストを指します)
  2. 新しく作成したrootユーザーにすべてのデータベースを操作する権限を与えます。この承認操作がないと、新しく作成したrootユーザーはmysqlデータベースを表示できず、データベースで関連する操作を実行できません。
  3. システム許可テーブルを更新する

上記の問題の原因とそれは多くの時間を要しました。根本的な理由は、mysqlユーザー操作の習熟が十分にしっかりしていないためです。ユーザー操作に関する知識の理解を深めるために、ここに一般的なユーザー操作の要約:

  1. ユーザーを表示

mysqlデータベースユーザーに関する情報は、mysqlデータベースのユーザーテーブルに格納されています。このテーブルをチェックして、私たちに役立つ

フィールドのみをリストできます。属性hostフィールドは、ログインが許可されているホストを示し、「localhost」はユーザーはローカルでのみログインでき、別のマシンではリモートでログインできません。また、「%」は任意のコンピューターにログインできることを意味します。特定のマシンのみを指定してリモートでログインすることもできます。したがって、上の表のクエリの結果によると、ユーザーa、root、shoeshopはローカルまたはリモートで任意のマシンにログインできますが、ユーザーmysql.sessionおよびmysql.sysはローカルにしかログインできません。

  1. ユーザーを作成

ユーザー情報はmysqlデータベースのユーザーテーブルに格納されるため、理論的には新しいステートメントをユーザーテーブルに挿入して新しいユーザーを表すことができます。

insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

上記のステートメントには2つの問題があります。最初に、データベースのバージョンが5.7の場合、プロンプトが表示されます。Unknown column 'password' in 'field list'これは、mysql5.7以降、ユーザーテーブルにパスワードフィールドがなく、パスワードフィールドがauthentication_stringに変更されているためです。 authentication_stringに挿入すると、再度プロンプトField 'ssl_cipher' doesn't have a default valueが表示されます。エラーの理由は、mysqlがデフォルトでストリクトモードで設定されているため、新しいユーザーを追加するために挿入によってmysqlライブラリのユーザーテーブルを直接変更することが禁止されているためです。解決策は、my.ini(Windowsシステム)またはmy.conf(Linuxシステム)構成ファイルを変更することです。

但是为了数据库的安全,不推荐使用上面的方式进行创建用户,正确的创建用户的方式是 create user 'test'@'localhost' identified by '1234' 执行该语句之后,创建了一个名为test,密码为1234的用户,并且只能在本地登录,不支持远程登录;我们可以验证一下,在本机使用navicat连接远程服务器的mysql,并且以刚刚创建的test用户连接:
在这里插入图片描述
可以看到,连接被拒绝了,我们再查看下mysql数据库的user表,确实test用户的host字段只有localhost,并没有%
在这里插入图片描述
所以我们再次执行语句create user 'test'@'%' identified by '1234' 设置允许任一台机器以test用户远程登录,查看下mysql数据库的user表,test用户的host字段既有localhost也有%,也就是既支持本地登录也支持远程登录了,当再次连接,即可连接成功
在这里插入图片描述
3. 授予用户权限

对于新建的用户,是没有操作任何数据库的权限的,我们以新建的test用户登录之后,可以使用show databases; 命令查看所有数据库

①本地以test用户登录mysql,查看所有数据库只能看到information_schema,是因为我们并没有给host字段为localhost的test用户赋予任何数据库的权限,所以无权操作数据库,包括查看数据库
在这里插入图片描述
②远程以test用户登录mysql,查看所有数据库也是只能看到information_schema,是因为我们没有给host字段为%的test用户赋予任何数据库的权限,所以无权操作数据库,包括查看数据库
在这里插入图片描述
给用户授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by ‘密码’;

①我们设置本地登录的test用户具有所有数据库的权限:GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost'IDENTIFIED BY'1234'; 再次查看数据库,就可以看到所有的数据库,也能对数据库执行增删改操作
在这里插入图片描述
②我们设置远程登录的test用户具有所有数据库的权限:GRANT ALL PRIVILEGES ON *.* TO 'test'@'%'IDENTIFIED BY'1234'; 再次查看数据库,就可以看到所有的数据库,也能对数据库执行增删改操作
在这里插入图片描述
4. 修改用户密码(mysql 5.7 为例)

# 修改本地登录的test用户密码
update mysql.user set authentication_string=password(“新密码”) where User=”test” and Host=”localhost”;
# 修改远程登录的test用户密码
update mysql.user set authentication_string=password(“新密码”) where User=”test” and Host=”%”;
# 修改密码之后需要刷新系统权限表才能生效
flush privileges;
  1. 删除用户
# 删除用户
Delete FROM mysql.user Where User='用户名' and Host='localhost或者%';
flush privileges;

# 删除账户及权限:
drop user 用户名@’%’;
drop user 用户名@ localhost;

おすすめ

転載: blog.csdn.net/can_chen/article/details/107184239