本文最后更新于 74 天前,如有失效请评论区留言。
推荐使用普通用户账号,不推荐只使用root用户账号。
用户
MySQL的用户,是在一个表里进行管理的,在database(mysql)->user(table)里。其实增删查改用户,就是在这个表里进行修改。
创建用户
语法:create user '用户名'@'登陆主机/ip' identified by '密码';
比如:
mysql> create user 'AQL'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.54 sec)
@后添加‘%’
就表示可以从任意主机登录。
建议不要随便创建一个让别人可以从任意主机登录的用户!
删除用户
语法:drop user '用户名'@'主机名'
修改用户密码
- root修改自己的密码:
set password=password('新的密码');
- root修改别人的密码:
set password for '用户名'@'主机名'=password('新的密码');
其实直接在表里用update user set authentication_string=password('新的密码') where user='用户名';
也是可以改密码的,同样,创建用户、删除用户也都可以直接修改表来达到同样的效果。
数据库权限
MySQL数据库的权限列表如下:
权限名称 | 对应字段 | 上下文描述 |
---|---|---|
CREATE | Create_priv |
数据库、表或索引 |
DROP | Drop_priv |
数据库或表 |
GRANT OPTION | Grant_priv |
数据库、表或保存的程序 |
REFERENCES | References_priv |
数据库或表 |
ALTER | Alter_priv |
表结构修改 |
DELETE | Delete_priv |
数据删除 |
INDEX | Index_priv |
索引操作 |
INSERT | Insert_priv |
数据插入 |
SELECT | Select_priv |
数据查询 |
UPDATE | Update_priv |
数据更新 |
CREATE VIEW | Create_view_priv |
视图创建 |
SHOW VIEW | Show_view_priv |
视图查看 |
ALTER ROUTINE | Alter_routine_priv |
修改存储过程/函数 |
CREATE ROUTINE | Create_routine_priv |
创建存储过程/函数 |
EXECUTE | Execute_priv |
执行存储过程/函数 |
FILE | File_priv |
服务器主机文件访问权限 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv |
创建临时表 |
LOCK TABLES | Lock_tables_priv |
锁定表 |
CREATE USER | Create_user_priv |
创建用户 |
PROCESS | Process_priv |
查看或终止其他用户的进程 |
RELOAD | Reload_priv |
重新加载权限或刷新日志 |
REPLICATION CLIENT | Repl_client_priv |
主从复制客户端操作权限 |
REPLICATION SLAVE | Repl_slave_priv |
主从复制从服务器操作权限 |
SHOW DATABASES | Show_db_priv |
查看所有数据库列表 |
SHUTDOWN | Shutdown_priv |
关闭 MySQL 服务器 |
SUPER | Super_priv |
执行管理员级操作(如变更全局变量) |
- 权限名称:MySQL中定义的权限标识。
- 对应字段:在
mysql.user
表中存储权限值的字段名。 - 上下文描述:权限适用的操作或对象范围。
给用户授权
刚创建的用户没有任何权限,需要root账户给用户授权。
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
例如:
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
1)*.*
: 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
2)库.*
: 表示某个数据库中的所有数据对象(表,视图,存储过程等)
3)identified by可选,如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
4)如果赋权后没有生效,可尝试执行如下指令:flush privileges;
查看某个用户的权限:
show grants for '用户名'@'登录位置';
回收权限
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';