この質問は、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 テキストファイルの使用例の分析
インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、...
導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...
ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...
導入分散システムでは、分散ロックは最も基本的なツール クラスです。たとえば、支払い機能を備えた 2 ...
バージョン1.4.2公式ドキュメントドッカーハブ起動する環境変数SEATA_CONFIG_NAMEを...
テーブル パーティショニングは、データベース パーティショニングとは異なります。では、テーブル パー...
<br />注目を集めるウェブサイトを作成するには、どのような原則に従うべきでしょうか?...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...
1. はじめに:友人はシステム知識を学びたいと考えており、Apple のラップトップを使用していまし...
JDBC の 6 つのステップ: 1. ドライバーを登録する2. データベース接続を取得する3. デ...
目次序文非同期イテレータとは何ですか?非同期イテレータストリームとしてページング機能を備えたAPIの...
目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...
目次入力ボックスをクリックして開始します拡張機能入力ボックスをクリックすると複数のイベントが発生しま...
Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...
序文非表示要素の 3 つの属性である表示、可視性、不透明度の類似点と相違点は、フロントエンドの就職面...