MySQL权限系统保证所有的用户只执行允许做的事情。当你连接MySQL服务器时,你的身份由你从那儿连接的主机和你指定的用户名来决定。
连接后发出请求后,系统根据你的身份和你想做什么来授予权限。这意味着不同的主机甚至可以使用同样的用户名来访问MySQL
默认主机名是localhost。
默认用户名在Windows中是ODBC,在Unix中是你的Unix登录名。
MySQL存取控制包含2个阶段:
阶段1:服务器检查是否允许你连接。
阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库表中选择(select)行或从数
据库删除表,服务器确定你对表有SELECT权限或对数据库有DROP权限。
主要授权表:
user、db、host、procs_priv、tables_priv和columns_priv表。
tables_priv和columns_priv表可以对表和列提供更精确的权限控制
user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务
器上的all数据库。
db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。
当你想要一个给定的db表行应用于若干主机时,db和host表一起使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库
,在用户的db表行的Host值设为空值,然后将那些主机的每一个移入host表。
管理权限(例如RELOAD或SHUTDOWN等等)仅在user表中被指定
当想查看一个用户的权限时,可使用
mysql > SHOW GRANTS FOR 'mysql'@'localhost';
user表在全局基础上授予赋予你的权限,该权限不管当前的数据库是什么均适用。
例如,如果user表授予你DELETE权限, 你可以删除在服务器主机上从任何数据库删除行!换句话说,user表权限是超级用户权限。只把
user表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在user表中的权限设成'N'并且仅在特定数据库的基础
上授权。你可以为特定的数据库、表或列授权。
对数据库有关的请求(INSERT、UPDATE等等),服务器首先通过查找user表行来检查用户的全局(超级用户)权限。如果行允许请求的操作,访
问被授权。如果在user表中全局权限不够,服务器通过检查db和host表确定特定的用户数据库权限:
需要注意的是,当一个用户已连接上服务器,而一个高权限用户改变其权限,这样的改变并不是当场生效,全局权限的改变在下次客户端连
接时生效,而对数据库的改变则在下次使用use命令时生效。
如果用GRANT、REVOKE或SET PASSWORD对授权表进行修改,服务器会注意到并立即重新将授权表载入内存。
如果你手动地修改授权表(使用INSERT、UPDATE或DELETE等等),你应该执行mysqladmin flush-privileges或mysqladmin reload告诉服务器
再装载授权表,否则你的更改将不会生效,除非你重启服务器。