MySQL用户权限管理
一、用户管理
创建用户
格式:
create User ’UserName‘@’HostName‘ identified by ’PassWord‘;
UserName:要创建的用户名
HostName:指定用户在哪个主机上可以登录,如果是本地用户那为localhost
如果想让用户可以从任意远程主机登录,那可以使用统配符%
PassWord:该用户的密码,秘密可以为空
//1.本地主机登录
Create User ‘ZhangSan’@’localhost’ identified by ‘123456’;
//2.从地址为192.168.1.10的主机上登录
Create User ‘ZhangSan’@’192.168.1.10’ identified by ‘123456’;
//3.从任意远程主机上登录
Create User ‘ZhangSan’@’%’ identified by ‘123456’;
//4.从任意远程主机登录,密码为空
Create User ‘ZhangSan’@’%’ identified by ‘’;
//5.从任意远程主机登录,密码为空
Create User ‘ZhangSan’@’%’ ;
删除用户
Drop User ’username‘@’host‘;
二、用户权限管理
MySql数据库的权限层级分为:
1.全局——可以管理整个MySql
2.库——可以管理指定的数据库
3.表——可以管理指定数据库的指定表
4.字段——可以管理指定数据库的指定表的指定字段
MySQL对用户有赋权操作和收回权限 的操作。修改用户权限后需退出重连,才能生效
赋予用户权限
命令格式:grant 权限 on 数据库对象 to 用户
1.查看用户权限 show grants;
2.查看用户具体权限的语句
select * from mysql.user where user='root'\G
尾数参数G的作用:每个字段打印到单独的行,后面无需再有;号
权限字段用途说明表 | |
---|---|
Select_priv | 确定用户是否可以通过SELECT命令选择数据 |
Insert_priv | 确定用户是否可以通过INSERT命令插入数据 |
Update_priv | 确定用户是否可以通过UPDATE命令修改现有数据 |
Delete_priv | 确定用户是否可以通过DELETE命令删除现有数据 |
Create_priv | 确定用户是否可以创建新的数据库和表 |
Drop_priv | 确定用户是否可以删除现有数据库和表 |
Reload_priv | 确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表 |
Shutdown_priv | 确定用户是否可以关闭MySQL服务器,将此权限提供给root账户之外的任何用户时,都应当非常谨慎 |
Process_priv | 确定用户是否可以通过SHOW |
File_priv | 确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
Grant_priv | 确定用户是否可以将已经授予给该用户自己的权限再授予其他用户,例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户 |
References_priv | 目前只是某些未来功能的占位符,现在没有作用 |
Index_priv | 确定用户是否可以创建和删除表索引 |
Alter_priv | 确定用户是否可以重命名和修改表结构 |
Show_db_priv | 确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库,可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因 |
Super_priv | 确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令 |
Create_tmp_table_priv | 确定用户是否可以创建临时表 |
Lock_tables_priv | 确定用户是否可以使用LOCK |
Execute_priv | 确定用户是否可以执行存储过程,此权限只在MySQL 5.0及更高版本中有意义 |
Repl_slave_priv | 确定用户是否可以读取用于维护复制数据库环境的二进制日志文件,此用户位于主系统中,有利于主机和客户机之间的通信 |
Repl_client_priv | 确定用户是否可以确定复制从服务器和主服务器的位置 |
Create_view_priv | 确定用户是否可以创建视图,此权限只在MySQL 5.0及更高版本中有意义 |
Show_view_priv | 确定用户是否可以查看视图或了解视图如何执行,此权限只在MySQL 5.0及更高版本中有意义 |
Create_routine_priv | 确定用户是否可以更改或放弃存储过程和函数,此权限是在MySQL 5.0中引入的 |
Alter_routine_priv | 确定用户是否可以修改或删除存储函数及函数,此权限是在MySQL 5.0中引入的 |
Create_user_priv | 确定用户是否可以执行CREATE |
Event_priv | 确定用户能否创建、修改和删除事件,这个权限是MySQL 5.1.6新增的 |
Trigger_priv | 确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的 |
Create_tablespace_priv | 创建表的空间 |
授权语句中的关键字说明表 | ||
---|---|---|
权限 | 权限级别 | 权限说明 |
CREATE | 数据库、表或索引 | 创建数据库、表或索引权限数据库或表 |
DROP | 数据库或表 | 删除数据库或表的权限 |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 |
REFERENCES | 数据库或表 | |
ALTER | 表 | 更改表,比如添加字段,索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
CREATE VIEW | 视图 | 创建视图的权限 |
SHOW VIEW | 视图 | 查看视图的权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程的权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程的权限 |
EXECUTE | 存储过程 | 执行存储过程的权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表的权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户的权限 |
PROCESS | 服务器管理 | 查看进程权限 |
RELOAD | 服务器管理 | 执行flush-hosts,flush-logs,flush-privileges, flush-status,flush-tables,flush-threads,refresh, reload等命令的权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务器管理 | 执行kill线程权限 |
普通用户授权:只有对指定库指定表的增,删,改,查,权限。 |
---|
*grant* *select* *on* *testdb.** *to ZhangSan@’%’* |
*grant* *insert* *on* *testdb.** *to ZhangSan@’%’* |
*grant* *update* *on* *testdb.** *to* *ZhangSan@’%’* |
*grant* *delete* *on* *testdb.** *to ZhangSan@’%’* |
**或是* |
*grant* *select, insert, update, delete* *on* *testdb.** *to* *ZhangSan********@’%’* |
数据库开发人员授权:创建表、索引、视图、存储过程、函数等权限 创建,修改,删除表结构的权限 |
---|
*grant create on testdb.* to ZhangSan@‘192.168.0.%’* |
*grant alter on testdb.* to ZhangSan@‘192.168.0.%’* |
*grant drop on testdb.* to ZhangSan@‘192.168.0.%’* |
*或是* |
*grant* *create********,********alter********,* *drop* *on* *testdb.** *to* *ZhangSan********@’%’* |
*操作 MySQL 外键权限:* |
*grant* *references* *on* *testdb.** *to ZhangSan@‘192.168.0.%’;* |
*操作 MySQL 临时表权限:* |
*grant* *create* *temporary* *tables* *on* *testdb.* to* *ZhangSan@‘192.168.0.%’;* |
*操作 MySQL 索引权限:* |
*grant* *index* *on* *testdb.** *to* *ZhangSan@‘192.168.0.%’;* |
*操作 MySQL 视图、查看视图源代码权限:* |
*grant* *create* *view* *on* *testdb.** *to* *ZhangSan@‘192.168.0.%’;* |
*grant* *show view* *on* *testdb.** *to* *ZhangSan@‘192.168.0.%’;* |
*操作 MySQL 存储过程、函数权限:* |
*grant create routine on testdb.* to ZhangSan@‘192.168.0.%’;* |
*grant alter routine on testdb.* to ZhangSan@‘192.168.0.%’;* |
*grant execute on testdb.* to ZhangSan@‘192.168.0.%’;* |
普通DBA授权 |
---|
*赋予ZhangSan在本地登录时对testdb库具有全部的权限* |
grant all privileges on testdb to ZhangSan@‘localhost’ |
高级DBA授权 |
---|
*赋予ZhangSan在本地登录时对MySql服务器上全部的库具有全部的权限* |
*grant all on *.* to ZhangSan @ ‘localhost’* |
*多层次授权* |
---|
*作用在整个 MySQL 服务器上:* |
*grant select on* *.*** *to ZhangSan@localhost; – ZhangSan可以查询 MySQL 中所有数据库中的表。* |
*grant all on *.* to ZhangSan@localhost; – ZhangSan 可以管理 MySQL 中的所有数据库* |
*作用在单个数据库上:* |
*grant select on testdb.* to ZhangSan@localhost; – ZhangSan 可以查询 testdb 中的表。* |
*作用在单个数据表上:* |
*grant select, insert, update, delete on testdb.orders to ZhangSan@localhost;* |
*作用在表中的列上:* |
*grant select(id, se, rank) on testdb.apache_log to ZhangSan@localhost;* |
*作用在存储过程、函数上:* |
*grant execute on procedure testdb.pr_add to ‘ZhangSan’@‘localhost’* |
*grant execute on function testdb.fn_add to ‘ZhangSan’@‘localhost’* |
l *收回用户权限* |
---|
*命令格式:revoke 权限 on 数据库对象 from 用户* |
*例子:* |
*grant* *all* *on *.** *to* *dba********@localhost;* *给dba用户所有操作权限* |
*revoke* *all* *on* *.*** *from* *dba@localhost;* *收回dba用户的所有操作权限* |