データベース管理の世界では、データの整合性とセキュリティを維持するためにユーザー アクセスを制御することが重要です。このブログ投稿では、プロセス、潜在的な落とし穴、デバッグ手順など、MySQL ユーザー権限を設定する実際のシナリオを説明します。
あなたは、複数のデータベースを持つ会社のデータベース管理者であると想像してください:
あなたのタスクは、「analyst」という名前のユーザーに次の要件を持つ権限を設定することです:
MySQL の GRANT ステートメントと REVOKE ステートメントを使用してこれを実現する方法を詳しく見てみましょう。
まず、管理者アカウントを使用して MySQL サーバーに接続する必要があります:
mysql -h hostname -P port -u admin -p
「ホスト名」、「ポート」、「管理者」を実際のサーバーの詳細と管理者のユーザー名に置き換えます。
ユーザーがまだ存在しない場合は、作成する必要があります:
CREATE USER 'analyst'@'%' IDENTIFIED BY 'password';
「パスワード」を強力で安全なパスワードに置き換えます。
次に、必要な権限を付与しましょう:
-- Grant SELECT on original databases GRANT SELECT ON products.* TO 'analyst'@'%'; GRANT SELECT ON customers.* TO 'analyst'@'%'; GRANT SELECT ON orders.* TO 'analyst'@'%'; GRANT SELECT ON analytics.* TO 'analyst'@'%'; -- Grant all privileges on copy databases GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; -- Grant global privileges GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Apply the changes FLUSH PRIVILEGES;
権限を設定した後、それらを確認することが重要です:
SHOW GRANTS FOR 'analyst'@'%';
このシナリオでは、最初に「アナリスト」が多すぎる権限を持っているという問題が発生しました:
mysql> SHOW GRANTS FOR 'analyst'@'%'; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Grants for analyst@% | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO "analyst"@"%" WITH GRANT OPTION | | GRANT REPLICATION_APPLIER,ROLE_ADMIN ON *.* TO "analyst"@"%" WITH GRANT OPTION | ... ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
これを修正するために、すべての権限を取り消し、必要な権限のみを付与しました:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'analyst'@'%'; GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Then re-grant the specific permissions as shown in Step 3
過剰な権限を修正した後、コピー データベースの権限が欠落していることに気付きました:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | -----------------------------------------------------
コピー データベースに不足していた権限を追加しました:
GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; FLUSH PRIVILEGES;
これらの変更と修正をすべて適用すると、最終的な付与は次のようになります:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | | GRANT ALL PRIVILEGES ON "products_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "customers_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "orders_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "analytics_copy".* TO "analyst"@"%"| -----------------------------------------------------
MySQL ユーザー権限を適切に設定するのは難しい場合がありますが、データベース管理の重要な側面です。 GRANT ステートメントと REVOKE ステートメントを慎重に使用し、結果を常に検証することで、ユーザーにとって安全で機能的な環境を作成できます。
次の重要なポイントを覚えておいてください:
これらのガイドラインとこの投稿で概説されている手順に従うことで、MySQL ユーザー権限を効果的に管理するための準備が整います。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3