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

MySQLテーブルレベルの権限について学ぶ

    特定のデータベース内のすべてのテーブルへのアクセスを許可する次のようなgrantステートメントが表示されることは非常に一般的です。

    GRANT SELECT, SHOW VIEW
    ON mydatabase.*
    TO myreaduser@myhost IDENTIFIED BY 'somepassword';
    FLUSH PRIVILEGES;
    

    mydatabasemyreadusermyhoost 、およびsomepassword データベースに適切な変数です。 FLUSH PRIVILEGESに注意してください コマンドはMySQLの特権をリセットし、実行されるまで新しいユーザー許可を使用できなくなります。

    このようなユーザーは、データベース内のすべてのテーブルを読み取ってアクセスできるようになります。この例では、3つのテーブルを持つboatioデータベースを使用します:boatstrips 、およびusers

    mysql> show tables;
    +------------------+
    | Tables_in_boatio |
    +------------------+
    | boats            |
    | trips            |
    | users            |
    +------------------+
    3 rows in set (0.00 sec)
    

    tripsにのみアクセスできるユーザーを作成したい場合 テーブルでは、すべてのテーブルを表すワイルドカードスプラット(*)を、必要な特定のテーブル(この場合はtrips)に置き換えるだけです。 。

    GRANT SELECT, SHOW VIEW
    ON boatio.trips
    TO myreaduser@localhost IDENTIFIED BY 'somepassword';
    FLUSH PRIVILEGES;
    

    これで、新しいユーザーとしてログインし、show tableを実行して、tripsにのみアクセスできることを確認できます。 テーブルであり、他の2つではありません。この新しいユーザーは、他のテーブルが存在することすら知らないだけです。

    $ mysql -umyreaduser boatio -psomepassword
    mysql> show tables;
    +------------------+
    | Tables_in_boatio |
    +------------------+
    | trips            |
    +------------------+
    1 row in set (0.00 sec)
    

    ユーザーがより多くのテーブルにアクセスできるようにするには、同じGRANTを再実行するだけです。 追加のテーブル名を持つステートメント。たとえば、次のようにすると、tripsへのアクセスが許可されます。 およびusers テーブルですが、boatsではありません 。

    GRANT SELECT, SHOW VIEW ON boatio.trips TO myreaduser@localhost IDENTIFIED BY 'somepassword';
    GRANT SELECT, SHOW VIEW ON boatio.users TO myreaduser@localhost IDENTIFIED BY 'somepassword';
    FLUSH PRIVILEGES;
    

    そしてその証拠:ユーザーはtripsにアクセスできるようになりました およびusers テーブルですが、boatsではありません 。

    $ mysql -umyreaduser boatio -psomepassword
    
    mysql> show tables;
    +------------------+
    | Tables_in_boatio |
    +------------------+
    | trips            |
    | users            |
    +------------------+
    2 rows in set (0.00 sec)
    

    1. MySQL ORDER BY IN()

    2. SQL Server(T-SQL)でデータベースの照合を設定する方法

    3. InsertステートメントのPostgresでUUIDを生成しますか?

    4. OracleのNLS_UPPER()関数