mysql权限
1.DCL数据库控制语言
-
数据库授权、角色控制等操作
-
GRANT用户授权,为用户赋予访问权限
-
REVOKE取消权限,撤回授权权限
2.MySQL权限表
2.1mysql.user
-
用户字段:Host、User、Password
-
权限字段:_Priv结尾的字段
-
安全字段:ssl x509字段
-
资源控制字段:max_开头的字段
2.2mysql.db
-
用户字段:Host、User、Password
-
权限字段:剩下的_priv结尾的字段
2.3mysql.tables_priv,mysql.columns_priv、procs_priv
-
表、列、存储过程的授权表
2.4授权级别排列
-
mysql.user #全局授权
-
mysql.db #数据库级别授权
-
其他#表级,列级授权
2.5数据库和表格式
数据库.* 数据库中的所有
数据库.表名 指定数据库中的某张表
数据库名.存储过程 指定数据库中的存储过程
*.* 所有数据库
2.6用户和IP格式
用户名@IP地址 用户名只能在改IP下才能访问
用户名@192.168.1.% 用户名只能在改IP段下才能访问(通配符%表示任意)
用户名@%.123.com
用户名@% 用户可以再任意IP下访问(默认IP地址为%)
3.MySQL用户管理
3.1创建用户
//创建用户及权限 > create user 'zhangsan'@'localhost' identified by 'A.123com'; > grant all on *.* to 'zhangsan'@'192.168.0.%' identified by 'A.123com'; > select user,host from mysql.user; # mysql -h192.168.0.2 -uzhangsan -p'A.123com';
3.2删除用户
//删除用户 > drop user 'zhangsan'@'192.168.0.%'; //delete语句删除 > delete from mysql.user where user='zhangsan' and host='localhost';
3.3修改用户
//修改用户 > rename user 'zhangsan'@'192.168.0.%' to 'lisi'@'192.168.0.%';
3.4修改密码
3.4.1root修改密码
> flush privileges; //方法一 # mysqladmin -uroot -p'A.123com' password 'A.1234com' //方法二 > alter user 'root'@'localhost' identified by 'A.123com'; //方法三 > SET PASSWORD=password('A.123com');
3.4.2root修改其他用户密码
> alter user 'zhangsan'@'192.168.0.%' identified by 'A.123com'; > grant select on *.* to 'zhangsan'@'192.168.0.%' identified by 'A.123com';
3.4.3普通用户修改自己密码
> set password=password('A.123com');
3.5root找回密码
# vim /etc/my.cnf ... //设置免密码登录 skip-grant-tables # systemctl restart mysqld # mysql > use mysql; > update user set authentication_string=password('A.123com') where user='root'; //最后配置文件改回来
4.密码策略
4.1安装密码插件
-
MySQL默认启用了复杂度设置,插件:validate_password
> install plugin validate_password soname 'validate_password.so'
4.2修改配置文件
# vim /etc/my.cnf [mysqld] plugin-load=validate_password.so balidate_password_policy=0 validate-password=FORCE_PLUS_PERMANENT
-
validate_password_policy
-
代表的密码策略,可配置的值有以下:默认MEDIUM
-
0 or LOW仅需符合密码长度(由validate_password_length指定)
-
1 or MEDIUM满足LOW策略通知还需要满足至少1个数字,小写字母,大写字母和特殊字符
-
2 or STRONG满足MEDIUM策略,同时密码不能存在(与字典密码相同)字典文件(dictionary file)中
-
-
validate_password_dictionary_file
-
用于配置密码的字典文件,当validate_password_policy设置为STRONG时可以配置密码字典文件,字典文件存在的面不得使用。
-
-
validate_password_length
-
用来设置密码的最小长度,默认值是8,最小是4
-
-
validate_password_mixed_case_count
-
大小写的最小个数
-
-
validate_password_number_count
-
密码中数字的最小个数
-
-
validate_password_special_char_count
-
特殊字符的最小个数
-
> show variables like 'validate%'; //查看密码策略规则 > set global validate_password_length=1; //至少为4位 > set global validate_policy=0; //关闭密码复杂度 > grant all on *.* to 'zhangsan'@'%' identified by '1234'; > flush privileges; > select @@validate_password_policy; //查看密码复杂性策略 LOW > select @@validate_password_length; //查看密码复杂性最短长度
5.权限回收
-
被回收的权限必须存在,否则出错
-
整个服务器,使用GRANT ALL和REVOKE ALL;
-
整个数据库,使用ON datebase.*
-
特定的表:使用ON datebase.table
> show grants for 'zhangsan'@'%'; //查看用户权限 GRANT SELECT,INSERT,... ON *.* to 'zhangsan'@'%' > revoke select on *.* from 'zhangsan'@'%'; //回收select > revoke all on *.* from 'zhangsan'@'%'; //回收所有权限 > show grants for 'zhangsan2'@'%'; GRANT ALL PRIVILEGES ON `test`.* to 'zhangsan2'@'%' > revoke select,insert on test.* from zhangsan2@'%'; > show grants for 'zhangsan2'@'%'; //select,insert被去掉 GRANT UPDATE,... ON `test`.* to 'zhangsan2'@'%' > flush privileges;
-
flush privileges是将当前user和privilege表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
-
MySQL用户数据和权限有修改后,搜索希望在“不重启MySQL服务器”的情况下直接生效,那么就需要执行这个命令。
6.授权及设置密码
6.1授权及设置密码
-
可以简化多次授权,并用逗号分隔
-
GRANT需要明确一下信息
-
要授予的权限
-
被授予权限的数据库或表
-
用户名
-
权限 | 权限级别 | 权限说明 |
---|---|---|
CREATE | 数据库、表或索引 | 创建数据库、表或索引权限 |
DROP | 数据库或表 | 删除数据库或表权限 |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 |
PEFERENCES | 数据库或表 | |
ALTER | 表 | 更改,比如添加字段、索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
---|---|---|
CREATE VIEW | 视图 | 创建试图权限 |
SHOW VIEW | 视图 | 查看视图权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程权限 |
EXECUTE | 存储过程 | 执行存储过程权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPOPARY TABLE | 服务器管理 | 创建临时表权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户权限 |
RELOAD | 服务器管理 | 执行flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,flush-threads,refresh,reload等命令的权限 |
PROCESS | 服务器管理 | 查看进程权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务期管理 | 执行kill线程权限 |
权限分布 | 设置的权限 |
---|---|
表权限 | 'select','Insert','Update','Delete','Create','Drop','Grant','References','index','Alter' |
列权限 | 'Select','Insert','Update','References' |
过程权限 | 'Execute','Alter Routine','Grant' |
6.2实例
> grant all on *.* to 'zhangsan'@'%' identified by '1234'; //密码策略已改 > show grants for zhangsan@'%';