mysql权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个mysql服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限。
mysql在认定身份中考虑你的主机名和用户名字,是因为有很小的原因假定一个给定的用户在因特网上属于同一个人。例如,用户从whitehouse.gov连接的bill不必和从mosoft.com连接bill是同一个人。 mysql通过允许你区分在不同的主机上碰巧有同样名字用户来处理它:你可以对从whitehouse.gov连接授与bill一个权限集,而为从microsoft.com的连接授予一个不同的权限集。
mysql存取控制包含2个阶段:
阶段1:服务器检查你是否允许连接。
阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有select权限或对数据库有drop权限。
服务器在存取控制的两个阶段使用在mysql的数据库中的user、db和host表,在这些授权表中字段如下:
表名称 user db host
范围字段 host host host
user db db
password user
权限字段 select_priv select_priv select_priv
insert_priv insert_priv insert_priv
update_priv update_priv update_priv
delete_priv delete_priv delete_priv
index_priv index_priv index_priv
alter_priv alter_priv alter_priv
create_priv create_priv create_priv
drop_priv drop_priv drop_priv
grant_priv grant_priv grant_priv
reload_priv
shutdown_priv
process_priv
file_priv
对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考tables_priv和columns_priv表。这些表的字段如下:
表名称 tables_priv columns_priv
范围字段 host host
db db
user user
table_name table_name
column_name
权限字段 table_priv column_priv
column_priv
其他字段 timestamp timestamp
grantor
每个授权表包含范围字段和权限字段。
范围字段决定表中每个条目的范围,即,条目适用的上下文。例如, 一个user表条目的host和user值为''thomas.loc.gov''和''bob''将被用于证实来自主机thomas.loc.gov的bob对服务器的连接。同样,一个db表条目的host、user和db字段的值是''thomas.loc.gov''、''bob''和''reports''将用在bob从主机联接thomas.loc.gov存取reports数据库的时候。 tables_priv和columns_priv表包含范围字段,指出每个条目适用的表或表/列的组合。
对于检查存取的用途,比较host值是忽略大小写的。user、password、db和table_name值是区分大小写的。column_name值在mysql3.22.12或以后版本是忽略大小写的。
