管理MySQL用户账户
MySQL服务器的权限全部存放在mysql库中的几个权限表。(如下表)
权限表 |
权限表的内容 |
user |
可连接到服务器的用户和他们的全局权限 |
db |
数据库级权限 |
tables_priv |
数据表级权限 |
column_priv |
数据列级权限 |
procs_priv |
与存储例程有关的权限 |
对于mysql数据库的操作注意通过下面这些账户管理SQL语句完成:
create user ; drop user ; rename user;
grant;
revoke;
set password;
show grants;
如果grant的权限给定了库、表、列。那么它们将被分别记录到db、tables_priv、column_priv权限表里。revoke也是从相关表里将记录删除掉。
注:如果MySQL版本升级到一个新的版本,要运行mysql_update命令把那些权限表也升级到新版本的结构。
1、高级mysql用户管理
1)创建用户
create user 'user'@'hostname' identified by 'passwd';
通配符:
“%”字符是一个通配符,主机名如果设置为“%”,就表示“任意一台主机”。
“-”也可以用在主机名部分里,可以匹配任意单个字符。
例:如果让用户从a.com域中的任意一台主机去连接服务器,需要把主机名设置“%.a.com”
create user 'username'@'%.a.com' identified by 'passwd';
如果让用户从网段中访问,也可以使用网段或者“192.168.1.%”
create user 'username'@'192.168.1.0/255.255.255.0' identified by 'passwd';
create user 'username'@'192.168.1.%' identified by 'passwd';
2)删除用户
drop user 'username'@'hostname';
3)重命名用户
rename user 'username'@'hostname' to 'username'@'hostname';
2、对账户授权
grant privileges (column) on dbname.tablename to 'username'@'hostname' identified by 'passwd' [REQUIRE] [WITH]
1)确定账户的权限
可以授予用户的权限分为很多种,我们把这些权限按照管理类别分表。
数据库管理权限表
权限名 |
该权限所允许的操作 |
Create user |
创建用户 |
File |
读、写MySQL服务器主机上的文件 |
Grant Option |
授权 |
Process |
查看服务器运行的线程 |
Reload |
重新加载权限数据表或者更新日志及缓存 |
Replication client |
查询主/从服务器的运行地点 |
Replication slave |
以复制的从服务器运行 |
Show database |
用show database 语句查看全体数据库的名字 |
Shutdown |
关闭服务器 |
Super |
用kill命令终止线程以及进行其他超级用户操作 |
数据库对象操作权限
权限名 |
该权限所允许的操作 |
Alter |
更改数据表和索引的定义 |
Alter routine |
更改或者删除存储函数和存储过程 |
Create |
创建数据库和数据表 |
Create routine |
创建存储函数和存储过程 |
Create temporary tables |
用temporary关键字创建临时数据表 |
Create view |
创建视图 |
Delete |
删除数据表里的现有数据行 |
Drop |
删除数据库、数据表和其他对象 |
Event |
为事件调度程序创建、删除或修改各种事件 |
Execute |
执行存储函数和存储过程 |
Index |
创建或删除索引 |
Insert |
插入数据 |
Lock tables |
用lock tables 语句明确锁定数据表 |
Select |
查询 |
Show view |
用show create view 语句查看视图的定义 |
Trigger |
创建或者删除触发器 |
Update |
修改数据行 |
其他权限
权限名 |
该权限所允许的操作 |
All |
所有操作(不包括grant) |
Usage |
一个特殊的“无权限”权限 |
权限级别限定符
权限限定符 |
有关权限的作用范围 |
ON *.* |
全局级 |
ON dbname.* |
数据库级 |
ON dbname.tablename |
数据表级 |
ON tablename |
数据表级 |
ON dbname.routine_name |
存储例程权限 |
2)使用“无权限”的USAGE权限
USAGE的用法是:授予全局级USAGE权限,指定账户名,给出该账户与权限无关的特性值。
比如:如果你想在不影响账户权限的前提下改变该账户的口令,或要求用户必须使用SSL连接,或者想对该账户限制连接,可以使用下面几条语句:
grant usage on *.* to account identified by 'passwd';
grant usage on *.* to account require SSL;
grant usage on *.* to account with max_connections_per_hour 10;
3、查看账户的权限
show grants for 'username'@'hostname'
4、撤销权限和删除用户
revoke privileges on dbname.tablename from 'username'@'hostname';
drop user 'username'@'hostname'
5、改变口令
set password for 'username'@'hostname' = PASSWORD ('passwd')