mysql権限システム

3176 ワード

  • 概要MySQLの権限システムは実装が簡単で、関連権限情報は主にgrant tablesと呼ばれるいくつかのシステムテーブルに格納されます.すなわち、mysql.User, mysql.db, mysql.Host, mysql.table_privmysql.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内の権限情報を照会することです.
  • 権限レベルMySQLの権限は次の5つのレベルに分けられます:
  • Global Level: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で区切るだけでよい.,
  • Database Level: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 LevelCREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHUTDOWN,SUPERのこれらの権限は、いかなる権限も増加していません.以前、Global Levelの権限は下の他の4階の同じ権限をカバーすると言っていましたが、USAGEも同様にDatabase Levelの権限設定によってカバーされる可能性がありますが、同時に彼よりも下層のGlobal LevelTable,Columnの3階の権限をカバーすることができます.Database Levelに権限を付与する場合は、2つの実装方法があります.
  • GRANTコマンドを実行するとき、Routineによって権限役割ドメインがdatabase.*であるデータベース全体を限定し、以下のようにする:database
  • .