質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

999閲覧

gormでmysqlログインパスをエスケープする方法

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/02/24 08:44

別サーバーのmysqlにログインをしたいです

$ mysql -u ログイン名 -h 別サーバーのアドレス -p

ですとログインはできます。
ただ、

gorm.Open("mysql", "ログイン名:'aL513d1$vnfs4%AVBD9@a6Rw'@tcp(別サーバーのアドレス:3306)/DBname?charset=utf8mb4")

ですと

panic: Error 1045: Access denied for user 'ログイン名'@'自サーバーのアドレス' (using password: YES)

となりログインができません

おそらくパスワードに記号があるせいなのかなと推測はしているのですがpasswordをシングルクオーテーションや{ }でくくってもできず、パスワードの記号の前に\をつけても

unknown escape sequence

と言われうまくできません
どうすればログインができるのでしょうか?

mysql –version // Ver 8.0.19
go version go1.13.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

gormのドキュメントを見ての想像ですけど、'tcpを削除するとどうですか?

ログイン名:aL513d1$vnfs4%AVBD9@a6Rw@(別サーバーのアドレス:3306)/DBname?charset=utf8mb4

追記(2020/02/24 19:14)
すみません。tcpはあってもOKみたいです。また、Passwordの部分はエスケープしないでよいとあります。

投稿2020/02/24 10:10

編集2020/02/24 10:17
yukkeorg

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/24 10:18

同じエラーが出てしまいできませんでした @が2個あるためなのも原因かもしれないです https://en.wikipedia.org/wiki/Percent-encoding で aL513d1$vnfs4%AVBD9@a6Rw を aL513d1%24vnfs4%25AVBD9%40a6Rw と%エンコードも試してみたのですができませんでした
退会済みユーザー

退会済みユーザー

2020/02/24 10:27

すいません追記を見ずに返信をしてしまいました エスケープをしない場合先の@でパスワードが終了扱いになるのか同様にエラーが出てしまいうまくできません ですのでエスケープが必要なのかなと思い手段を探していたのですがエスケープが必要でないとなりますとどうすればよいいのかわからないですね・・・
退会済みユーザー

退会済みユーザー

2020/02/24 10:36

別サーバーへのログインではなく自サーバーへのログインの場合、パスがアルファベットだけでの接続は過去できた事はございます
yukkeorg

2020/02/24 10:41

一点ご確認させてほしいのですが、エラーの方は「自サーバのアドレス」が表示されているようですが、gorm.Openでは「別のサーバ」のアドレスを指定しているんですよね?自分のサーバを指定していたりしませんでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/24 10:47

そこは間違ってはおりませんでした DBサーバー(ip111.11.11.111)で CREATE USER 'ユーザー名'@'別サーバー(ip222.22.22.222)' IDENTIFIED BY 'aL513d1$vnfs4%AVBD9@a6Rw'; をし ip222.22.22.222からgormでDBサーバー(ip111.11.11.111)に接続をしようとした場合 panic: Error 1045: Access denied for user 'ユーザー名'@'222.22.22.222' (using password: YES) と表示がされてしまいます
yukkeorg

2020/02/24 11:24 編集

ご確認ありがとうございます。では、データベース"DBName"に `'ユーザー名'@'別サーバー(ip222.22.22.222)'` がアクセスできるように設定していますでしょうか? DBサーバ(ip111.11.11.111)で、 GRANT ALL ON DBName.* TO 'ユーザー名'@'別サーバー(ip222.22.22.222)';
yukkeorg

2020/02/24 11:48

あと、できたらで構いませんが、'ユーザー名'@'別サーバー(ip222.22.22.222)'のパスワードを変更してみて接続はできますでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/24 11:49

無事に接続できました 本当にありがとうございます @が二つあっても問題ないのですね mysql -u ログイン名 -h 別サーバーのアドレス -p でログインができる時点で権限はあるものだと思い込んでいたのですがどうしてgormの場合だけGRANTが必要になるのでしょうか?
yukkeorg

2020/02/24 13:16 編集

2020/02/24 22:15: 追記 gormの場合というわけではなく、 mysql -u ログイン名 -h 別サーバーのアドレス -p だけではログインできてもデータベース"DBName"まで接続していないためです。mysqlコマンドから DBName まで接続するには、 mysql -u ログイン名 -h 別サーバーのアドレス -p DBName とする必要があります。 管理者が作成したユーザは最初どのデータベースにも接続できる権限がないので、明示的にGRANTする必要があります。
退会済みユーザー

退会済みユーザー

2020/02/24 14:00

なるほど ログインと接続の権限は全く別物だったという事なのですね ご回答をしていただき本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問