------------------------+ | Alter | Alter_priv | 允许用alter语句修改表结构。 | +-----------+-------------+-----------------------------------------------------------------------+ | Grant | Grant_priv | 允许将自己拥有的权限授予其它用户,包括grant。 | +-----------+-------------+-----------------------------------------------------------------------+ | Reload | Reload | 允许重载授权表,刷新服务器等命令。 | +-----------+-------------+-----------------------------------------------------------------------+ | Shutdown | Shudown_priv| 允许用mysqladmin shutdown命令关闭MySQL服务器。该权限比较危险, | | | | 不应该随便授予。 | +-----------+-------------+-----------------------------------------------------------------------+ | Process | Process_priv| 允许查看和终止MySQL服务器正在运行的线程(进程)以及正在执行的查询语句 | | | | ,包括执行修改密码的查询语句。该权限比较危险,不应该随便授予。 | +-----------+-------------+-----------------------------------------------------------------------+ | File | File_priv | 允许从服务器上读全局可读文件和写文件。该权限比较危险,不应该随便授予。| +-----------+-------------+-----------------------------------------------------------------------+
mysql> desc db; +-----------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-----------------+------+-----+---------+-------+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | | | User | char(16) binary | | PRI | | | | Select_priv | enum(’N’,’Y’) | | | N | | | Insert_priv | enum(’N’,’Y’) | | | N | | | Update_priv | enum(’N’,’Y’) | | | N | | | Delete_priv | enum(’N’,’Y’) | | | N | | | Create_priv | enum(’N’,’Y’) | | | N | | | Drop_priv | enum(’N’,’Y’) | | | N | | | Grant_priv | enum(’N’,’Y’) | | | N | | | References_priv | enum(’N’,’Y’) | | | N | | | Index_priv | enum(’N’,’Y’) | | | N | | | Alter_priv | enum(’N’,’Y’) | | | N | | +-----------------+-----------------+------+-----+---------+-------+ 13 rows in set (0.01 sec)
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。
mysql> desc host; +-----------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-----------------+------+-----+---------+-------+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | | | Select_priv | enum(’N’,’Y’) | | | N | | | Insert_priv | enum(’N’,’Y’) | | | N | | | Update_priv | enum(’N’,’Y’) | | | N | | | Delete_priv | enum(’N’,’Y’) | | | N | | | Create_priv | enum(’N’,’Y’) | | | N | | | Drop_priv | enum(’N’,’Y’) | | | N | | | Grant_priv | enum(’N’,’Y’) | | | N | | | References_priv | enum(’N’,’Y’) | | | N | | | Index_priv | enum(’N’,’Y’) | | | N | | | Alter_priv | enum(’N’,’Y’) | | | N | | +-----------------+-----------------+------+-----+---------+-------+ 12 rows in set (0.01 sec)
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响 ,所以,你可能发觉你根本不是用它。
mysql> desc tables_priv; +-------------+-----------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------------------------+------+-----+---------+-------+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | | | User | char(16) binary | | PRI | | | | Table_name | char(60) binary | | PRI | | | | Grantor | char(77) | | MUL | | | | Timestamp | timestamp(14) | YES | | NULL | | | Table_priv | set(’Select’,’Insert’, | | | | | | | ’Update’,’Delete’,’Create’, | | | | | | | ’Drop’,’Grant’,’References’,| | | | | | | ’Index’,’Alter’) | | | | | | Column_priv | set(’Select’,’Insert’, | | | | | | | ’Update’,’References’) | | | | | +-------------+-----------------------------+------+-----+---------+-------+ 8 rows in set (0.01 sec)
tables_priv表指定表级权限。在这里指定的一个权限适用于一个表的所有列。
mysql> desc columns_priv; +-------------+------------------------+------+-----+---------+----+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------------+------+-----+---------+----+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | | | User | char(16) binary | | PRI | | | | Table_name | char(64) binary | | PRI | | | | Column_name | char(64) binary | | PRI | | | | Timestamp | timestamp(14) | YES | | NULL | | | Column_priv | set(’Select’,’Insert’, | | | | | | | ’Update’,’References’) | | | | | +-------------+------------------------+------+-----+---------+-------+ 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字段组合的一些例子: +-----------------------------+--------+------------------------------------------------+ | Host值 | User值 | 匹配的连接 | +-----------------------------+--------+-----------------------------------------------+ | ’x.y.z’ | ’test’ | test用户只能从x.y.z连接数据库 | +-----------------------------+--------+-----------------------------------------------+ | ’x.y.z’ | ’’ | 任何用户可以从x.y.z连接数据库 | +-----------------------------+--------+-----------------------------------------------+ | ’%’ | ’test’ | test用户可以从任意主机连接数据库 | +-----------------------------+--------+----------------------------------------------+ | ’’ | ’’ | 任何用户可以从任意主机连接数据库 | +-----------------------------+--------+-----------------------------------------------+ | ’%.y.z’ | ’test’ | test用户可以从y.z域的任意主机连接数据库 | +-----------------------------+--------+----------------------------------------------+ | ’x.y.% ’ | ’test’ | test用户可以从x.y.net, x.y.com, x.y.edu等主机连接数据库| +-----------------------------+--------+----------------------------------------------+ | ’192.168.1.1’ | ’test’ | test用户可以从IP地址为192.168.1.1的主机连接数据库 | +-----------------------------+--------+---------------------------------------------+ | ’192.168.1.% ’ | ’test’ | test用户可以从C类子网192.168.1中的任意主机连接数据库 | +-----------------------------+--------+---------------------------------------------+ | ’192.168.1.0/255.255.255.0’ | ’test’ | 同上 | +-----------------------------+--------+--------------------------------------------+ 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提供的手册。
3、编程需要注意的一些问题
不管是用哪种程序语言写连接MySQL数据库的程序,有一条准则是永远不要相信用户提交的数据! 对于数字字段,我们要使用查询语句:SELECT * FROM table WHERE ID=’234’,不要使用SELECT * FROM table WHERE ID=234这样的查询语句。MySQL会自动把字串转换为数字字符并且去除非数字字符。如果用户提交的数据经过了mysq 上一页 [1] [2] [3] 下一页 [电脑应用]用C#动态创建Access数据库 [Web开发]asp 在线备份与恢复sqlserver数据库代码详解 [Web开发]闵涛教你配置PHPMyadmin文件,PHPMyadmin配置文件… [电脑应用]教你如何远程管理MSSQL数据库 [其他]关于数据库优化查询计划的方法总结 [电脑应用]Linux数据库大比拚 [网络安全]为什么利用防火墙和路由器很难解网络安全问题 [网络安全]如何让您的系统更加安全之十条建议 [网络安全]QQ安全防范与模拟QQ客攻击 [网络安全]加强网络安全必经之路—修改注册表—网管必备
|