MYSQL 权限体系结构 君三思  2011-3-X
MYSQL 权限认证 换一种描述方式的话,就是 YY 只有从 XX 连接过来,才能够访问 ZZ 从XX 来的 用户YY 访问ZZ
MYSQL 权限验证类别 能不能连接? 能不能操作?
MYSQL 权限验证粒度 mysql.user 针对 MYSQL 服务器中 所有数据库的所有对象 全局权限 数据库级权限 mysql.db 针对 MySQL 服务器中的 某个数据库 * 来访主机权限 mysql.host 针对来访主机 表对象权...
MYSQL 权限验证粒度 -- 全局 <ul><li>拥有该 MySQL 服务器下所有数据库的  [ 所有 ]  对象的  [ 所有 ]  权限 </li></ul><ul><li>权限信息记入 mysql.user 表 </li></ul><...
MYSQL 权限验证粒度 -- 全局 mysql> desc mysql.user; +-----------------------+-----------------------------------+------+-----+-----...
MYSQL 权限验证粒度 -- 数据库 <ul><li>拥有指定数据库中  [ 所有 ]  对象的  [ 所有 ]  权限 </li></ul><ul><li>权限信息记入 mysql.db 表 </li></ul>数据库权限 全局权限 表对象...
MYSQL 权限验证粒度 -- 数据库 mysql> desc mysql.db; +-----------------------+---------------+------+-----+---------+-------+ | Field...
MYSQL 权限验证粒度 -- 表 <ul><li>拥有指定表对象的  [ 所有 ]  权限 </li></ul><ul><li>权限信息记入 mysql.tables_priv 表 </li></ul>表对象权限 全局权限 程序权限 列权限 ...
MYSQL 权限验证粒度 -- 表 mysql> desc mysql.tables_priv; +-------------+----------------------+------+-----+-------------------+--...
MYSQL 权限验证粒度 -- 列 <ul><li>MYSQL 权限体系中表对象的最细粒度 </li></ul><ul><li>拥有指定表对象的指定列的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.colu...
MYSQL 权限验证粒度 -- 列 mysql> desc mysql.columns_priv; +-------------+--------------------+------+-----+-------------------+---...
MYSQL 权限验证粒度 -- 程序 <ul><li>特指 Procedure 和 Function 两类对象 </li></ul><ul><li>拥有指定对象的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql...
MYSQL 权限验证粒度 -- 程序 mysql> desc mysql.procs_priv; +--------------+-----------------------------+------+-----+--------------...
MYSQL 权限验证粒度 -- 总结 mysql.user 表决定是否允许或拒绝客户端的连接请求。对于允许的连接, user 表授予的权限指出用户的全局权限,这些权限适用于服务器上的所有数据库。 mysql.db 表范围列决定用户能从哪个主机存...
权限的授予 <ul><li>授予命令语法: </li></ul><ul><li>GRANT </li></ul><ul><li>  priv_type [(column_list)] [, priv_type [(column_list)]] ...
权限的收回 <ul><li>收回命令语法: </li></ul><ul><li>1>. REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... </li></ul><...
授权表何时被重新加载 grant 、 revoke 、 set password 、 rename user 等系统命令对权限的修改,会立刻触发系统重新载入授权表 (grant tables) 手动修改权限相关字典表方式 (insert,upd...
授权表被重新加载后何时生效 全局级权限 表或列级权限 数据库级权限 何时生效? 表、列及过程级权限 将在客户端下次执行操作时生效 全局权限对已连接的客户端无效,下次连接时才会生效 ( 含用户的密码修改 ) 数据库的权限 将在客户端执行 use ...
MYSQL 中两个特殊的数据库 TEST数据库 INFORMATION_SCHEMA数据库 <ul><li>默认创建 </li></ul><ul><li>默认所有用户均有操作权限 </li></ul><ul><li>存在一定安全隐患 </li>...
问答环节!
Upcoming SlideShare
Loading in …5
×

Mysql权限体系结构 by junsansi

4,484 views

Published on

在与互动技术团队内部分享MySQL权限体系时,所用的PPT

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,484
On SlideShare
0
From Embeds
0
Number of Embeds
3,087
Actions
Shares
0
Downloads
37
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 所有权限认证的根本目地,都是为了保证用户只能做允许它做的事情。 MYSQL 权限认证本质即:从 XX 来的 YY 允许访问 ZZ 。
  • 对 MySQL 数据库而言,可以讲不存在能不能连接的问题,一定能够连接。用户一经创建就拥有连接的权限 (usage) ,而且该权限无法 revoke 。
  • 注: [] 表示可选
  • user 和 db(and host) 均属于较粗粒度的权限控制
  • References 权限尚未引用,可以无视!
  • References 权限尚未引用,可以无视! 发现了吗,没有 delete 权限哟,这是为什么呢
  • References 权限尚未引用,可以无视!
  • grant 命令可以兼职创建用户的工作。 mysql 鼓励用户通过 dml 语句操作权限表。
  • 为什么收回权限的命令语法有两类呢?这正是 mysql 权限粒度分级实现的特点,收回的权限与被赋予的权限必须一一对应,否则无法收回。
  • 手动刷新授权表,可通过 mysqladmin 等命令行工具中的相关参数,或者执行 flush privileges 命令
  • Mysql权限体系结构 by junsansi

    1. 1. MYSQL 权限体系结构 君三思 2011-3-X
    2. 2. MYSQL 权限认证 换一种描述方式的话,就是 YY 只有从 XX 连接过来,才能够访问 ZZ 从XX 来的 用户YY 访问ZZ
    3. 3. MYSQL 权限验证类别 能不能连接? 能不能操作?
    4. 4. MYSQL 权限验证粒度 mysql.user 针对 MYSQL 服务器中 所有数据库的所有对象 全局权限 数据库级权限 mysql.db 针对 MySQL 服务器中的 某个数据库 * 来访主机权限 mysql.host 针对来访主机 表对象权限 mysql.tables_priv 针对数据库中的表对象 表列权限 mysql.columns_priv 针对表中的具体列 过程权限 mysql.proc_priv mysql.procs_priv 针对程序的权限 ( 含 Procedure 和 Function)
    5. 5. MYSQL 权限验证粒度 -- 全局 <ul><li>拥有该 MySQL 服务器下所有数据库的 [ 所有 ] 对象的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.user 表 </li></ul><ul><li>新建用户默认拥有登录权限及访问 TEST 和 TEST_% 库权限 </li></ul><ul><li>查询 mysql.user 获取已授予权限,或通过 show grants 命令获取。 </li></ul>全局权限 数据库 权限 表对象 权限 程序权限 列权限 全局权限
    6. 6. MYSQL 权限验证粒度 -- 全局 mysql> desc mysql.user; +-----------------------+-----------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-----------------------------------+------+-----+---------+-------+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | | Delete_priv | enum('N','Y') | NO | | N | | | Create_priv | enum('N','Y') | NO | | N | | | Drop_priv | enum('N','Y') | NO | | N | | | Reload_priv | enum('N','Y') | NO | | N | | | Shutdown_priv | enum('N','Y') | NO | | N | | | Process_priv | enum('N','Y') | NO | | N | | | File_priv | enum('N','Y') | NO | | N | | | Grant_priv | enum('N','Y') | NO | | N | | | References_priv | enum('N','Y') | NO | | N | | | Index_priv | enum('N','Y') | NO | | N | | | Alter_priv | enum('N','Y') | NO | | N | | | Show_db_priv | enum('N','Y') | NO | | N | | | Super_priv | enum('N','Y') | NO | | N | | | Create_tmp_table_priv | enum('N','Y') | NO | | N | | | Lock_tables_priv | enum('N','Y') | NO | | N | | | Execute_priv | enum('N','Y') | NO | | N | | | Repl_slave_priv | enum('N','Y') | NO | | N | | | Repl_client_priv | enum('N','Y') | NO | | N | | | Create_view_priv | enum('N','Y') | NO | | N | | | Show_view_priv | enum('N','Y') | NO | | N | | | Create_routine_priv | enum('N','Y') | NO | | N | | | Alter_routine_priv | enum('N','Y') | NO | | N | | | Create_user_priv | enum('N','Y') | NO | | N | | | Event_priv | enum('N','Y') | NO | | N | | | Trigger_priv | enum('N','Y') | NO | | N | | | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | | | ssl_cipher | blob | NO | | NULL | | | x509_issuer | blob | NO | | NULL | | | x509_subject | blob | NO | | NULL | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) unsigned | NO | | 0 | | +-----------------------+-----------------------------------+------+-----+---------+-------+
    7. 7. MYSQL 权限验证粒度 -- 数据库 <ul><li>拥有指定数据库中 [ 所有 ] 对象的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.db 表 </li></ul>数据库权限 全局权限 表对象 权限 程序权限 列权限 数据库级权限
    8. 8. MYSQL 权限验证粒度 -- 数据库 mysql> desc mysql.db; +-----------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+---------------+------+-----+---------+-------+ | Host | char(60) | NO | PRI | | | | Db | char(64) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | | Delete_priv | enum('N','Y') | NO | | N | | | Create_priv | enum('N','Y') | NO | | N | | | Drop_priv | enum('N','Y') | NO | | N | | | Grant_priv | enum('N','Y') | NO | | N | | | References_priv | enum('N','Y') | NO | | N | | | Index_priv | enum('N','Y') | NO | | N | | | Alter_priv | enum('N','Y') | NO | | N | | | Create_tmp_table_priv | enum('N','Y') | NO | | N | | | Lock_tables_priv | enum('N','Y') | NO | | N | | | Create_view_priv | enum('N','Y') | NO | | N | | | Show_view_priv | enum('N','Y') | NO | | N | | | Create_routine_priv | enum('N','Y') | NO | | N | | | Alter_routine_priv | enum('N','Y') | NO | | N | | | Execute_priv | enum('N','Y') | NO | | N | | | Event_priv | enum('N','Y') | NO | | N | | | Trigger_priv | enum('N','Y') | NO | | N | | +-----------------------+---------------+------+-----+---------+-------+
    9. 9. MYSQL 权限验证粒度 -- 表 <ul><li>拥有指定表对象的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.tables_priv 表 </li></ul>表对象权限 全局权限 程序权限 列权限 表对象级权限 数据库 权限
    10. 10. MYSQL 权限验证粒度 -- 表 mysql> desc mysql.tables_priv; +-------------+----------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+-------------------+-----------------------------+ | Host | char(60) | NO | PRI | | | | Db | char(64) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Table_name | char(64) | NO | PRI | | | | Grantor | char(77) | NO | MUL | | | | Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | Table_priv | set('Select','Insert','Update','Delete','Create','Drop',' Grant','References','Index','Alter','Create View','Show view','Trigger') | NO | | | | | Column_priv | set('Select','Insert','Update','References') | NO | | | | +-------------+----------------------+------+-----+-------------------+-----------------------------+
    11. 11. MYSQL 权限验证粒度 -- 列 <ul><li>MYSQL 权限体系中表对象的最细粒度 </li></ul><ul><li>拥有指定表对象的指定列的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.columns_priv 表和 mysql.tables_priv 表 </li></ul>列权限 全局权限 程序权限 列级权限 数据库 权限 表对象 权限
    12. 12. MYSQL 权限验证粒度 -- 列 mysql> desc mysql.columns_priv; +-------------+--------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------------+------+-----+-------------------+-----------------------------+ | Host | char(60) | NO | PRI | | | | Db | char(64) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Table_name | char(64) | NO | PRI | | | | Column_name | char(64) | NO | PRI | | | | Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | Column_priv | set('Select','Insert','Update','References') | NO | | | | +-------------+--------------------+------+-----+-------------------+-----------------------------+
    13. 13. MYSQL 权限验证粒度 -- 程序 <ul><li>特指 Procedure 和 Function 两类对象 </li></ul><ul><li>拥有指定对象的 [ 所有 ] 权限 </li></ul><ul><li>权限信息记入 mysql.procs_priv 表 </li></ul>程序权限 全局权限 列权限 程序权限 数据库 权限 表对象 权限
    14. 14. MYSQL 权限验证粒度 -- 程序 mysql> desc mysql.procs_priv; +--------------+-----------------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-----------------------------+------+-----+-------------------+-----------------------------+ | Host | char(60) | NO | PRI | | | | Db | char(64) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Routine_name | char(64) | NO | PRI | | | | Routine_type | enum('FUNCTION','PROCEDURE')| NO | PRI | NULL | | | Grantor | char(77) | NO | MUL | | | | Proc_priv | set('Execute','Alter Routine','Grant') | NO | | | | | Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +--------------+-----------------------------+------+-----+-------------------+-----------------------------+
    15. 15. MYSQL 权限验证粒度 -- 总结 mysql.user 表决定是否允许或拒绝客户端的连接请求。对于允许的连接, user 表授予的权限指出用户的全局权限,这些权限适用于服务器上的所有数据库。 mysql.db 表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。 tables_priv,columns_priv,procs_priv 提供对象级细粒度权限 user/db/host 几个字典表中, host 、 Column_name 值的对大小写不敏感。 User 、 Password 、 Db 和 Table_name 值对大小写敏感。 1 2 3 4
    16. 16. 权限的授予 <ul><li>授予命令语法: </li></ul><ul><li>GRANT </li></ul><ul><li> priv_type [(column_list)] [, priv_type [(column_list)]] ... </li></ul><ul><li> ON [object_type] priv_level </li></ul><ul><li> TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ... </li></ul><ul><li> [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] </li></ul><ul><li> [WITH with_option ...] </li></ul><ul><li>示例: </li></ul><ul><li>授予 db 权限: grant all on jssdb.* to jss@'192.168.1.%'; </li></ul><ul><li>授予 col 权限: grant select (id) on jssdb.t1 to jss@'192.168.1.%'; </li></ul><ul><li>手动方式授予权限: insert/update 权限表 </li></ul>
    17. 17. 权限的收回 <ul><li>收回命令语法: </li></ul><ul><li>1>. REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... </li></ul><ul><li> ON [object_type] priv_level FROM user [, user] ... </li></ul><ul><li>2>. REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... </li></ul><ul><li>查看用户被授予的权限: </li></ul><ul><li>show grants for [user]; </li></ul><ul><li>示例: </li></ul><ul><li>收回全局权限: revoke all from jss@'192.168.1.%'; </li></ul><ul><li>收回数据库权限: revoke all on jssdb.* from jss@'192.168.1.%'; </li></ul>
    18. 18. 授权表何时被重新加载 grant 、 revoke 、 set password 、 rename user 等系统命令对权限的修改,会立刻触发系统重新载入授权表 (grant tables) 手动修改权限相关字典表方式 (insert,update,delete) ,并不会重新加载授权表,除非重启 MySQL 服务,或 DBA 手动执行命令重载授权表 授权表 何时重载 命令方式 修改 字典表方式 修改
    19. 19. 授权表被重新加载后何时生效 全局级权限 表或列级权限 数据库级权限 何时生效? 表、列及过程级权限 将在客户端下次执行操作时生效 全局权限对已连接的客户端无效,下次连接时才会生效 ( 含用户的密码修改 ) 数据库的权限 将在客户端执行 use db_name 语句时生效
    20. 20. MYSQL 中两个特殊的数据库 TEST数据库 INFORMATION_SCHEMA数据库 <ul><li>默认创建 </li></ul><ul><li>默认所有用户均有操作权限 </li></ul><ul><li>存在一定安全隐患 </li></ul><ul><li>&quot;test_&quot; 开头数据库均有上述特点 </li></ul><ul><li>虚拟对象,由 MySQL 自动维护 </li></ul><ul><li>所有用户能够登录到 mysql 的用户均有该库读取权限 </li></ul><ul><li>无法为 information_schema 中的对象做授权操作 </li></ul>
    21. 21. 问答环节!

    ×