似たような質問をたくさん見てきたので、基本を確認したことを示しています。もちろん、それは私が完全に明白な何かを見逃していないという意味ではありません。:-)
私の質問は、なぜ私がやろうとしていることを実行する特権を持つユーザーへのアクセスを拒否され、パスワードを入力してアクセスが許可されているのですか?(完全を期すために、MySQLクライアントがプログラムの起動時にアクセスを拒否することを確認するために、間違ったパスワードを入力しようとしました。)
バックグラウンド:
ssh経由でMySQLサーバーを実行しているマシンのシェルにログインし、rootとしてログインします。
[[email protected] ~]$ mysql -u root -p -hlocalhost
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
驚くばかり。同様の質問への回答を読んだことは、特権が付与テーブルにあるものと最新のものであることを確認する必要があることを示唆しています
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
次に、私が自分だと思う人であることを確認します。
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.00 sec)
...そして本当に本当に確認してください:
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.00 sec)
mysql>
ここまでは順調ですね。今、私はどのような特権を持っていますか?
mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
これは少し読みにくいので、この方法を試してみましょう(localhost以外の「root」ユーザーがいることもわかります)。
mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
*************************** 2. row ***************************
Host: [HOSTNAME].com
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
2 rows in set (0.00 sec)
驚くばかり!MySQLは、私がroot @ localhostであり、root @localhostがこれらすべての特権を持っていると考えています。つまり、私は自分のやりたいことができるはずですよね?
mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
どうすればこの基本的なものを台無しにすることができますか?
補足:すべての特権を持つrootという名前のユーザーがいないことを提案したい人にとっては、それは素晴らしいことであり、別のユーザーにいくつかの特権を与えることができたら実行することを検討します。
ありがとうございました!
の出力がどのように
SHOW GRANTS FOR 'root'@'localhost';
'ALL PRIVILEGES'とは言わなかったが、root @localhostが持っているものを詳しく説明する必要があった。
ユーザーが持っていないものを付与できず、サーバーが何かがここにないと考えているように見えるため、GRANT ALLPRIVILEGESは失敗します...
さて、何が欠けていますか?
私のシステムでは、これを取得します:
mysql> select version();
+------------+
| version() |
+------------+
| 5.5.21-log |
+------------+
1 row in set (0.00 sec)
mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for [email protected] |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM mysql.user WHERE User='root' and Host='localhost'\G
*************************** 1. row ***************************
Host: localhost
User: root
Password:
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y <----------------------------- new column in 5.5
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: <------------------------------- new column in 5.5
authentication_string: <------------------------------- new column in 5.5
1 row in set (0.00 sec)
5.5には、mysql.proxies_userなどの新しいテーブルもあります。それらがあることを確認してください。
まったく新しいmysqlサーバーインスタンスをインストールする場合、インストールスクリプトは、適切な構造ですべてのmysql。*テーブルを作成します。
古いバージョンからアップグレードする場合は、適切なアップグレード手順(mysql_upgrade)が使用されていることを確認してください。これにより、不足しているテーブル/列が追加されます。
これは単なる推測ですが、このインスタンスに対してmysql_upgradeが実行されなかったため、動作が見られたようです。
私もこれで同じ問題を抱えていましたが、MySQL5.1からMySQL5.5にアップグレードした後のWindowsで。私はすでに、変更の作成、およびに記載されたパスワードをリセットしようとしたここに、ここでは、ここでは、とここでは、見当もつかない。それでも同じエラーが発生します:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
私は正常に接続し、すべてのデータベースを表示し、選択と挿入を行い、ユーザーを作成して追加することができますが、GRANTに関しては、私は困惑しています。これらのアクセス拒否エラーが再び表示されます。
ここで説明されているように、MySQLサーバーのbin /ディレクトリで次のコマンドを使用して特権を修正することで、この問題を解決することができました。
C:\MySQL Server 5.5\bin> mysql_upgrade
その後、問題は解決しました。通常、MySQLはLinuxとWindowsの両方で同じコマンドを提供するため、このソリューションがLinuxでも機能することを願っています。
これは、mysql.usersテーブルがroot以外のユーザーの立ち入り禁止と見なされるため、すべてのテーブルに対するすべての権限を別のユーザーに付与しようとしたときに発生する可能性があります。
ただし、以下は機能するはずです。
GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;
*。*の代わりに `%`。*を使用することに注意してください
これは、ディストリビューションに付属しているバージョンよりも高いバージョンのMySQLをインストールしようとしたときに発生しました。
古いバージョンを消去してから新しいバージョンをインストールしました(rpm -e ...次にrpm-i MySQL-server *)が、/ var / lib / mysql内のファイルがまだ古いバージョンのものであることに気づきませんでした( Marc Alffによる説明-ありがとう!)
mysql_upgradeを実行することもできましたが、最初からやりたかったので、次のようにしました。
# su - mysql
$ rm -rf /var/lib/mysql/* $ mysql_install_db
# /etc/init.d/mysql start
次に、rootパスワード(/ usr / bin / mysqladmin -u root password)を設定すると、すべてがGRANTコマンドで期待どおりに機能しました...
私は同じ問題を抱えていました。つまり、rootに付与されたすべての特権です。
SHOW GRANTS FOR 'root'@'localhost'\G
*************************** 1. row ***************************
Grants for [email protected]: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*[blabla]' WITH GRANT OPTION
...ただし、テーブルの作成は許可されていません。
create table t3(id int, txt varchar(50), primary key(id));
ERROR 1142 (42000): CREATE command denied to user 'root'@'localhost' for table 't3'
まあ、それは迷惑なユーザーエラーが原因でした。つまり、データベースを選択しませんでした。USE dbnameを発行した後、正常に機能しました。
MySQLバージョン8がインストールされている(私のように)この質問に来て、満足のいく答えが見つからなかった可能性があります。バージョン8では、次のようなユーザーを作成できなくなりました。
GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
返されるかなり紛らわしいエラーメッセージは次のとおりです。 ERROR 1410 (42000): You are not allowed to create a user with GRANT
バージョン8でユーザーを作成するには、次の2つの手順で作成する必要があります。
CREATE USER 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]';
GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' WITH GRANT OPTION;
もちろん、必要に応じて、(の代わりにGRANT ALL PRIVILEGES
)限られた数の特権を提供することもできます。GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER
基本的に、このエラーは、パスワードを指定していない場合に発生します。これは、一部のオプションファイルに間違ったパスワードがリストされていることを意味します。
アカウントにパスワードを割り当てて管理する方法を理解するには、このDOCをお読みください。
また、フォルダの権限/var/lib/mysql/mysql
が711かどうかを確認してください。
MySQL 5.5.40を搭載したDebian(Wheezy、7.8)でSELECT * FROM mysql.user WHERE User='root'\G
、Event_priv
および 'Trigger_priv`フィールドが存在するが、Yに設定されていないことがわかりました。
mysql_upgrade
(ありまたはなしで--force
)実行しても違いはありません。私はマニュアルをする必要がありました:
update user set Event_priv = 'Y',Trigger_priv = 'Y' where user = 'root'
そして最後に私は使うことができました:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION
…そして、それを個々のデータベース/ユーザーアカウントでより正確に使用します。
入力SHOW GRANTS FOR 'root'@'localhost';
すると、あいまいなパスワードが表示されたので、別のシステムでHeidiSQLを使用root
して(ユーザー名と対応するパスワードとして使用して)そのシステムのmysqlにログインし、入力しました。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;
システムに戻ってログオンしたときに機能しました
mysql -uroot -pthepassword;
mysqlのバグであるperformance_schemaに特権を追加しようとしたときに、これで実行します http://bugs.mysql.com/bug.php?id=44898 (--single-transactionを追加するための回避策)。
私も同じ問題を抱えていて、SOの投稿とGoogleのドキュメントを読むのに多くの時間がかかりました。私はついにこれをCloudSQL FAQから見つけました:
Google Cloud SQLはSUPER権限をサポートしていません
GRANT ALL PRIVILEGES
。つまり、ステートメントは機能しません。別の方法として、GRANT ALL ON `%`.*
私のようにまだこれに遭遇している人にとっては、試みられたGRANT
ものがまだ存在していないことを確認する価値があります:
SHOW GRANTS FOR username;
私の場合、エラーは実際には許可エラーがあったためではなく、GRANT
すでに存在していたためです。
mysqlの「アクセスが拒否されました」エラーに直面したときに常に機能する1つの簡単な解決策:を使用しますsudo
。
sudo mysql -u root
次に、GRANT
コマンドに必要な権限が存在します。
特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。
ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。
ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。
今日のホワイトハウスの記者会見で、報道官のサラ・ハッカビー・サンダースは、スポーツセンターのホストであるイェメル・ヒルのドナルド・トランプに関する最近のツイートについてコメントするよう求められ、大統領と彼の政策を白人至上主義者として説明した。ヒルは彼女のつぶやきのためにESPNによって公に叱責されました。
基本的に頭のあらゆる部分から髪の毛を整えたり、ブロードライしたり、まっすぐにしたり、脱毛したりする必要がある場合は、このレミントンゴールドボックスが最適です。今日だけ、Amazonは、すでに人気のあるShortcut Pro Self-HaircutKitやPearlPro Ceramic Flat Ironのように、グルーミングをはるかに簡単にするヘアツールをマークダウンしています。
トゥパックシャクール(ティムモーゼンフェルダー/ゲッティイメージズ); マヤアンジェロウ(マーティンゴッドウィン/ゲッティイメージズ)移動、テイラースウィフト。ケンドールとカイリーは、必要な数の座席を持っています。
写真:Tesla Motorsフロリダに住んでいて、Tesla Model S、Model X 60、またはModel 60Dを使用している場合、車の自律性は50 km(約30マイル)高くなります。これは失敗ではなく、ハリケーンイルマによる避難作業を容易にするために会社自身が命じた自治権の一時的な延長です。
Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday
シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。
オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。
Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。
遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。
2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。
計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。