この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のようなビジネス要件があります (以下は彼の原文です)。 MySQL の多くの機能は主キーに依存しているため、zabbix ユーザーを使用してビジネス データベース内のすべてのテーブルを監視し、主キーが確立されているかどうかを確認したいと考えています。 監視ステートメントは次のとおりです。 information_schema.tables t1から 左外部結合 information_schema.table_constraints t2 t1.table_schema = t2.table_schema の場合 かつ t1.テーブル名 = t2.テーブル名 AND t2.constraint_name IN ( 'PRIMARY' ) t2.table_name が NULL の場合 t1.table_schema が ( 'information_schema'、 'myawr'、 'mysql'、 に含まれない) 'パフォーマンススキーマ', 'slowlog'、'sys'、'test' ) かつ t1.table_type = 'ベーステーブル' しかし、zabbix ユーザーがビジネス データベース内のデータを読み取ることができるようにしたくありません。 Zabbix ユーザーにビジネス データベース データの読み取り権限が付与されなくなると、information_schema.TABLES および information_schema.TABLE_CONSTRAINTS にはビジネス データベースのテーブル情報が含まれなくなり、ビジネス データベース テーブルに主キーがあるかどうかをカウントできなくなります。ビジネス データベース テーブルに主キーが確立されていないかどうかを監視しているときに、Zabbix がビジネス データベース データを読み取らないようにする方法はありますか? まず、次の事実を知っておく必要があります。information_schema の下のビューは特定のユーザーに許可できません。下記の通り mysql> information_schema.TABLES に対して test@'%' への SELECT 権限を付与します。 エラー 1044 (42000): ユーザー 'root'@'localhost' によるデータベース 'information_schema' へのアクセスが拒否されました この問題の詳細については、mos のこの記事を参照してください: INFORMATION_SCHEMA の権限設定が機能しない理由 (ドキュメント ID 1941558.1) 適用対象: MySQL サーバー - バージョン 5.6 以降 このドキュメントの情報は、どのプラットフォームにも適用されます。 ゴール INFORMATION_SCHEMA に対する MySQL 権限がどのように機能するかを決定します。 解決 単純な GRANT ステートメントは次のようになります。 mysql> information_schema.* に対する select、execute 権限を 'dbadm'@'localhost' に付与します。 エラー 1044 (42000): ユーザー 'root'@'localhost' によるデータベース 'information_schema' へのアクセスが拒否されました このエラーは、スーパーユーザーにinformation_schemaアクセス権限を変更する権限がないことを示しています。 これは、SUPER 権限を持つ root アカウントの場合に通常起こることとは矛盾しているようです。 このエラーが発生する理由は、information_schema データベースが実際にはサービスの開始時に構築される仮想データベースであるためです。 これは、サーバーのメタデータ、つまりデータベース サーバー内のすべてのテーブル、プロシージャなどの詳細を追跡するように設計されたテーブルとビューで構成されています。 したがって、上記のコマンドを具体的に見ると、この特殊なデータベースに SELECT 権限と EXECUTE 権限を追加しようとしていることがわかります。 ただし、すべてのユーザーが information_schema データベース内のテーブルを読み取ることができるため、SELECT オプションは不要であり、これは冗長です。 この特別なデータベースではプロシージャを作成することは許可されていないため、EXECUTE オプションは意味がありません。 また、INSERT、UPDATE、DELETE などの観点からテーブルを変更する機能もないため、権限はユーザーごとに管理されるのではなく、ハードコードされています。 では、この認証の問題をどのように解決すればよいのでしょうか? 直接的な認証は機能しないため、この問題を回避して間接的に認証を実装することしかできません。考え方は次のとおりです。まず、主キーのないテーブルの数を見つけるストアド プロシージャ (ユーザー データベース) を作成し、それをテスト ユーザーに付与します。 区切り文字 // CREATE DEFINER=`root`@`localhost` PROCEDURE `moitor_without_primarykey`() 始める 選択カウント(*) information_schema.tables t1から 左外部結合 information_schema.table_constraints t2 t1.table_schema = t2.table_schema の場合 かつ t1.テーブル名 = t2.テーブル名 AND t2.constraint_name IN ( 'PRIMARY' ) t2.table_name が NULL の場合 t1.table_schema が ( 'information_schema'、 'myawr'、 'mysql'、 に含まれない) 'パフォーマンススキーマ', 'slowlog'、'sys'、'test' ) AND t1.table_type = 'ベーステーブル'; 終わり // 区切り文字 ; mysql> プロシージャ moitor_without_primarykey の実行権限を 'test'@'%' に付与します。 クエリは正常、影響を受けた行は 0 行 (0.02 秒) この時点で、テストは information_schema の下のオブジェクトを間接的にクエリできます。 mysql> current_user() を選択します。 +----------------+ | 現在のユーザー() | +----------------+ | テスト@% | +----------------+ セット内の 1 行 (0.00 秒) mysql> moitor_without_primarykey を呼び出します。 +----------+ | カウント(*) | +----------+ | 6 | +----------+ セット内の1行(0.02秒) クエリは正常、影響を受けた行は 0 行 (0.02 秒) テストユーザーの権限を確認します。 mysql> test@'%' の権限を表示します。 +---------------------------------------------------------------------------------+ | テスト@% の助成金 | +---------------------------------------------------------------------------------+ | `test`@`%` に *.* の使用権限を付与 | | プロシージャ `zabbix`.`moitor_without_primarykey` の実行権限を `test`@`%` に付与します | +---------------------------------------------------------------------------------+ セット内の 2 行 (0.00 秒) MySQL が information_schema 内のオブジェクトの付与をバイパスし、ERROR 1044 (4200) を報告することについての記事はこれで終わりです。MySQL ERROR 1044 (4200) に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: JS の難しさ 同期と非同期、スコープとクロージャ、プロトタイプとプロトタイプ チェーンの詳細な説明
>>: Dockerfile テキストファイルの使用例の分析
本日の記事では、主にNginxのリロードプロセスについて紹介します。実は前回の記事では、nginx ...
1.1 iptablesファイアウォールの概要Netfilter/Iptables (以下、Ipta...
今日は、CSS を使用してアニメーションの再生と一時停止を制御する非常に簡単なトリックを紹介します。...
コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...
目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...
3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...
この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...
目次1. ノード、ツリー、仮想DOM 2. 仮想DOM 2.1 データオブジェクトの詳細2.2 制約...
この記事では、ネイティブ JS で実装された特殊効果メッセージ ボックスを紹介します。効果は次のとお...
序文この記事では主に、MySQLに大量のデータを挿入する4つの方法を紹介し、参考と学習のために共有し...
1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...
前回の記事では、JS を使って簡単な揺れ効果を実現する方法を紹介しました。ご興味があればクリックして...
マウスをホバーすると画像が折りたたまれる効果を実現する CSS 1. 実施のポイント折り畳みは複数の...
Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...
目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...