天天看点

mysql权限

mysql权限

1.DCL数据库控制语言

(Data Control Language 数据库控制语言)

  • 数据库授权、角色控制等操作
  • GRANT用户授权,为用户赋予访问权限
  • REVOKE取消权限,撤回授权权限

2.MySQL权限表

2.1mysql.user

  • 用户字段:Host、User、Password
  • 权限字段:_Priv结尾的字段
  • 安全字段:ssl x509字段
  • 资源控制字段:max_开头的字段

2.2mysql.db

  • 权限字段:剩下的_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      

4.3策略

  • 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@'%';      

继续阅读