数据库授权、角色控制等操作
GRANT用户授权,为用户赋予访问权限
REVOKE取消权限,撤回授权权限
用户字段:Host、User、Password
权限字段:_Priv结尾的字段
安全字段:ssl x509字段
资源控制字段:max_开头的字段
用户字段:Host、User、Password
权限字段:剩下的_priv结尾的字段
表、列、存储过程的授权表
mysql.user #全局授权
mysql.db #数据库级别授权
其他#表级,列级授权
数据库.* 数据库中的所有
数据库.表名 指定数据库中的某张表
数据库名.存储过程 指定数据库中的存储过程
*.* 所有数据库
用户名@IP地址 用户名只能在改IP下才能访问
用户名@192.168.1.% 用户名只能在改IP段下才能访问(通配符%表示任意)
用户名@%.123.com
用户名@% 用户可以再任意IP下访问(默认IP地址为%)
//创建用户及权限 > 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‘;
//删除用户 > drop user ‘zhangsan‘@‘192.168.0.%‘; //delete语句删除 > delete from mysql.user where user=‘zhangsan‘ and host=‘localhost‘;
//修改用户 > rename user ‘zhangsan‘@‘192.168.0.%‘ to ‘lisi‘@‘192.168.0.%‘;
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‘);
# vim /etc/my.cnf ... //设置免密码登录 skip-grant-tables # systemctl restart mysqld # mysql > use mysql; > update user set authentication_string=password(‘A.123com‘) where user=‘root‘; //最后配置文件改回来
MySQL默认启用了复杂度设置,插件:validate_password
> install plugin validate_password soname ‘validate_password.so‘
# 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; //查看密码复杂性最短长度
被回收的权限必须存在,否则出错
整个服务器,使用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服务器”的情况下直接生效,那么就需要执行这个命令。
可以简化多次授权,并用逗号分隔
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‘ |
> grant all on *.* to ‘zhangsan‘@‘%‘ identified by ‘1234‘; //密码策略已改 > show grants for zhangsan@‘%‘;
原文:https://www.cnblogs.com/BrokenEaves/p/14615524.html