次の手順を実行して、MySQLでテーブルレベルの権限を持つユーザーを作成できます。
-
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';
-
次のクエリを実行して、制限されたユーザーの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';
-
クエリの結果は次のようになります。
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`;
-
アクセスを許可するテーブルのみのステートメントを選択し、それらのクエリを実行します。たとえば、Users and Visitorsテーブルへのアクセスのみを許可したい場合は、次のように実行します。
GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
ユーザーに安全なパスワードを与えます。
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
または
SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
これで、このユーザーを使用してデータベースに安全にアクセスでき、指定されたテーブルへのアクセス許可しか持たないことが保証されます。
特定のテーブルに列レベルの権限を付与する手順は、テーブルレベルの権限を付与する手順と非常によく似ています。
-
次のクエリを使用して、列レベルの権限の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';
-
クエリの結果は次のようになります。
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`;
-
アクセスを許可する列のステートメントのみを選択して、それらのクエリを実行します。たとえば、「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`;
-
ユーザーに安全なパスワードを与えます。
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
詳細については、MySQLのドキュメントを参照してください。