文章目录
- 🌈 一、用户管理
- ⭐ 1. 用户信息
- ⭐ 2. 创建用户
- ⭐ 3. 修改密码
- ⭐ 4. 删除用户
- 🌈二、数据库的权限
- ⭐ 1. 权限列表
- ⭐ 2. 查看权限
- ⭐ 3. 授予权限
- ⭐ 4. 回收权限
🌈 一、用户管理
- MySQL 也会区分普通用户和超级用户。
- 如果只是访问某一个数据库,甚至是某个数据库中的某张表,就可以为他创建一个普通用户,并为其赋予对应的权限,让这个用户无法看到数据库中的其他数据,防止该用户对其他数据进行操作。
⭐ 1. 用户信息
- MySQL 中有一个名为 mysql 的数据库。
- 在这个 mysql 数据库中,有一个名为 user 的表,MySQL 的用户都存在这张表里。
- user 表示用户名。host 表示用户可以从哪个主机登录 (localhost 表示只能本机登录)。
⭐ 2. 创建用户
create user '用户名'@'登陆主机/ip' identified by '密码';
- 如果要设置成允许远程登录,登录主机可以使用 % 模糊匹配表示该用户能在任何主机登录。
- 如果要设置成只能本机登录,登录主机就必须设置成 localhost 或 127.0.0.1
举个栗子
- 创建一个名为 wukong 的用户,并使用 % 作为登录主机,让该用户能在任意主机登录。
- 创建成功之后,该用户的相关信息就被写入到 user 表中了。
- 此时就能用刚刚新建的普通用户 wukong 来连接数据库了。
- 由于该用户可以从任意地方登录,因此如果在下也安装了 MySQL,就可以用 cmd 窗口进行远程登录。
- -h 需要的是对应的远程主机的 ip
⭐ 3. 修改密码
alter user '用户名'@'登录主机' identified by '新的密码';
- 例:将普通用户 wukong 的密码修改为 778899
- 注:普通用户只能改自己的密码,而超级用户 root 能改任何用户的。
⭐ 4. 删除用户
drop user '用户名'@'登录主机';
- 例:将之前创建的普通用户 wukong 删除掉,此时再查 user 表就会发现 wukong 已经没了。
- 注:删除用户时如果不指明待用户的登录主机,则默认删除的是登录主机为 % 的用户。
🌈二、数据库的权限
⭐ 1. 权限列表
- 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 | 视图 |
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 | 服务器管理 |
⭐ 2. 查看权限
- 可以使用如下指令查看指定用户所具有的权限。
show grants for '用户名'@'登录地址';
举个栗子
- 查看 oj_client 这个用户所拥有的权限。
⭐ 3. 授予权限
- 可以使用下面的指令给指定用户授权。
grant 权限列表 on 库.对象名 to '用户名'@'登陆地址' [identified by '密码'];
- 权限列表:表示要授予用户什么权限,多个权限之间使用都逗号隔开。
- ‘用户名’@‘登录地址’:表示给哪一个用户授权。
- 库名.对象名:表示要授予给用户哪个数据库下的哪个对象的权限。
- *.*:表示本系统中的所有数据库的所有对象 (表、视图、存储过程等)。
- 库.*:表示某个数据库中的所有数据对象 (表、视图、存储过程等)。
- identified by ‘密码’:可选项,如果指定用户存在,则在授予其权限的同时修改该用户的密码,如果用户不存在,则用这个密码创建该用户。
举个栗子
- 使用 root 创建普通用户 BlackMyth,并让其能够远程登录。
- 使用 root 创建一个 rootdb 数据库。
- 为 rootdb 数据库添加一张测试表,并为其插入数据。
- 使用远程登录 BlackMyth 数据库。
- BlackMyth 这个普通用户看不到 root 创建的 rootdb 数据库。
- 让 root 赋予 BlackMyth 这个用户对 rootdb 数据库下所有对象的 select 权限。
- 此时在远端登录的 BlackMyth 这个用户就能看到 rootdb 这个数据库了。
- BlackMyth 用户对 rootdb 库中的所有对象都只能作 select 查询操作。
⭐ 4. 回收权限
revoke 权限列表 on 库.对象名 from '用户名'@'登陆地址';
- 回收权限的语法结构与授权的语法结构一样,只不过将 to 关键字改成了 from。
举个栗子
- 回收 BlackMyth 这个用户对 rootdb 这个数据的所有权限。
- 此时再查看 BlackMyth 所拥有的权限,可以发现其对 rootdb 下所有对象的 select 权限已经没了。
- 回收了用户对某个数据库的权限后,在该用户下一次进入该数据库时才会起作用。
- 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。