您好,欢迎访问一九零五行业门户网

深入MySQL的权限系统(1)

mysql有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作mysql数据库必须要走的第一步,对于一个熟悉sql基本操作的人来说,也是mysql所有的知识中比较难以理解的一个部分。本节通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用
mysql有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作mysql数据库必须要走的第一步,对于一个熟悉sql基本操作的人来说,也是mysql所有的知识中比较难以理解的一个部分。本节通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。
mysql的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的sql语句grant和revoke语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的mysql(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解mysql授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。
mysql授权表的结构
通过网络连接服务器的客户对mysql数据库的访问由授权表内容来控制。这些表位于mysql数据库中,并在第一次安装mysql的过程中初始化(运行mysql_install_db脚本)。授权表共有5个表:user、db、host、tables_priv和columns_priv。
授权表user、db和host的结构和作用
表1  授权表user、db和host的结构
498)this.width=498; onmousewheel=javascript:return big(this) style=max-width:90% style=max-width:90% alt= src=http://www.68idc.cn/help/uploads/allimg/150511/1120046020-0.jpg width=492 border=0> 
授权表的内容有如下用途:
·user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了delete权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。
·db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。
·host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受grant和revoke语句的影响,所以,你可能发觉你根本不是用它。
授权表tables_priv和columns_priv的结构和作用
表2  授权表tables_priv和columns_priv的结构
授权表tables_priv
授权表columns_priv
作用域列
host
host
db
db
user
user
table_name
table_name
column_name
权限列
table_priv
column_priv
其他列
timestamp
timestamp
grantor
mysql没有rows_priv表,因为它不提供记录级权限,例如,你不能限制用户于表中包含特定列值的行。如果你确实需要这种能力,你必须用应用编程来提供。如果你想执行建议的记录级锁定,你可用get_lock()函数做到。
授权表的内容有如下用途:
·tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。
·columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。
tables_priv和columns_priv表在mysql 3.22.11版引进(与grant语句同时)。如果你有较早版本的mysql,你的mysql数据库将只有user、db和host表。如果你从老版本升级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本创建它们。
用户的权限
权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。在mysql启动时和在7.5权限修改何时生效所说的情况时,服务器读入这些数据库表内容。
数据库和表的权限
下列权限运用于数据库和表上的操作。
·select
允许你使用select语句从表中检索数据。select语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个select语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用mysql客户作为一个简单的计算器:
mysql> select 1+1;
mysql> select pi()*2;
·update
允许你修改表中的已有的记录。
·insert
允许在表中插入记录
·delete
允许你从表中删除现有记录。
·alter
允许你使用alter table语句,这其实是一个简单的第一级权限,你必须由其他权限,这看你想对数据库实施什么操作。
·create
允许你创建数据库和表,但不允许创建索引。
·drop
允许你删除(抛弃)数据库和表,但不允许删除索引。
注意:如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了mysql存取权限的数据库!
·index
允许你创建并删除索引。
·references
目前不用。
其它类似信息

推荐信息