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

MySQLのテーブルと列の権限を付与する

    テーブルレベルの権限を付与する

    次の手順を実行して、MySQLでテーブルレベルの権限を持つユーザーを作成できます。

    1. Create_user_privおよびGrant_privを使用してユーザーとしてMySQLに接続します。次のクエリを実行して、これらの権限を持っているユーザーを特定します。ユーザーがクエリを実行するには、MySQL.userに対するSELECT権限がすでに必要です。

      SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
      
    2. 次のクエリを実行して、制限されたユーザーのGRANTステートメントを生成します。 「mydatabase」、「myuser」、および「myhost」をデータベースの特定の情報に置き換えます。

      myuserとmypasswordを囲む引用符は、二重引用符ではなく、2つの一重引用符であることに注意してください。 myhostと、TABLE_NAMEを囲む文字はバッククォートです(キーはキーボードのEscキーの下にあります)。

      SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_SCHEMA = 'mydatabase';
      

      たとえば、chartio_connectクライアントを使用してユーザー「chartio_read_only」を「Reports」データベースに接続する場合は、次のように実行します。

      SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_SCHEMA = 'Reports';
      

      Chartioのサーバーからの直接接続を使用して、ユーザー「chartio_direct_connect」を「Analytics」データベースに接続する場合は、次のコマンドを実行します。

      SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Analytics.`', TABLE_NAME, '` to ''chartio_direct_connect''@`52.6.1.1`;')
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_SCHEMA = 'Analytics';
      
    3. クエリの結果は次のようになります。

      GRANT SELECT, SHOW VIEW ON mydatabase.`Activity` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Marketing` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Operations` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Payments` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Plans` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Services` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Subscriptions` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
      
    4. アクセスを許可するテーブルのみのステートメントを選択し、それらのクエリを実行します。たとえば、Users and Visitorsテーブルへのアクセスのみを許可したい場合は、次のように実行します。

      GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
      GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
      
    5. ユーザーに安全なパスワードを与えます。

      SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
      

      または

      SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
      

    これで、このユーザーを使用してデータベースに安全にアクセスでき、指定されたテーブルへのアクセス許可しか持たないことが保証されます。

    列レベルの権限を付与する

    特定のテーブルに列レベルの権限を付与する手順は、テーブルレベルの権限を付与する手順と非常によく似ています。

    1. 次のクエリを使用して、列レベルの権限のGRANTステートメントを生成します。

      SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';
      

      たとえば、chartio_connectクライアントを使用して、ユーザー「chartio_read_only」を「Reports」データベースの「Users」テーブルの特定の列に接続する場合は、次のコマンドを実行します。

      SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA = 'Reports' AND TABLE_NAME = 'Users';
      
    2. クエリの結果は次のようになります。

      GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Campaign_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Created_Date`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`City`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`State`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Zip`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Phone_Number`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Credit_Card`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      
    3. アクセスを許可する列のステートメントのみを選択して、それらのクエリを実行します。たとえば、「User_ID」列と「Company」列へのアクセスのみを許可する場合は、次のように実行します。

      GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
      
    4. ユーザーに安全なパスワードを与えます。

      SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
      

    詳細については、MySQLのドキュメントを参照してください。


    1. ラベルの最大文字数(テーブル名、列など)

    2. MySQLデータベースとテーブルサイズを確認する方法

    3. oracleで分析関数を使用する方法(キーワードによるパーティションオーバー)

    4. RACシーケンスの競合