Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198848
  • 博文数量: 69
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-03 11:35
文章分类

全部博文(69)

文章存档

2011年(13)

2010年(46)

2009年(10)

我的朋友

分类: Mysql/postgreSQL

2009-12-24 18:26:34

MySql 091224:MySQL的权限管理

@ http://zcatt.cublog.cn

1.    flush-logs

mysqladmin flush-logs
 

flush-logs对于三种log方式,general_log, slow_query_log, 和binary_log的处理不尽相同

1)  general_log和slow_query_log先关闭log文件,再重新打开log文件

 

2)  binary_log先关闭log文件, 再使用新序号为后缀的文件名打开新log文件

 

3)  err_log处理类同2),但会使用-old后缀命名旧errlog文件。

 
general_log和slow_query_log应当先mv,再flush-logs.
 
 

2.    MySQL中的权限

按照作用的对象和范围,权限可分为3种

1)  管理权限,这种权限是全局的,用于整个mysql server的。

2)  数据库权限,这种权限是针对特定的一个,多个数据库的。

3)  管理数据库部件的权限,针对的是颗粒度更小的对象,例如数据库的table, index, view等。

下表摘自mysql ref manual.

 
Privilege
Column
Context
Create_priv
databases, tables, or indexes
Drop_priv
databases or tables

Grant_priv
databases, tables, or stored routines
References_priv
databases or tables
Event_priv
databases
Alter_priv
tables
Delete_priv
tables
Index_priv
tables
Insert_priv
tables
Select_priv
tables
Update_priv
tables

Create_tmp_table_priv
tables

Lock_tables_priv
tables
Trigger_priv
tables

Create_view_priv
views

Show_view_priv
views

Alter_routine_priv
stored routines

Create_routine_priv
stored routines
Execute_priv
stored routines
File_priv
file access on server host

Create_user_priv
server administration
Process_priv
server administration
Reload_priv
server administration

Repl_client_priv
server administration

Repl_slave_priv
server administration

Show_db_priv
server administration
Shutdown_priv
server administration
Super_priv
server administration

 
server administration
 
server administration
 
 

账户的权限保存在mysql的user, db, host, tables_priv, columns_priv和procs_priv tables中。

 
1) user table决定是否允许(host, user)来的链接,如果允许,则对应的权限列指定了user的全局权限,适用于server中的所有db.
 
2)db table决定了(host,user)可以访问的db,权限列描述了可以在这个db上执行的操作。
 
3) host table用于配合table表处理允许 某个用户从多个host中访问 的问题。
 
4) tables_priv和columns_priv tables用于表和列级别的管理,是更细颗粒的。
 
5)procs_priv table用于stored routines.
 
mysqld启动时是将grant tables读入内存使用的,因此,变更privilege后应当flush privileges,或执行mysqladmin flush-privilegesmysqladmin reload.
 
查看某个用户的权限:
show grants for 'root'@'localhost';
 
 

3.    MySQL的账户Account

1)账户是由(username,host)标识的。

形式: 'user_name'@'host_name'

注意那个单引号(也可用 ` " )。不产生歧义时,单引号可以省略。例如使用特殊字符时,就需要使用单引号。
不带host_name的acount,等同 'user_name'@'%'
空白的user_name是匿名用户,等同''@'localhost'
host_name中可以使用通配符'%'和'_'
对于IP形式的host,可以使用host_ip/netmask形式指定, 但netmask只能指定8, 16,24, 或32bit的掩码。例如,
'david'@'192.58.197.0/255.255.255.0'
 

4.访问控制Access Control

1) stage 1,  使用user_name, host_name, 和password判断是否许可访问

 
2)stage 2, 请求验证(request verification)。根据user,db,host,tables_priv,columns_priv和procs_priv表判断操作是否允许。判断逻辑可以描述为,

global privileges

OR (database privileges AND host privileges)

OR table privileges
OR column privileges
OR routine privileges
 
 
 
 
 
 
 
Locations of visitors to this page
阅读(1491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~