[MySQL]-MySQLのグラントコマンド
31060 ワード
ソース:http://yingxiong.javaeye.com/blog/451208
この例は、MySQL 5.0および以上のバージョンで実行される。
MySQLがユーザに権限を与えるコマンドの簡単なフォーマットは、要約すると次のようになる。
一、grant普通のデータユーザは、データベース内のすべてのテーブルデータを検索、挿入、更新、削除する権利があります。
二、grantデータベースの開発者は、表、索引、ビュー、格納プロセス、関数を作成します。などの権限があります
grant作成、変更、削除MySQLデータテーブル構造権限。
grant操作MySQL外部キーの権限。
grant操作MySQL一時テーブル権限。
grant操作MySQLインデックス権限。
grant操作MySQLビュー、ビューソースコード権限を表示します。
grant操作MySQL格納プロセス、関数権限。
三、grant普通DBAはあるMySQLデータベースの権限を管理する。
四、grant高級DBAはMySQLのすべてのデータベースの権限を管理します。
五、MySQL grant権限は、それぞれ複数のレベルで機能します。
1.grantはMySQLサーバ全体に作用します。
2.grantは単一のデータベースに作用します。
3.grantは単一データテーブルに作用します。
ここでは、複数のテーブルをユーザに授権する際に、複数のステートメントを実行することができます。たとえば:
5.grantは記憶プロセス、関数に作用します。
六、MySQLユーザー権限を確認する
現在のユーザ(自分)の権限を表示:
他のMySQLのユーザ権限を調べます。
七、MySQLユーザー権限を付与した権限を取り消す。
revokeとgrantの文法は同じです。キーワード「to」を「from」に変えるだけでいいです。
八、MySQL grant、Revokeユーザー権限注意事項
1.grant、Revokeユーザー権限後、このユーザはMySQLデータベースを再接続するだけで、権限が有効になります。
2.権限を付与したいユーザにも、これらの権限を他のユーザーに与えることができます。オプション「grant option」が必要です。
***************************************************************************************
SELECT command denied to user'ユーザー名'@'ホスト名'for table'テーブル名'というエラーに遭遇した場合、解決方法は後ろのテーブル名を授権する必要があります。つまり、コアデータベースを授権する必要があります。
私が会ったのはSELECT command denied to user'my'@'%for table'proc'というものです。保存プロセスを呼び出した時に現れました。指定されたデータベースを授権すればいいと思っていましたが、どのような記憶過程や関数などはもう管理しなくてもいいです。誰が知っていてもデータベースmysqlのprocを授権します。
***************************************************************************************
参考:http://zhidao.baidu.com/question/19633785.html
mysql授権表は全部で5つの表があります。user、db、host、tablewuplivとcolumnsupliv。
ライセンステーブルの内容は以下のような用途があります。userテーブルには、サーバーに接続できるユーザとパスワードが表示されています。そして、どのようなグローバル(スーパーユーザ)があるかを指定します。権限です。userテーブルで有効にされているすべての権限は全体的な権限であり、すべてのデータベースに適用されます。例えば、DELETE権限を有効にすると、ここにリストされているユーザはどのテーブルからもレコードを削除できますので、このようにする前によく考えてください。
dbテーブルdbテーブルはデータベースをリストしていますが、ユーザーはそれらにアクセスする権限があります。ここで指定した権限はデータベースのすべてのテーブルに適用されます。
hostテーブルhostテーブルとdbテーブルを組み合わせて、より良いレベルで特定のホストのデータベースへのアクセス権限を制御します。これは単独でdbを使うよりもいいかもしれません。この表はGRANTとREVOKE文の影響を受けません。だから、あなたはまったくそれを使っていないことが分かります。
テーブルテーブルテーブルテーブルテーブルのテーブルレベルの権限を指定します。ここで指定した権限は一つのテーブルのすべての列に適用されます。
columnsuplivテーブルcolumnsuplivテーブルは、列レベルの権限を指定します。ここで指定した権限は一つの表の特定の列に適用されます。
この例は、MySQL 5.0および以上のバージョンで実行される。
MySQLがユーザに権限を与えるコマンドの簡単なフォーマットは、要約すると次のようになる。
grant
on
to
一、grant普通のデータユーザは、データベース内のすべてのテーブルデータを検索、挿入、更新、削除する権利があります。
grant
select
on
testdb.
*
to
common_user@
'
%
'
grant
insert
on
testdb.
*
to
common_user@
'
%
'
grant
update
on
testdb.
*
to
common_user@
'
%
'
grant
delete
on
testdb.
*
to
common_user@
'
%
'
または、MySQLコマンドを使用して置換します。
grant
select
,
insert
,
update
,
delete
on
testdb.
*
to
common_user@
'
%
'
二、grantデータベースの開発者は、表、索引、ビュー、格納プロセス、関数を作成します。などの権限があります
grant作成、変更、削除MySQLデータテーブル構造権限。
grant
create
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant
alter
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant
drop
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant操作MySQL外部キーの権限。
grant
references
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant操作MySQL一時テーブル権限。
grant
create
temporary
tables
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant操作MySQLインデックス権限。
grant
index
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant操作MySQLビュー、ビューソースコード権限を表示します。
grant
create
view
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant
show
view
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
grant操作MySQL格納プロセス、関数権限。
grant
create
routine
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
--
now, can show procedure status
grant
alter
routine
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
--
now, you can drop a procedure
grant
execute
on
testdb.
*
to
developer@
'
192.168.0.%
'
;
三、grant普通DBAはあるMySQLデータベースの権限を管理する。
grant
all
privileges
on
testdb
to
dba@
'
localhost
'
なお、キーワード「privleges」は省略することができます。四、grant高級DBAはMySQLのすべてのデータベースの権限を管理します。
grant
all
on
*
.
*
to
dba@
'
localhost
'
五、MySQL grant権限は、それぞれ複数のレベルで機能します。
1.grantはMySQLサーバ全体に作用します。
grant
select
on
*
.
*
to
dba
@localhost
;
--
dba MySQL 。
grant
all
on
*
.
*
to
dba
@localhost
;
--
dba MySQL
2.grantは単一のデータベースに作用します。
grant
select
on
testdb.
*
to
dba
@localhost
;
--
dba testdb 。
3.grantは単一データテーブルに作用します。
grant
select
,
insert
,
update
,
delete
on
testdb.orders
to
dba
@localhost
;
ここでは、複数のテーブルをユーザに授権する際に、複数のステートメントを実行することができます。たとえば:
grant
select
(
user_id
,username)
on
smp.users
to
mo_user@
'
%
'
identified
by
'
123345
'
;
grant
select
on
smp.mo_sms
to
mo_user@
'
%
'
identified
by
'
123345
'
;
4.grantは表の列に作用します。
grant
select
(id, se, rank)
on
testdb.apache_log
to
dba
@localhost
;
5.grantは記憶プロセス、関数に作用します。
grant
execute
on
procedure
testdb.pr_add
to
'
dba
'
@
'
localhost
'
grant
execute
on
function
testdb.fn_add
to
'
dba
'
@
'
localhost
'
六、MySQLユーザー権限を確認する
現在のユーザ(自分)の権限を表示:
show grants;
他のMySQLのユーザ権限を調べます。
show grants
for
dba
@localhost
;
七、MySQLユーザー権限を付与した権限を取り消す。
revokeとgrantの文法は同じです。キーワード「to」を「from」に変えるだけでいいです。
grant
all
on
*
.
*
to
dba
@localhost
;
revoke
all
on
*
.
*
from
dba
@localhost
;
八、MySQL grant、Revokeユーザー権限注意事項
1.grant、Revokeユーザー権限後、このユーザはMySQLデータベースを再接続するだけで、権限が有効になります。
2.権限を付与したいユーザにも、これらの権限を他のユーザーに与えることができます。オプション「grant option」が必要です。
grant
select
on
testdb.
*
to
dba
@localhost
with
grant
option
;
この特性は一般的には使えません。実際にはDBAでデータベース権限を統一管理したほうがいいです。***************************************************************************************
SELECT command denied to user'ユーザー名'@'ホスト名'for table'テーブル名'というエラーに遭遇した場合、解決方法は後ろのテーブル名を授権する必要があります。つまり、コアデータベースを授権する必要があります。
私が会ったのはSELECT command denied to user'my'@'%for table'proc'というものです。保存プロセスを呼び出した時に現れました。指定されたデータベースを授権すればいいと思っていましたが、どのような記憶過程や関数などはもう管理しなくてもいいです。誰が知っていてもデータベースmysqlのprocを授権します。
***************************************************************************************
参考:http://zhidao.baidu.com/question/19633785.html
mysql授権表は全部で5つの表があります。user、db、host、tablewuplivとcolumnsupliv。
ライセンステーブルの内容は以下のような用途があります。userテーブルには、サーバーに接続できるユーザとパスワードが表示されています。そして、どのようなグローバル(スーパーユーザ)があるかを指定します。権限です。userテーブルで有効にされているすべての権限は全体的な権限であり、すべてのデータベースに適用されます。例えば、DELETE権限を有効にすると、ここにリストされているユーザはどのテーブルからもレコードを削除できますので、このようにする前によく考えてください。
dbテーブルdbテーブルはデータベースをリストしていますが、ユーザーはそれらにアクセスする権限があります。ここで指定した権限はデータベースのすべてのテーブルに適用されます。
hostテーブルhostテーブルとdbテーブルを組み合わせて、より良いレベルで特定のホストのデータベースへのアクセス権限を制御します。これは単独でdbを使うよりもいいかもしれません。この表はGRANTとREVOKE文の影響を受けません。だから、あなたはまったくそれを使っていないことが分かります。
テーブルテーブルテーブルテーブルテーブルのテーブルレベルの権限を指定します。ここで指定した権限は一つのテーブルのすべての列に適用されます。
columnsuplivテーブルcolumnsuplivテーブルは、列レベルの権限を指定します。ここで指定した権限は一つの表の特定の列に適用されます。