GRANTpriv_type
[(column_list
)] [,priv_type
[(column_list
)]] ... ON [object_type
]priv_level
TOuser
[IDENTIFIED BY [PASSWORD] 'password
'] [,user
[IDENTIFIED BY [PASSWORD] 'password
']] ... [REQUIRE {NONE |ssl_option
[[AND]ssl_option
] ...}] [WITHwith_option
[with_option
] ...]object_type
: TABLE | FUNCTION | PROCEDUREpriv_level
: * | *.* |db_name
.* |db_name.tbl_name
|tbl_name
|db_name
.routine_name
with_option
: GRANT OPTION | MAX_QUERIES_PER_HOURcount
| MAX_UPDATES_PER_HOURcount
| MAX_CONNECTIONS_PER_HOURcount
| MAX_USER_CONNECTIONScount
ssl_option
: SSL | X509 | CIPHER 'cipher
' | ISSUER 'issuer
' | SUBJECT 'subject
'
GRANT
ステートメントは、システム管理者が MySQL
ユーザーアカウントを作成したり、アカウントに権限を与えたりできるようにします。GRANT
を利用するためには、GRANT
OPTION
権限を持ち、また自分が供与している権限を持つ必要があります。REVOKE
ステートメントは、アカウント管理者が権限を削除することに関連し、それを可能にします。アカウントがどのような権限を持っているかを判定するには、SHOW
GRANTS
を使用します。項8.5.1.5. 「REVOKE
構文」、項8.5.5.22. 「SHOW GRANTS
構文」
を参照してください。
次の表は、GRANT
および
REVOKE
ステートメントに対して指定できる、許可された
priv_type
権限タイプをまとめたものです。これらの権限の詳細については、Privileges Provided by MySQL
を参照してください。
権限 | 意味 |
ALL [PRIVILEGES] |
GRANT OPTION
を除き、指定されたアクセスレベルにあるすべての権限を与えます。 |
ALTER |
ALTER TABLE
の使用を有効にします。 |
ALTER ROUTINE |
ストアドルーチンを変更または削除できるようにします。 |
CREATE |
データベースおよびテーブルの作成を有効にします。 |
CREATE ROUTINE |
ストアドルーチンの作成を有効にします。 |
CREATE TEMPORARY TABLES |
CREATE
TEMPORARY TABLE
の使用を有効にします。 |
CREATE USER |
CREATE
USER 、DROP
USER 、RENAME
USER 、および
REVOKE
ALL PRIVILEGES
の使用を有効にします。 |
CREATE VIEW |
ビューを作成または変更できるようにします。 |
DELETE |
DELETE
の使用を有効にします。 |
DROP |
データベース、テーブル、およびビューを削除できるようにします。 |
EVENT |
イベントスケジューラでのイベントの使用を有効にします。 |
EXECUTE |
ユーザーがストアドルーチンを実行できるようにします。 |
FILE |
ユーザーがサーバーにファイルの読み取りまたは書き込みを実行させることができるようにします。 |
GRANT OPTION |
権限をほかのアカウントに与えたり、ほかのアカウントから削除したりできるようにします。 |
INDEX |
インデックスを作成または削除できるようにします。 |
INSERT |
INSERT
の使用を有効にします。 |
LOCK TABLES |
SELECT
権限を持っているテーブルに対する
LOCK
TABLES の使用を有効にします。 |
PROCESS |
ユーザーが SHOW
PROCESSLIST
を使用して、すべてのプロセスを表示できるようにします。 |
REFERENCES |
インプリメントされていません。 |
RELOAD |
FLUSH
操作の使用を有効にします。 |
REPLICATION CLIENT |
ユーザーがマスターまたはスレーブサーバーの場所を尋ねることができるようにします。 |
REPLICATION SLAVE |
レプリケーションスレーブでマスターからバイナリログイベントを読み取ることができるようにします。 |
SELECT |
SELECT
の使用を有効にします。 |
SHOW DATABASES |
SHOW DATABASES
ですべてのデータベースを表示できるようにします。 |
SHOW VIEW |
SHOW CREATE VIEW
の使用を有効にします。 |
SHUTDOWN |
mysqladmin shutdown の使用を有効にします。 |
SUPER |
CHANGE MASTER
TO 、KILL 、PURGE
BINARY LOGS 、および
SET
GLOBAL
ステートメントの使用を有効にします。mysqladmin
debug
コマンドを使用すると、max_connections
に達した場合でも (1 回) 接続できます。 |
TRIGGER |
トリガーを作成または削除できるようにします。 |
UPDATE: |
UPDATE
の使用を有効にします。 |
USAGE |
「権限がない」 の同義語です。 |
EVENT
と
TRIGGER
権限は MySQL 5.1.6
で追加されました。トリガーはテーブルと関連しているので、トリガーを作成したり、ドロップしたりするには、トリガーではなくテーブルに
TRIGGER
権限を持つ必要あります。(MySQL 5.1.6 以前では
SUPER
権限はトリガーを作成したりドロップしたりするために必要でした)。
GRANT
ステートメントでは、ALL
[PRIVILEGES]
権限はそれ自体で指定され、ほかの権限と一緒に指定することはできません。これは、GRANT
OPTION
権限を除き、権限が与えられるレベルで使用可能なすべての権限を表します。
権限を持たないユーザーを作成する場合、または既存の権限を変更することなくアカウントに対する
REQUIRE
または
WITH
節を変更する場合は、USAGE
を指定できます。
MySQL アカウント情報は
mysql
データベースのテーブルに格納されています。このデータベースとアクセスコントロールシステムについては
MySQL Server Administration
で詳しく説明されていますので、更なる詳細についてはこれを参照してください。
MySQL のリリースの中には新たに権限や機能を加えるためにグラントテーブルの構成に変更を加えているものもあります。MySQL の新しいバージョンを更新するときはいつでも、新しい機能を有効に利用できるようにするために、供与テーブルを最新の構造に更新しなければいけません。mysql_upgrade を参照してください。
権限テーブルに、大文字と小文字が混在したデータベースまたはテーブル名を含む権限行が保持されており、lower_case_table_names
システム変数がゼロ以外の値に設定されている場合は、REVOKE
を使用してこれらの権限を取り消すことはできません。供与テーブルを直接コントロールする必要があるかも知れません。(lower_case_table_names
が設定されているときは
GRANT
によってこのような行は作成されませんが、この変数が設定される前にこのような行が作成された可能性があります。)
権限は、ON
節に使用される構文に応じて、いくつかのレベルで与えることができます。REVOKE
では、どの権限を取り消すかを同じ
ON
構文で指定します。簡潔にするために、ここに示す例には
IDENTIFIED BY
'
節が含まれていませんが、パスワードのないアカウントが作成されないようにするためにアカウントがまだ存在しない場合は、この節を含めるようにしてください。
password
'
グローバル権限
グローバル権限は管理権限であり、特定のサーバー上のすべてのデータベースに適用されます。グローバル権限を割り当てるには、ON
*.*
構文を使用します。
GRANT ALL ON *.* TO 'someuser'@'somehost'; GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';
MySQL 5.1.12
より前のバージョンでは、ON
*
構文を使用していて、デフォルトデータベースを選択していない場合も、グローバルなレベルで権限が割り当てられます。5.1.12
の時点では、ON *
にはデフォルトデータベースが必要であり、存在しない場合はエラーが発生します。
CREATE
USER
、FILE
、PROCESS
、RELOAD
、REPLICATION
CLIENT
、REPLICATION
SLAVE
、SHOW
DATABASES
、SHUTDOWN
、および
SUPER
権限は管理権限であり、グローバルにのみ与えることができます。
その他の権限は、グローバルに、またはより特定なレベルで供与することができます。
グローバル権限は、in
mysql.user
テーブルに格納されています。
データベース権限
データベース権限は既存データベース内のすべてのオブジェクトに適応します。データベースレベルの権限を割り当てるには、ON
構文を使用します。
db_name
.*
GRANT ALL ON mydb.* TO 'someuser'@'somehost'; GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
また、ON *
構文を使用していて、デフォルトデータベースを選択していない場合も
(デフォルトデータベースの)
データベースレベルで権限が割り当てられます。
データベースレベルでは、CREATE
、DROP
、EVENT
、および
GRANT OPTION
権限を指定できます。また、テーブルまたはルーチン権限もデータベースレベルで指定できます。この場合、これらの権限はデータベース内のすべてのテーブルまたはルーチンに適用されます。
データベース権限は、mysql.db
および mysql.host
テーブルに格納されています。GRANT
および
REVOKE
は
db
テーブルに影響を与えますが、めったに使用されない
host
テーブルには影響を与えません。
テーブル権限
テーブル権限は既存テーブル内のすべてのカラムに適応します。テーブルレベルの権限を割り当てるには、ON
構文を使用します。
db_name.tbl_name
GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost'; GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';
db_name.tbl_name
ではなく
tbl_name
を指定した場合、このステートメントは、デフォルトデータベース内の
tbl_name
に適用されます。デフォルトデータベースが存在しない場合は、エラーが発生します。
テーブルに対して許可される
priv_type
値は、ALTER
、CREATE
VIEW
、CREATE
、DELETE
、DROP
、GRANT
OPTION
、INDEX
、INSERT
、SELECT
、SHOW
VIEW
、TRIGGER
、および
UPDATE
です。
テーブル権限は、mysql.tables_priv
テーブルに格納されています。
カラム権限
カラム権限は既存テーブル内の単一カラムに適応します。カラムレベルで与えられる各権限のあとに、括弧で囲まれた (1 つまたは複数の) カラムを続ける必要があります。
GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
カラムに対して
(つまり、column_list
節を使用するときに) 許可される
priv_type
値は、INSERT
、SELECT
、および
UPDATE
です。
カラム権限は、mysql.columns_priv
テーブルに格納されています。
ルーチン権限
ALTER
ROUTINE
、CREATE
ROUTINE
、EXECUTE
、および
GRANT OPTION
権限は、ストアドルーチン
(プロシージャーおよびファンクション)
に適用されます。(ファンクションとプロシージャー)
それらは、グローバルとデータベースレベルで供与されます。CREATE
ROUTINE
を除き、これらの権限は、個々のルーチンのルーチンレベルで与えることができます。
GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost'; GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';
ルーチンレベルで許可される
priv_type
値は、ALTER
ROUTINE
、EXECUTE
、および
GRANT OPTION
です。CREATE
ROUTINE
は、最初にルーチンを作成するときにこの権限を持たなければいけないので、ルーチンレベル権限ではありません。
ルーチンレベルの権限は、mysql.procs_priv
テーブルに格納されています。
GRANT
ALL
は、与えようとしているレベルに存在する権限のみをグローバル、データベース、テーブル、そしてルーチンレベルに対して割り当てます。たとえば、GRANT
ALL ON
はデータベースレベルステートメントなので、db_name
.*FILE
のようなグローバルのみの権限は供与しません。
object_type
節
(存在する場合)
は、次のオブジェクトがテーブル、ストアドファンクション、またはストアドプロシージャーであるときは
TABLE
、FUNCTION
、または
PROCEDURE
として指定する必要があります。
データベース、テーブル、カラム、またはルーチンの権限は、各権限レベルでの権限の論理
OR
として付加的に形成されます。たとえば、ユーザーがグローバルな
SELECT
権限を持っている場合は、データベース、テーブル、またはカラムレベルでの権限がないことで、その権限を拒否することはできません。権限確認手順の詳細については、Access Control, Stage 2: Request Verification
で説明されています。
MySQL
では、存在しないデータベースオブジェクトに対する権限を与えることもできます。そのような場合、供与される権限は
CREATE
権限を含む必要があります。この動作は意図的であり、またあとで作成されるデータベースオブジェクトに対するユーザーアカウントと権限を、データベース管理者が準備することを可能にします。
MySQL は、データベースまたはテーブルが削除されたときに、権限を自動的に取り消すことはしません。ただし、ルーチンを削除した場合は、そのルーチンに与えられているルーチンレベルの権限はすべて取り消されます。
user
値は、権限をどの MySQL
アカウントに与えるかを示します。任意のホストからユーザーに権限を付与できるようにするために、MySQL
は、
の形式での user_name
@host_name
user
値の指定をサポートしています。もし
user_name
か
host_name
値が引用されていない識別子として正当であれば、それを引用する必要はありません。ただし、特殊文字
(「-
」 など)
を含む user_name
文字列や、特殊文字またはワイルドカード文字
(「%
」 など)
を含む host_name
文字列
(たとえば、'test-user'@'%.com'
)
を指定するには、引用符が必要です。ユーザー名とホスト名を別々に引用します。
ホスト名には、ワイルドカードを指定できます。たとえば、
は、user_name
@'%.example.com'example.com
ドメイン内の任意のホストの
user_name
に適用されます。また、
は、user_name
@'192.168.1%'192.168.1
クラス C
サブネット内の任意のホストの
user_name
に適用されます。
単純な形式 user_name
は、
の同義語です。
user_name
@'%'
MySQL
は、ユーザー名でのワイルドカードをサポートしていません。匿名ユーザーを参照するには、GRANT
ステートメントで空のユーザー名を含むアカウントを指定します。
GRANT ALL ON test.* TO ''@'localhost' ...
この場合は、匿名ユーザーの正しいパスワードを使用してローカルホストから接続する任意のユーザーに、その匿名ユーザーアカウントに関連付けられた権限を含むアクセスが許可されます。
アカウント名内のユーザーとホストの値の詳細については、Specifying Account Names を参照してください。
引用された値を指定するには、逆引用符
(「`
」)
を使用して、データベース、テーブル、カラム、およびルーチン名を識別子として引用します。逆引用符
(「`
」)、単一引用符
(「'
」)、または二重引用符
(「"
」)
のいずれかを使用して、ユーザー名とホスト名を識別子または文字列として引用します。単一引用符を使用して、パスワードを文字列として引用します。
グローバルまたはデータベースレベルでの権限を与える
GRANT
ステートメントでデータベース名を指定するときは、「_
」
と 「%
」
のワイルドカードが許可されます。つまり、たとえば、データベース名の一部として
「_
」
文字を使用する場合は、ワイルドカードパターン
(たとえば、GRANT ... ON
`foo\_bar`.* TO ...
)
に一致する追加のデータベースにユーザーからアクセスできないようにするために、その文字を
GRANT
ステートメントで
「\_
」
として指定する必要があります。
匿名ユーザーからの MySQL
サーバーへの接続を許可する場合は、すべてのローカルユーザーにも
として権限を与える必要があります。そうでなければ、名づけられたユーザーがローカルマシンから
MySQL
サーバーにログインしようとしたときに、user_name
@localhostmysql.user
テーブル内 (MySQL
インストールの最中に作成されたもの) の
localhost
の匿名ユーザーアカウントが利用されます。詳細については、Access Control, Stage 1: Connection Verificationをご参照ください。
すべての匿名ユーザーを一覧表示する次のクエリーを実行することによって、前の警告が適用されるかどうかを判断できます。
SELECT Host, User FROM mysql.user WHERE User='';
今説明した問題を回避するには、このステートメントを使用して、ローカルの匿名ユーザーアカウントを削除します。
DROP USER ''@'localhost';
GRANT
は、最長 60
文字のホスト名をサポートしています。データベース、テーブル、カラム、そしてルーチン名は最大
64 文字です。ユーザー名には、最大 16
文字を指定できます。
mysql.user
テーブルを変更することによって、ユーザー名に対して許可される長さを変更することはできません。それを行おうとすると、予測できない動作が発生し、ユーザーが
MySQL
サーバーにログインできなくなることさえありえます。mysql
データベース内のテーブルは、mysql_upgrade
で説明されている手順を使用する場合を除き、どのような方法でも絶対に変更しないでください。
NO_AUTO_CREATE_USER
の SQL
モードが有効になっておらず、GRANT
ステートメントで指定されているアカウントが
mysql.user
テーブル内に存在しない場合は、GRANT
によって作成されます。IDENTIFIED
BY
節を指定しない場合、または空のパスワードを指定した場合、そのユーザーにはパスワードがありません。これはとても不安定です。
NO_AUTO_CREATE_USER
が有効になっていて、アカウントが存在しない場合は、GRANT
が失敗します。また、空以外のパスワードを提供するための
IDENTIFIED BY
節が指定されていないかぎり、アカウントは作成されません。
IDENTIFIED BY
節が存在し、グローバルな付与権限を持っている場合は、アカウントが存在し、すでにパスワードがある場合でも、そのパスワードがアカウントの新しいパスワードになります。
REVOKE
は、mysql.user
テーブルエントリを削除しません。これは、ユーザーが
DROP USER
または
DELETE
を使用して実行する必要があります。
パスワードは SET
PASSWORD
ステートメントで設定することもできます。項8.5.1.6. 「SET PASSWORD
構文」
を参照してください。
IDENTIFIED BY
節内では、パスワードはリテラルパスワード値でなければいけません。PASSWORD()
関数を SET
PASSWORD
ステートメントに対するときと同じように使用する必要はありません。例
:
GRANT ... IDENTIFIED BY 'mypass';
もしパスワードを明確なテキストで送信したくない場合、PASSWORD()
がそのパスワードに返すハッシュ化された値が分かっていれば、キーワード
PASSWORD
の前にハッシュ化された値を指定することができます。
GRANT ... IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
WITH
節は、次のいくつかの目的に使用されます。
ユーザーがほかのユーザーに権限を付与できるようにするため
ユーザーに関するリソース使用の制限を指定するため
ユーザーがサーバーへのセキュリティー保護された接続を使用する必要があるかどうか、およびその方法を指定するため
WITH GRANT OPTION
節は、ユーザーが指定された権限レベルで持つ権限を、別のユーザーに与えることができる機能を与えます。異なる権限を持つ
2
人のユーザーが権限を組み合わせることができる可能性があるため、だれに
GRANT OPTION
権限を与えるかに注意する必要があります。
自分が持たない権限を別のユーザーに与えることはできません。GRANT
OPTION
権限によって、自分が持つ権限を割り当てる機能のみ与えられます。
特定の権限レベルでユーザーに
GRANT OPTION
権限を与えるときは、そのユーザーがそのレベルで持つどんな権限も、(または将来与えられるものも)
そのユーザーから別のユーザーに与えることができるので、注意が必要です。ユーザーにデータベース上で
INSERT
権限を与えると仮定してください。そのときもし
SELECT
権限をデータベース上で与え、WITH
GRANT OPTION
を指定すると、そのユーザーは別のユーザーに
SELECT
権限だけではなく
INSERT
も与えることができます。そのときもしデータベース上でユーザーに
UPDATE
権限を与えると、そのユーザーは
INSERT
、SELECT
、そして
UPDATE
を与えることができるようになります。
管理者以外のユーザーには、グローバルな、または
mysql
データベースに対する
ALTER
権限を与えないでください。もしそれをしてしまうと、残りのテーブルによってそのユーザーが権限システムを破壊することが可能になってしまいます!
特定の権限に関連したセキュリティーリスクの詳細については、Privileges Provided by MySQL を参照してください。
MAX_QUERIES_PER_HOUR
、count
MAX_UPDATES_PER_HOUR
、および
count
MAX_CONNECTIONS_PER_HOUR
オプションは、指定された 1
時間の間にユーザーが実行できるクエリー、更新、およびログインの数を制限します。(クエリキャッシュから結果が与えられるクエリーは
count
MAX_QUERIES_PER_HOUR
制限に対してカウントしません)。もし
count
が
0
なら
(デフォルト)、そのユーザーには制限がないという意味になります。
MAX_USER_CONNECTIONS
オプションは、アカウントが作成できる同時接続の最大数を制限します。もし
count
count
が
0
なら
(デフォルト)、max_user_connections
システム変数はそのアカウントの同時接続数を決定します。
既存の権限に影響を与えることなく、既存のユーザーに関するこれらのいずれかのリソース制限オプションを指定するには、GRANT
USAGE ON *.* ... WITH MAX_...
を使用します。
リソース制限の詳細については、Setting Account Resource Limits を参照してください。
MySQL
は、ユーザー名とパスワードに基づいた通常の認証に加えて、X509
証明書の属性を確認できます。SSL
関連オプションを MySQL
アカウントに指定するには
GRANT
ステートメントの
REQUIRE
節を利用してください。(MySQL を利用した SSL
利用の背景情報については、Using SSL for Secure Connections
を参照してください)。
与えられたアカウントの接続を制限するには、いくつかの異なる方法があります。
REQUIRE NONE
は、アカウントが SSL や X509
要求を持たないということを指示します。もし
SSL 関連 REQUIRE
オプションが指定されれば、これがデフォルトになります。ユーザー名とパスワードが有効な場合は、暗号化されていない接続が許可されます。しかし、クライアントのオプションにより、もしそのクライアントが正しい証明とキーファイルを持っていれば、暗号化された接続もまた利用できます。つまり、クライアントは
SSL
コマンドオプションを指定する必要がありません。この場合、接続は暗号化されません。暗号化された接続を利用するには、クライアントは
--ssl-ca
オプションか、または
--ssl-ca
、--ssl-key
、または
--ssl-cert
オプションの 3
つすべてを指定する必要があります。
REQUIRE SSL
オプションは、サーバーに対して、SSL
暗号化接続だけをアカウントに許容するよう指示を出します。
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SSL;
接続するには、クライアントは
--ssl-ca
オプションを指定し、また追加で
--ssl-key
と
--ssl-cert
オプションを指定する必要があります。
REQUIRE X509
は、クライアントが有効な証明書を持つ必要があるが、その証明書、発行者、そして題目は何でもかまわないということを意味します。要求されるのは、CA
証明の 1
つによってそのサインを検証できなければいけない、ということだけです。
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE X509;
接続するには、クライアントは
--ssl-ca
、--ssl-key
、--ssl-cert
オプションを指定する必要があります。これは
REQUIRE
オプションが X509
の意味を含むため、ISSUER
と SUBJECT
にとっても同じことが言えます。
REQUIRE ISSUER
'
は、クライアントが CA
issuer
''
によって発行された有効な X509
証明を提示するよう、接続に制限を与えます。もしクライアントが、有効ではあるが異なる発行者による証明を提示したら、サーバーは接続を拒否します。X509
証明の利用は、必ず暗号化を暗示しますので、issuer
'SSL
オプションはこの場合必要ありません。
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com';
'
値は単一文字列として入力されなければいけないことを覚えておいてください。
issuer
'
REQUIRE SUBJECT
'
は、クライアントがサブジェクト
subject
'subject
を含む有効な X509
証明を提示する接続に制限を与えます。もしクライアントが、有効ではあるが異なるサブジェクトによる証明を提示したら、サーバーは接続を拒否します。
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com';
'
値は単一文字列として入力されなければいけないことを覚えておいてください。
subject
'
REQUIRE CIPHER
'
は十分な強さの暗号とキー長さが利用されることが保証されていなければいけません。SSL
自体は、短い暗号キーを利用している古いアルゴリズムが利用されると、弱くなることがあります。このオプションを利用すると、接続を許可するために特定の暗号方法が利用されるように依頼することができます。
cipher
'
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
SUBJECT
、ISSUER
、そして
CIPHER
オプションを、次のように
REQUIRE
節の中で組み合わせることができます。
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com' AND ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com' AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
オプションの順番は重要ではありませんが、2
回指定できるオプションはありません。AND
キーワードは REQUIRE
オプションとの間では任意です。
1 人のユーザーにでもテーブル、カラム、またはルーチン権限を使用していると、サーバーはすべてのユーザーのテーブル、カラム、およびルーチン権限を検査するため、これによって MySQL の性能が多少低下します。同じように、もしユーザーに対してクエリー、更新または接続の数を制限すると、サーバーはそれらの値を監視しなければいけません。
SQL と MySQL
GRANT
バージョンとの最大の違いは次のようなものです。
MySQL では、権限はユーザー名だけでなく、ホスト名とユーザー名の組み合わせに関連付けられています。
スタンダード SQL はグローバル、またはデータベースレベル権限を持たず、MySQL がサポートするすべての権限タイプのサポートもしません。
MySQL はスタンダード SQL
UNDER
権限をサポートしません。
スタンダード SQL
権限は、階層的な様式で構造されています。もしユーザーを削除すると、そのユーザーが持つすべての権限が与えられ、削除されます。もし
DROP USER
を利用するなら、MySQL
でも同じです。項8.5.1.2. 「DROP USER
構文」
を参照してください。
スタンダード SQL
では、テーブルをドロップすると、そのテーブルのすべての権限は削除されます。スタンダード
SQL
では、権限を削除すると、その権限に基づいて与えられたすべての権限もまた削除されます。MySQL
では、明示的な
REVOKE
ステートメントだけの利用、または MySQL
供与テーブル内に格納された値の複製でドロップできます。
MySQL
では、テーブル内のいくつかのカラムに対してだけ
INSERT
権限を持つことが可能です。この場合、INSERT
権限を持っていないそれらのカラムを削除するのであれば、テーブル上で
INSERT
ステートメントを実行することができます。削除されたカラムは、もし厳密な
SQL
モードが有効でなければ、暗黙的なデフォルト値に設定されます。厳密モードでは、もし削除されたカラムがデフォルト値を持たなければ、ステートメントは却下されます。(スタンダード
SQL は、すべてのカラムに
INSERT
権限を持つように要求します)。Server SQL Modes
で、厳密モードについて説明されています。項6.1.4. 「データ型デフォルト値」
で暗黙のデフォルト値について説明されています。