mysql用户管理
DCL(Data Control Language,数据控制语言):用于定义数据库的访问权限和安全级别,主要包含GRANT、REVOKE、COMMIT和ROLLBACK等语句。
mysql用户管理主要涉及到用户的增删改查与权限管理
mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表
权限表的验证过程
- 先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db,
tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
MySQL 权限级别
全局性的管理权限: 作用于整个MySQL实例级别 数据库级别的权限: 作用于某个指定的数据库上或者所有的数据库上
数据库对象级别的权限:作用于指定的数据库对象上(表、视图等)或者所有的数据库对象上
用户操作
1 | # 创建用户 |
1 | # 删除用户 |
1 | # 修改用户 |
1 | # 删除用户 |
user_name:用户名
host :可允许连接ip(Localhost代表本机, 127.0.0.1代表ipv4本机地址, ::1代表ipv6的本机地址,)
password:用户密码
权限管理
权限可细分为操作权限与操作范围
常用权限介绍
1 | ALL: SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE |
权限作用范围
1 | *.* ---->所有:管理员用户 |
开发人员用户授权流程
- 你从哪来
- 对谁操作
- 权限
- 密码要求
权限
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限
1 | # 查看MYSQL有哪些用户 |
1 | # 授权 |
**all privileges:**表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
**on:*表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“
”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:
将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”payne”@”192.168.0%”,表示yangxin这个用户只能在192.168.0IP段登录
**•identified by:**指定用户的登录密码
**•with grant option:**表示允许用户将自己的权限授权给其它用户
1 | # 收回权限 |
如何授权
用户的权限一定是与业务分离不开的,但通常普通用户会
- 禁用删除权限
- 规定范围
如何做好用户管理
- 密码系数足够高
- root禁用远程登录
- 分级别,类似于公司管理。
注意
1 | 8.0在grant命令添加新特性 |
- 执行Grant,revoke,set password,rename user命令修改权限之后, MySQL会自动将修改后的权限信息同步加载到系统内存中
如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括: flush privileges
/mysqladmin flush-privileges /
mysqladmin reload
- 如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效
- 如果是修改database级别的权限,则新权限在客户端执行use database命令后生效
- 如果是修改global级别的权限,则需要重新创建连接新权限才能生效
- 如果是修改global级别的权限,则需要重新创建连接新权限才能生效 (例如修改密码)
mysql user表
名字 | 类型 | Null | 主键 | 默认 | ||
---|---|---|---|---|---|---|
Host | char(255) | NO | PRI | |||
User | char(32) | NO | PRI | |||
Select_priv | enum(‘N’,‘Y’) | NO | N | |||
Insert_priv | enum(‘N’,‘Y’) | NO | N | |||
Update_priv | enum(‘N’,‘Y’) | NO | N | |||
Delete_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_priv | enum(‘N’,‘Y’) | NO | N | |||
Drop_priv | enum(‘N’,‘Y’) | NO | N | |||
Reload_priv | enum(‘N’,‘Y’) | NO | N | |||
Shutdown_priv | enum(‘N’,‘Y’) | NO | N | |||
Process_priv | enum(‘N’,‘Y’) | NO | N | |||
File_priv | enum(‘N’,‘Y’) | NO | N | |||
Grant_priv | enum(‘N’,‘Y’) | NO | N | |||
References_priv | enum(‘N’,‘Y’) | NO | N | |||
Index_priv | enum(‘N’,‘Y’) | NO | N | |||
Alter_priv | enum(‘N’,‘Y’) | NO | N | |||
Show_db_priv | enum(‘N’,‘Y’) | NO | N | |||
Super_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_tmp_table_priv | enum(‘N’,‘Y’) | NO | N | |||
Lock_tables_priv | enum(‘N’,‘Y’) | NO | N | |||
Execute_priv | enum(‘N’,‘Y’) | NO | N | |||
Repl_slave_priv | enum(‘N’,‘Y’) | NO | N | |||
Repl_client_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_view_priv | enum(‘N’,‘Y’) | NO | N | |||
Show_view_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_routine_priv | enum(‘N’,‘Y’) | NO | N | |||
Alter_routine_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_user_priv | enum(‘N’,‘Y’) | NO | N | |||
Event_priv | enum(‘N’,‘Y’) | NO | N | |||
Trigger_priv | enum(‘N’,‘Y’) | NO | N | |||
Create_tablespace_priv | enum(‘N’,‘Y’) | NO | N | |||
ssl_type | enum(‘’,‘ANY’,‘X509’,‘SPECIFIED’) | NO | ||||
ssl_cipher | blob | NO | NULL | |||
x509_issuer | blob | NO | NULL | |||
x509_subject | blob | NO | NULL | |||
max_questions | int unsigned | NO | 0 | |||
max_updates | int unsigned | NO | 0 | |||
max_connections | int unsigned | NO | 0 | |||
max_user_connections | int unsigned | NO | 0 | |||
plugin | char(64) | NO | caching_sha2_password | |||
authentication_string | text | YES | NULL | |||
password_expired | enum(‘N’,‘Y’) | NO | N | |||
password_last_changed | timestamp | YES | NULL | |||
password_lifetime | smallint unsigned | YES | NULL | |||
account_locked | enum(‘N’,‘Y’) | NO | N | |||
Create_role_priv | enum(‘N’,‘Y’) | NO | N | |||
Drop_role_priv | enum(‘N’,‘Y’) | NO | N | |||
Password_reuse_history | smallint unsigned | YES | NULL | |||
Password_reuse_time | smallint unsigned | YES | NULL | |||
Password_require_current | enum(‘N’,‘Y’) | YES | NULL | |||
User_attributes | json | YES | NULL |