mysql用户操作
基本操作
查看现有用户
1 | mysql> SELECT host,user,authentication_string FROM mysql.user; |
创建用户(%
允许任意ip登录,可固定ip, 192.168.1.%
ip段登录, localhost
本地登录)
1 | mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password'; |
删除用户
1 | mysql> DROP USER 'username'@'host'; |
更改用户名
1 | mysql> RENAME USER 'jack'@'%' to 'jim'@'%'; |
修改密码
1 | // 1.用 set password 命令 |
授权
格式:
1 | mysql> GRANT privileges ON databasename.tablename TO 'username'@'host' IDENTIFIED BY 'password' WITH GRANT OPTION; |
1. GRANT命令说明:
priveleges
(权限列表,底部附权限列表),可以是ALL PRIVILEGES
表示所有权限,也可以是select
、update
等权限,多个权限的名词,相互之间用逗号分开。ON
后面指定权限针对哪些库和表,*.*
表示所有库所有表。TO
表示将权限赋予某个用户。IDENTIFIED BY
指定用户的登录密码,该项可以省略。WITH GRANT OPTION
表示该用户可以将自己拥有的权限授权给别人,该项可以省略。- 备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个
select
权限,然后又给用户添加一个insert
权限,那么该用户就同时拥有了select
和insert
权限。
2. 授权原则说明:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
- 只授予能满足需要的最小权限。
- 初始化数据库的时候删除没有密码的用户。
- 为每个用户设置满足密码复杂度的密码。
- 定期清理不需要的用户,回收权限或者删除用户。
eg:
1 | // 授予 user1 用户通过外网IP对于所有数据库的全部权限 |
查看当前用户权限
1 | mysql> SHOW GRANTS; |
查看其他用户的权限
1 | mysql> SHOW GRANTS FOR 'user1'@'%'; |
删除权限
1 | mysql> REVOKE insert ON test.* FROM 'user1'@'%'; |
附:Mysql权限列表
权限 | 作用范围 | 作用 |
---|---|---|
all | 服务器 | 所有权限 |
select | 表、列 | 选择行 |
insert | 表、列 | 插入行 |
update | 表、列 | 更新行 |
delete | 表 | 删除行 |
create | 数据库、表、索引 | 创建 |
drop | 数据库、表、视图 | 删除 |
reload | 服务器 | 允许使用flush语句 |
shutdown | 服务器 | 关闭服务 |
process | 服务器 | 查看线程信息 |
file | 服务器 | 文件操作 |
grant option | 数据库、表、存储过程 | 授权 |
references | 数据库、表 | 外键约束的父表 |
index | 表 | 创建/删除索引 |
alter | 表 | 修改表结构 |
show databases | 服务器 | 查看数据库名称 |
super | 服务器 | 超级权限 |
create temporary tables | 表 | 创建临时表 |
lock tables | 数据库 | 锁表 |
execute | 存储过程 | 执行 |
replication client | 服务器 | 允许查看主/从/二进制日志状态 |
replication slave | 服务器 | 主从复制 |
create view | 视图 | 创建视图 |
show view | 视图 | 查看视图 |
create routine | 存储过程 | 创建存储过程 |
alter routine | 存储过程 | 修改/删除存储过程 |
create user | 服务器 | 创建用户 |
event | 数据库 | 创建/更改/删除/查看事件 |
trigger | 表 | 触发器 |
create tablespace | 服务器 | 创建/更改/删除表空间/日志文件 |
proxy | 服务器 | 代理成为其它用户 |
usage | 服务器 | 没有权限 |