MySQL用户管理
- 与Linux操作系统类似,MySQL也有超级用户好普通用户之分
- 如果一个用户只需要访问MySQL中的某一个数据库,设置数据库中的某一个表,那么可以为其创建一个普通用户,并未该用户赋予对应的权限,而不让用户看到数据库中的其他数据,防止该用户对其他数据进行误操作。
用户
MySQL中有一个默认的名为mysql的数据库,
查看该数据库中的表,可以找到一个名为user的表,user中存储的就是mysql中用户相关信息
不分字段说明
- user:表示该用户的用户名
- host:表示该用户可以从哪个主机登录,localhost表示只能从本地登录,%表示可以从任意地方登录
- authentication_string:表示该用户的密码经过password函数加密后的值
- xxx_priv:表示该用户是否拥有对应权限
在查看用户的时候为了避免刷屏,可以只选择对不分字段进行显示,如下:
这里可以发现,MySQL中可以存在同名的用户,只要他们对应登录主机不同就行,因为user表中的主键是复合主键,由表中的user列和host共同承担
创建用户
CREATEUSER'用户名'@'登录主机'IDENTIFIEDBY'密码';比如我现在来创建一个用户aolang,并且让他可以在任意地方登录,如下:
现在我从window上登录一下
修改用户密码
修改自己的密码
ALTERUSERUSER()IDENTIFIEDBY'新密码';超级用户修改别人的密码
ALTERUSER'root'@'localhost'IDENTIFIEDBY'新密码';删除用户
DROPUSER'用户名'@'登录地址';比如将刚才创建的用户删除
数据库的权限
MySQL中的权限
| 权限 | 列名 | 上下文 |
|---|---|---|
| CREATE | Create_priv | 数据库、表或索引 |
| DROP | Drop_priv | 数据库或表 |
| GRANT OPTION | Grant_priv | 数据库、表或保存的程序 |
| REFERENCES | References_priv | 数据库或表 |
| ALTER | Alter_priv | 表 |
| DELETE | Delete_priv | 表 |
| INDEX | Index_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 | 服务器管理 |
| SUPER | Super_priv | 服务器管理 |
给用户授权
GRANT权限列表ON库名.对象名TO'用户名'@'登录地址'[IDENTIFIEDBY'密码'];'用户名'@'登录地址':表示给哪一个用户授权库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开IDENTIFIED BY '密码'可选:如果用户存在,则在授予权限的同时修改改用户的密码,如果不存在则创建该用户
MySQL 8.0 及以上版本(必须先创建用户,再授权)
对于aolang
可以通过show grants for '用户名'@'密码'查看用户现有的权限
- 创建用户后用户默认有USAGE权限,它只能用于数据库登录,不能执行任何操作
- *.*表示所有数据库的所有对象,库名.*表示某个数据库的所有对象(表、视图、存储过程等)
aolang进入test数据库后,只能查看表中的信息,无法对表中数据进行修改,因为我们只赋予了select权限
回收权限
REVOKE权限列表ON库名.对象名FROM'用户名'@'登录地址';回收权限的语法与授权一样,只不过将to关键字改为了from,并且没有了IDENTIFIED BY '密码’字段。
回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。