MySQL 存取控制包含2个阶段:
- 阶段1:服务器检查是否允许你连接。
- 阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库表中选择(select)行或从数据库删除表,服务器确定你对表有SELECT权限或对数据库有DROP权限。
参考 : 5.8. MySQL用户账户管理
1.权限查看
mysql
>
show grants
for
'
root
'
@
'
localhost
'
;
+ -- -------------------------------------------------------------------+
| Grants for root @localhost |
+ -- -------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON * . * TO ' root ' @ ' localhost ' WITH GRANT OPTION |
+ -- -------------------------------------------------------------------+
1 row in set ( 0.06 sec)
+ -- -------------------------------------------------------------------+
| Grants for root @localhost |
+ -- -------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON * . * TO ' root ' @ ' localhost ' WITH GRANT OPTION |
+ -- -------------------------------------------------------------------+
1 row in set ( 0.06 sec)
2.权限设置
5.8.2. 向MySQL增加新用户账户
mysql
>
GRANT
ALL
PRIVILEGES
ON
*
.
*
TO
'
monty
'
@
'
localhost
'
-> IDENTIFIED BY ' some_pass ' ;
mysql > GRANT ALL PRIVILEGES ON * . * TO ' monty ' @ ' % '
-> IDENTIFIED BY ' some_pass ' WITH GRANT OPTION ;
其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 ('monty'@'localhost')只用于从本机连接时。另一个账户('monty'@'%')可用于从其它主机连接。
mysql > GRANT RELOAD,PROCESS ON * . * TO ' admin ' @ ' localhost ' ;
该账户只用于从本机连接。授予了RELOAD和PROCESS管理权限。这些权限允许admin用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。
mysql > GRANT USAGE ON * . * TO ' dummy ' @ ' localhost ' ;
一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。
-> IDENTIFIED BY ' some_pass ' ;
mysql > GRANT ALL PRIVILEGES ON * . * TO ' monty ' @ ' % '
-> IDENTIFIED BY ' some_pass ' WITH GRANT OPTION ;
其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 ('monty'@'localhost')只用于从本机连接时。另一个账户('monty'@'%')可用于从其它主机连接。
mysql > GRANT RELOAD,PROCESS ON * . * TO ' admin ' @ ' localhost ' ;
该账户只用于从本机连接。授予了RELOAD和PROCESS管理权限。这些权限允许admin用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。
mysql > GRANT USAGE ON * . * TO ' dummy ' @ ' localhost ' ;
一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。
下面的例子创建3个账户,允许它们访问专用数据库。每个账户的用户名为custom,密码为obscure。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO 'custom'@'localhost'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO 'custom'@'whitehouse.gov'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO 'custom'@'server.domain'
-> IDENTIFIED BY 'obscure';
这3个账户可以用于:
· 第1个账户可以访问bankaccount数据库,但只能从本机访问。
· 第2个账户可以访问expenses数据库,但只能从主机whitehouse.gov访问。
· 第3个账户可以访问customer数据库,但只能从主机server.domain访问。
要想不用GRANT设置custom账户,使用INSERT语句直接修改 授权表:
5.8.3. 从MySQL删除用户账户
DROP USER user;
本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/archive/2012/08/17/2643427.html,如需转载请自行联系原作者