Your SlideShare is downloading. ×
Mysql权限体系结构   by junsansi
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mysql权限体系结构 by junsansi

4,181

Published on

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

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

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

No Downloads
Views
Total Views
4,181
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
36
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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 命令
  • Transcript

    • 1. MYSQL 权限体系结构 君三思 2011-3-X
    • 2. MYSQL 权限认证 换一种描述方式的话,就是 YY 只有从 XX 连接过来,才能够访问 ZZ 从XX 来的 用户YY 访问ZZ
    • 3. MYSQL 权限验证类别 能不能连接? 能不能操作?
    • 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. MYSQL 权限验证粒度 -- 全局
      • 拥有该 MySQL 服务器下所有数据库的 [ 所有 ] 对象的 [ 所有 ] 权限
      • 权限信息记入 mysql.user 表
      • 新建用户默认拥有登录权限及访问 TEST 和 TEST_% 库权限
      • 查询 mysql.user 获取已授予权限,或通过 show grants 命令获取。
      全局权限 数据库 权限 表对象 权限 程序权限 列权限 全局权限
    • 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. MYSQL 权限验证粒度 -- 数据库
      • 拥有指定数据库中 [ 所有 ] 对象的 [ 所有 ] 权限
      • 权限信息记入 mysql.db 表
      数据库权限 全局权限 表对象 权限 程序权限 列权限 数据库级权限
    • 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. MYSQL 权限验证粒度 -- 表
      • 拥有指定表对象的 [ 所有 ] 权限
      • 权限信息记入 mysql.tables_priv 表
      表对象权限 全局权限 程序权限 列权限 表对象级权限 数据库 权限
    • 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. MYSQL 权限验证粒度 -- 列
      • MYSQL 权限体系中表对象的最细粒度
      • 拥有指定表对象的指定列的 [ 所有 ] 权限
      • 权限信息记入 mysql.columns_priv 表和 mysql.tables_priv 表
      列权限 全局权限 程序权限 列级权限 数据库 权限 表对象 权限
    • 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. MYSQL 权限验证粒度 -- 程序
      • 特指 Procedure 和 Function 两类对象
      • 拥有指定对象的 [ 所有 ] 权限
      • 权限信息记入 mysql.procs_priv 表
      程序权限 全局权限 列权限 程序权限 数据库 权限 表对象 权限
    • 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. 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. 权限的授予
      • 授予命令语法:
      • GRANT
      • priv_type [(column_list)] [, priv_type [(column_list)]] ...
      • ON [object_type] priv_level
      • TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
      • [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
      • [WITH with_option ...]
      • 示例:
      • 授予 db 权限: grant all on jssdb.* to jss@'192.168.1.%';
      • 授予 col 权限: grant select (id) on jssdb.t1 to jss@'192.168.1.%';
      • 手动方式授予权限: insert/update 权限表
    • 17. 权限的收回
      • 收回命令语法:
      • 1>. REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
      • ON [object_type] priv_level FROM user [, user] ...
      • 2>. REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
      • 查看用户被授予的权限:
      • show grants for [user];
      • 示例:
      • 收回全局权限: revoke all from jss@'192.168.1.%';
      • 收回数据库权限: revoke all on jssdb.* from jss@'192.168.1.%';
    • 18. 授权表何时被重新加载 grant 、 revoke 、 set password 、 rename user 等系统命令对权限的修改,会立刻触发系统重新载入授权表 (grant tables) 手动修改权限相关字典表方式 (insert,update,delete) ,并不会重新加载授权表,除非重启 MySQL 服务,或 DBA 手动执行命令重载授权表 授权表 何时重载 命令方式 修改 字典表方式 修改
    • 19. 授权表被重新加载后何时生效 全局级权限 表或列级权限 数据库级权限 何时生效? 表、列及过程级权限 将在客户端下次执行操作时生效 全局权限对已连接的客户端无效,下次连接时才会生效 ( 含用户的密码修改 ) 数据库的权限 将在客户端执行 use db_name 语句时生效
    • 20. MYSQL 中两个特殊的数据库 TEST数据库 INFORMATION_SCHEMA数据库
      • 默认创建
      • 默认所有用户均有操作权限
      • 存在一定安全隐患
      • "test_" 开头数据库均有上述特点
      • 虚拟对象,由 MySQL 自动维护
      • 所有用户能够登录到 mysql 的用户均有该库读取权限
      • 无法为 information_schema 中的对象做授权操作
    • 21. 问答环节!

    ×