图5
13 rows in set (0.01 sec)
db表列出数据库,而用户有权限访问他们。在这里指定的权限适用于一个数据库中的任何表。
MySQL> desc host;
图6
12 rows in set (0.01 sec)
host表和db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,您可能发觉您根本不是用他。
MySQL> desc tables_priv;
图7
8 rows in set (0.01 sec)
tables_priv表指定表级权限。在这里指定的一个权限适用于一个表的任何列。
MySQL> desc columns_priv;
图8
7 rows in set (0.00 sec)
columns_priv表指定列级权限。在这里指定的权限适用于一个表的特定列。
2)MySQL授权表运行机制
MySQL的访问控制分两个步骤:
a)服务器检查是否允许该用户连接。
b)假如该用户有权连接,那么服务器还会检查他的每一个请求是否有足够的权限。比如:用户检索数据库中的一个表需要有这个数据库的select权限,用户删除数据库中的一个表需要有这个数据库的drop权限。
授权表的user, db,host表使用这两个步骤,tables_priv和columns_priv表只使用第二步(检查请求)。每个授权表包含决定一个权限何时运用的范围列和决定授予哪种权限的权限列。
范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列,如db表包含一个Db列指出权限运用于哪个数据库。类似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。
下面是user表的Host字段和User字段组合的一些例子:
图9
SQL的字符串通配符%表示匹配任意字符,能够是0个字符,通配符_表示匹配一个字符。
权限列指出在范围列中指定的用户拥有何种权限。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称和GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。
3)授权表使用举例
grant用于给增加用户和创建权限,revoke用于删除用户权限。
下面是一些用grant增加用户和创建权限的例子:
MySQL> grant all privileges on *.* to test@localhost identified by 'test' with grant option;
这句增加一个本地具备任何权限的test用户(终极用户),密码是test。ON子句中的*.*意味着"任何数据库、任何表"。with grant option表示他具备grant权限。
MySQL> grant select,insert,update,delete,create,drop privileges on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test';
这句是增加了一个test1用户,口令是test,但是他只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限。
用grant语句创建权限是无需再手工刷新授权表的,因为他已自动刷新了。
给用户创建权限还能够通过直接修改授权表:
MySQL> insert into user
values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");
MySQL> flush privileges;
这两句和上面第一句grant的效果是相同的,也是增加了一个本地的test终极用户。我们看到用grant方便多了,而且还不需flush privileges。
mysql> insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test")); mysql> insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N") MySQL> flush privileges;
这三句和上面第二句grant的效果也是相同的,也是增加了一个只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限的test1用户,口令是test。要取消一个用户的权限,使用revoke语句。revoke的语法很类似于grant语句,除了to用from取代并且没有identified by和with grant option子句,下面是用revoke删除用户权限的例子:
MySQL> revoke all on test.* from test1@'192.168.1.0/255.255.255.0';
这句revoke就撤消了上面第二句grant创建的权限,但是test1用户并没有被删除,必须手工从user表删除:
MySQL> delete from user where user='test1';
MySQL> flush privileges;
这样,test1用户就完全删除了。
这些只是MySQL授权表的简单使用,更多周详的资料请见MySQL提供的手册。
4、编程需要注意的一些问题
不管是用哪种程式语言写连接
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




