Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのgrantについてまとめています。

Grantは権限を付与するSQL

GrantはSQLを実行する権限をユーザに付与するためのSQLです。

SQLのGrantの書き方

付与する権限と対象テーブル、対象ユーザを指定します。たとえばMySQLで以下のSQLは、employeesデータベースの全テーブルに対する全権限をユーザuser0@localhostに付与することになります。

grant all privileges on employees.* to user0@localhost;

全データベースの全テーブルを指定するには、以下のように対象を*.*と指定します。単一のテーブルを指定することも可能です。

grant all privileges on *.* to user0@localhost;

MySQLの場合は、show grantで付与した権限を確認できます。

mysql> show grants for user0@localhost;
+--------------------------------------------------------------+
| Grants for user0@localhost                                   |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user0'@'localhost'                    |
| GRANT ALL PRIVILEGES ON `employees`.* TO 'user0'@'localhost' |
+--------------------------------------------------------------+

GRANT USAGE は、USAGEという権限が設定されているという意味ですが、これは「権限なし」を表します。作成したばかりのユーザには、USAGE権限のみが設定されています。

また、一部のデータベースでは権限の付与先をユーザーグループに指定できたり、複数の権限をSQLロールとしてまとめることも可能です。

【関連記事】
MySQLでユーザ作成 GRANTでユーザ作成と権限設定を同時に行う方法

権限の削除はrevoke

grantで付与した権限は、revokeで取り消すことが可能です。

なお、revokeは権限のみを取り消す命令で、ユーザを削除することはありません。

以下のSQLは、ユーザuser0@localhostの全てのデータベース、テーブルに対するinsert権限を取り消します。

REVOKE INSERT ON *.* FROM 'user0'@'localhost';

参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.1.6 REVOKE 構文

データベースによって、既存の権限の確認方法が異なる

grant文はSQL87という標準SQLで定義されているため、各データベースとも差はありません。ただし、一部、Grantに機能拡張がされているケースがあります。

【関連記事】
SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?

Grantで付与した権限を確認するコマンドは標準SQLではないため、それぞれ全く違っています。

OracleのGrantの注意点

oracleでのgrantは以下のように記述します。以下はsh.salesテーブルに対し、ユーザwarehouse_userに対して、select権限を付与するSQLです。

GRANT SELECT ON sh.sales TO warehouse_user;

OracleでGrantの設定内容を確認するには、USER_TAB_PRIVSをselectします。

GRANTEE	OWNER	TABLE_NAME	GRANTOR	PRIVILEGE	GRANTABLE	HIERARCHY	COMMON	TYPE	INHERITED
-----
PUBLIC	SYS	xxxx	xxxx	INHERIT PRIVILEGES	NO	NO	NO	USER	NO

SQL ServerのGrantの注意点

SQL ServerでGrantを使うには以下のようにします。以下は、AdventureWorks212データベースのテーブルsys.sqlに対してユーザSylverster1にselect権限を付与するSQLです。

USE AdventureWorks2012;  
GRANT SELECT ON sys.sql_logins TO Sylvester1;  
GO  

GRANT (システム オブジェクトの権限の許可) (Transact-SQL) – SQL Server | Microsoft Docs

SQL Serverでは簡単に権限を表示するSQLが用意されていません。以下のようにmasterテーブルのデータをselectして、権限に関する情報を取得します。

SELECT * FROM master.sys.database_permissions AS dp   
    JOIN sys.system_objects AS so  
    ON dp.major_id = so.object_id  
    WHERE dp.class = 1 AND so.parent_object_id = 0 ;  
GO  

PostgreSQLでのGrantの注意点

以下は、PostgreSQLでのgrant例です。

1行目のSQLでテーブルmytableへのselect権限を全ユーザに付与します。2行目のSQLでテーブルmytableへのselect、update、insert権限をtodosグループに属するユーザに付与します。

GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO GROUP todos;

PostgreSQLで権限を確認するには、psqlコマンド内で\zを使用します。

\z mytable

        Access privileges for database "lusitania"
 Schema |  Name   | Type  |                     Access privileges
--------+---------+-------+-----------------------------------------------------------
 public | mytable | table | {miriam=arwdxt/miriam,=r/miriam,"group todos=arw/miriam"}
(1 row)

参考)PostgreSQL公式サイト GRANT

まとめ

ポテパンダの一言メモ
  • grantは、指定したユーザに特定テーブルへのアクセス権限を付与するSQL
  • grantは標準SQLで定められているが、データベースにより一部機能が拡張されているケースあり。
  • 付与した権限を確認するコマンドは、データベースによって異なる

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。