mysql権限システム
3176 ワード
grant tables
と呼ばれるいくつかのシステムテーブルに格納されます.すなわち、mysql.User, mysql.db, mysql.Host, mysql.table_priv
とmysql.column_priv
です.権限情報データ量が少なくアクセスが頻繁なため、Mysqlは起動時にすべての権限情報をメモリにロードしていくつかの特定の構造に保存します.したがって、権限関連テーブルを手動で変更するたびに、“FLUSH PRIVILEGES”
コマンドを実行してMySQLの権限情報を再ロードする必要があります.もちろん、GRANT,REVOKE
またはDROP USER
コマンドで関連権限を変更する場合は、FLUSH PRIVILEGES
コマンドを手動で実行する必要はありません.GRANT,REVOKE
またはDROP USER
コマンドで行った権限変更は、システムテーブルを変更すると同時にメモリ構造内の権限情報を更新するためです.MySQL 5.0.2以降のバージョンでは、MySQLはCREATE USER
コマンドを追加し、初期のUSAGE権限のみを持つ特別な権限を持たないユーザーを作成し、CREATE USER
コマンドで新しいユーザーを作成すると、新しいユーザーの情報も自動的にメモリ構造に更新されます.したがって、読者は、一般にGRANT,REVOKE,CREATE USER
およびDROP USER
コマンドを用いてユーザと権限の変更操作を行い、grant tables
を直接修正してユーザと権限の変更を実現する操作をできるだけ減らすことを提案する.GRANT
コマンドを使用し、あるユーザの既存の権限を除去するにはREVOKE
コマンドを使用します.もちろん、この2つのほかに暴力的な方法があります.それはgrant tables
システムテーブルを直接更新することです.ユーザーに権限を付与する場合は、ユーザー名だけでなく、訪問ホストも指定する必要があります.認証時にユーザー名のみを指定した場合、MySQLは'username'@'%'
の認証として自動的に認識されます.ユーザーの権限を除去するには、アクセスホストも指定する必要があります.ユーザーが現在持っている権限を表示する必要がある場合もあります.これは、“SHOW GRANTS FOR 'username'@'hostname'”
コマンドを実行することによって、以前のユーザーのすべての権限を取得する2つの方法で実現できます.もう1つの方法は、grant tables
内の権限情報を照会することです.Global Level
の権限制御はグローバル権限制御とも呼ばれ、すべての権限情報はmysql.user
テーブルに保存されます.Global Level
のすべての権限はmysqld全体に対して行われ、すべてのデータベースの下のすべてのテーブルおよびすべてのフィールドに有効です.1つのパーミッションがGlobal Level
で付与されている場合、他のすべてのレベルの同じパーミッション設定が上書きされます.例えば、abc
ユーザにUPDATE
のようなデータベースのtest
テーブルを指定することを最初に許可し、その後、t
ユーザがすべてのデータベースのすべてのテーブルに対するREVOKE
権限をグローバルレベルabc
で削除します.このときのUPDATE
ユーザは、abc
テーブルに対する更新権限を持たなくなる.test.t
の権限を付与するには、Global Level
の命令を実行するときに、GRANT
で適用範囲が*.*
であることを指定すればよいし、複数の権限を付与する必要がある場合には、Global
の命令を複数回繰り返し実行する必要もなく、必要なすべての権限名をカンマGRANT
で区切るだけでよい.,
root@localhost : mysql 05:14:35> GRANT SELECT,UPDATE,DELETE,INSERT ON *.*TO 'def'@'localhost'; Query OK, 0 rows affected (0.00 sec)
は、Database Level
の下にあり、他の3つのGlobal Level
以上の権限レベルであり、その役割ドメインは、指定されたデータベース全体のすべてのオブジェクトです.Level
の権限と比較して、Global Level
は主に以下のいくつかの権限を少なくしました:Database Level
とCREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHUTDOWN,SUPER
のこれらの権限は、いかなる権限も増加していません.以前、Global Levelの権限は下の他の4階の同じ権限をカバーすると言っていましたが、USAGE
も同様にDatabase Level
の権限設定によってカバーされる可能性がありますが、同時に彼よりも下層のGlobal Level
とTable,Column
の3階の権限をカバーすることができます.Database Levelに権限を付与する場合は、2つの実装方法があります.Routine
によって権限役割ドメインがdatabase.*
であるデータベース全体を限定し、以下のようにする:database