sql >> データベース >  >> RDS >> Mysql

MySql:読み取り専用オプションを付与しますか?

    「すべての読み取り」をどのように定義するかによって異なります。

    テーブルとビューからの「読み取り」はSELECTです 特権。それが「すべて読んだ」という意味の場合は、はい:

    GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
    

    しかし、それはあなたがすべてを「見る」能力、「見るが触れない」能力を意味しているように聞こえます。それで、ここに頭に浮かぶ他の種類の読書があります:

    ビューの定義を「読み取る」とは、SHOW VIEWです。 特権。

    他のユーザーが現在実行しているクエリのリストを「読み取る」のは、PROCESSです。 特権。

    現在のレプリケーション状態を「読み取る」のは、REPLICATION CLIENTです。 特権。

    問題のユーザーの性質によっては、これらのいずれかまたはすべてが、意図したよりも多くの情報を公開する可能性があることに注意してください。

    それがあなたがしたい読書であるならば、あなたはそれらのどれでも(または利用可能な特権 )単一のGRANT ステートメント。

    GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
    

    ただし、他の特権のサブセットを付与する単一の特権はありません。これは、あなたが求めているように聞こえます。

    手動で作業を行っていて、特定のクラスのユーザーに対して通常行う正確な付与を覚えておく必要がなく、これを実行する簡単な方法を探している場合は、ステートメントを検索して、同等のユーザーの付与を再生成し、変更することができます。同様の権限を持つ新しいユーザーを作成するには:

    mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
    +------------------------------------------------------------------------------------------------------------------------------------+
    | Grants for [email protected]                                                                                                      |
    +------------------------------------------------------------------------------------------------------------------------------------+
    | GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
    +------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    追加する新しいユーザーに一致するように「not_leet」と「localhost」をパスワードとともに変更すると、再利用可能なGRANTになります。 新しいユーザーを作成するステートメント。

    単一の操作で制限された特権のセットを設定してユーザーに付与し、場合によってはメリットのない特権を削除する場合は、実行するすべてのことをカプセル化するストアドプロシージャを作成することで実行できます。手順の本文内で、GRANTを作成します 動的SQLを使用したステートメント、および/または許可テーブル自体を直接操作します。

    データベース管理者に関するこの最近の質問 、ポスターは、非特権ユーザーが他のユーザーを変更できるようにすることを望んでいましたが、これはもちろん通常は実行できないことです。他のユーザーを変更できるユーザーは、ほとんどの場合、非特権ユーザーではありません。ただし、- -ストアドプロシージャは、DEFINERのセキュリティコンテキストで実行されるため、この場合に優れたソリューションを提供しました。 ユーザー、EXECUTEを持つすべての人を許可します プロシージャが実行する特定のことを実行できるように、エスカレーションされた特権を一時的に引き受けるためのプロシージャの特権。



    1. Azureのギャップを埋める:マネージドインスタンス

    2. 非常に大規模なデータベースをアンロードする

    3. PL/SQLで例外を処理する方法を学ぶ

    4. OracleでSQLを使用して現在の年を取得するにはどうすればよいですか?