管理MySQL用户帐户mysql
MySQL服务器的权限所有存放在mysql库中的几个权限表。(以下表)sql
权限表数据库 |
权限表的内容缓存 |
user服务器 |
可链接到服务器的用户和他们的全局权限ide |
db函数 |
数据库级权限ui |
tables_privspa |
数据表级权限线程 |
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命令把那些权限表也升级到新版本的结构。
一、高级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';
二、对帐户受权
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;
三、查看帐户的权限
show grants for 'username'@'hostname'
四、撤销权限和删除用户
revoke privileges on dbname.tablename from 'username'@'hostname';
drop user 'username'@'hostname'
五、改变口令
set password for 'username'@'hostname' = PASSWORD ('passwd')