MySQL中权限管理

权限管理

MySQL权限系统通过下面两个阶段进行认证:

  • 对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接。
  • 对通过认证的合法用户授予相应的权限,用户可以通过再这些权限范围内对数据库做相应的操作。

    在权限存取过程中,主要涉及到mysql数据库下user表和db表。user表的数据结构如下:

    db表数据结构如下:

    表的说明:其中包含用户列、权限列、安全列和资源控制列。用的最频繁的是用户列和权限列,权限分为普通权限和管理权限。普通权限用户数据库的操作如select_priv、insert_priv等。管理权限主要用来对数据库进行管理的操作,比如process_priv、super_priv等。

    用户进行连接的时候,权限表的存取过程:

  • 先从user表中的host、user和password这三个字段中判断连接的ip、用户名以及密码是否存在表中,如果存在,则通过验证,否则拒绝连接。
  • 通过身份验证之后,按照以下权限表的顺序得到数据库权限:user->db->tables->priv->columns_priv。全局权限,覆盖局部权限。比如一个用户在user表中拥有选择权限,那么他将对所有数据中的所有表所有的列都有选择权限。

    权限查找详细描述:当用户通过权限认证之后,进行权限分配时候,按照user->db->tables_priv->columns_priv的顺序进行权限分配,即先检查权限表user,如果user表中对应的权限为Y,此时用户对应所有的数据库权限为Y,将不再检查db、tables_priv、columns_priv;如果为N,则到db表中进行查找用户对于具体数据库权限,如果得到db中的Y权限,则不在查找,否则检查tables_priv,看该数据库对应的具体表权限,如果为Y,则不在查找,否则检查columns_priv表,查看对应的具体列权限。这一点对于我们授予用户权限很重要。

账号管理

创建用户

创建用户,可以使用grant语法创建或者直接操作user表。

方法一:

直接操作use表

insert into user(Host,User,Password) values(“127.0.0.1”,”test”,password(“51testit”));

方法二:

格式 CREATE USER ‘username’@’host’ IDENTIFIED BY ‘password’;

eg:CREATE USER ‘test’@’127.0.0.1’ IDENTIFIED BY ‘51testit’;

创建之后,登录如下:

MySQL加密方式: MYSQL323加密中生成的是16位字符串,而在MySQLSHA1中生存的是41位字符串,其中是不加入实际的密码运算中,通过观察在很多用户中都携带了”“,在实际破解过程中去掉”*”,也就是说MySQLSHA1加密的密码的实际位数是40位。

Host字段描述

  • Host值可以是主机名或者IP号,或者locahost代表本地主机。
  • 可以再host列值前面使用通配符”%”和”_”,”%”代表匹配任何主机,空的Host值等于”%”。如”%.myweb.com”,匹配所有mysql.com域的所有主机。案例如下:
Host User 解析
myweb.wang pps pps,从myweb.wang连接
% pps pps,从任何主机连接
% 任何用户,从任何主机连接
122.164.35.127 pps pps,从122.164.35.127连接
122.164.35.% pps pps,从122.164.35.类型子网的任何主机连接

查看用户权限

对于上面创建的test,我没有进行任何授权操作,当我使用test用户去操作数据库时候,发现:

没有数据库操作权限,怎样才能查看用户拥有的权限呢?

查看权限

方法一:

show grants for [email protected];

方法二:

查看user表中记录的权限。

select * from mysql.user where user=’test’ and host=’127.0.0.1’ \G;

授予权限

语法格式如下:

grant [privilege1|privilege2|all privileges] on dbName|.tableName 或 to [email protected] ;

当给test用户授予xxpt选择权限时候:

grant select On xxpt.* to test.127.0.0.1;

db表发生了变化,新增加一条记录。但是user表并没有改变。如下:

此时,可以使用test用户进行数据查询操作,但是不能进行增、删、改。于是授予其关于xxpt数据库的所有权限。

grant all privileges on xxpt.* to [email protected];

用户test权限如下:

此时可以更新数据

管理权限sueper、process、file授予

grant sueper,process,file On . to ‘test’@’127.0.0.1’;

语句中on后面只能是.

备注:usage 权限用于登录,不能进行任何操作。

删除权限

使用grant新增权限,使用revoke进行权限回收。当然回收权限,也可以直接对user、db、tables_priv和columns_priv表进行操作。但是usage权限是没法收回的。

如回收test对所有数据库的读写权限:

revoke select ,insert on . from [email protected];

修改密码

1.使用mysqladmin

2.使用set password for [email protected] =password(‘isayhello’);

3.通过grant usage

grant usage on . to ‘test’@’127.0.0.1’ identified by ‘isayhello’;

4.直接修改user表

update user set Password=password(“newpassword”) where ***;

补充mysql中权限


权限


权限级别


权限说明


CREATE


数据库、表或索引


创建数据库、表或索引权限


DROP


数据库或表


删除数据库或表权限


GRANT OPTION


数据库、表或保存的程序


赋予权限选项


REFERENCES


数据库或表


ALTER



更改表,比如添加字段、索引等


DELETE



删除数据权限


INDEX



索引权限


INSERT



插入权限


SELECT



查询权限


UPDATE



更新权限


CREATE VIEW


视图


创建视图权限


SHOW VIEW


视图


查看视图权限


ALTER ROUTINE


存储过程


更改存储过程权限


CREATE ROUTINE


存储过程


创建存储过程权限


EXECUTE


存储过程


执行存储过程权限


FILE


服务器主机上的文件访问


文件访问权限


CREATE TEMPORARY TABLES


服务器管理


创建临时表权限


LOCK TABLES


服务器管理


锁表权限


CREATE USER


服务器管理


创建用户权限


PROCESS


服务器管理


查看进程权限


RELOAD


服务器管理


执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限


REPLICATION CLIENT


服务器管理


复制权限


REPLICATION SLAVE


服务器管理


复制权限


SHOW DATABASES


服务器管理


查看数据库权限


SHUTDOWN


服务器管理


关闭数据库权限


SUPER


服务器管理


执行kill线程权限

MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:


权限分布


可能的设置的权限


表权限


‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’


列权限


‘Select’, ‘Insert’, ‘Update’, ‘References’


过程权限


‘Execute’, ‘Alter Routine’, ‘Grant’

时间: 2024-08-25 04:38:25

MySQL中权限管理的相关文章

mysql的权限管理

mysql的权限管理1.授权的基本原则   只授予满足要求的最小权限,但要注意使用户能够授权给别的用户(with grant option)   对用户设置登录的主机限制   删除没有密码的用户   满足密码的复杂度,设置较为复杂的密码   定期检查用户的权限,适当收回不需要的权限   2.给用户授权  mysql> grant all on *.* to 'root'@'10.0.5.150' identified by 'aixocm';  mysql> flush privileges;

Mysql用户&权限管理

1.创建用户(相关表mysql.user) localhost root 本机 127.0.0.1  root 本机 ::1 root 本机 % cheng 远程用户(任意ip) 192.168.1.55 jake 远程用户(指定ip) 1).创建本地用户(只能在本机登陆本机数据库) create user 'cheng'@'localhost' identified by '123456';指定密码"123456". insert into mysql.user(Host,User,

MySQL数据库权限管理

Mysql数据库的运维主要包括用户权限的设置,数据库的备份与恢复.一.授予权限GRANT 权限列表 ON 库名.表名 TO 用户名@来源地址 {IDENTIFIED BY '密码'}br/>使用GRANT语句时,需要注意的事项如下.1.权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔2.库名.表名:用于指定授权操作的库和表的名称3.用户名@来源地址:用于指定用户名称和允许访问的客户机地址4.IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串 二.查看权限SHOW G

MySQL之权限管理

MySQL权限简介 权限简单的理解就是mysql允许权力以内的事情,不可越界.比如只允许执行select操作,那么就不能执行update操作.只允许从某台机器上连接mysql,那么就不能从除那台机器以外的其他机器连接mysql. 那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍: 第一阶段:服务器首先会检查是否允许连接.因为创建用户的时候会加上主机限制,可以限制成本地.某个IP.某个IP段.以及任何地方等,只允许从配置的指定地方登陆. 第二阶段:如果能连接,My

mysql用户权限管理

mysql数据在实际生产环境中大量被使用,那平时在做好服务器上防火墙策略以外平时,对mysql下的用户权限也要严格管理,mysql的用户权限都是放在mysql.user这张表里,平时的用户权限管理都是隐式使用着这张表的,先说下权限: 权限 意义 select 查询 insert 插入 update 更新 delete 删除记录,一般用于清空表或者某一条记录 create 创建 drop 删除,从表空间里删除 grant 授予,一般用于给用户授权 references 引用 index 索引 al

Mysql grant权限管理

MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 [identified by '密码'] 最常用的,弄主从同步的时候,给从库的slave用户设置拥有所有权限,权限all 仅允许其从192.168.0.2登录,并限定使用密码 funsion (密码要用 单/双引号 括起来) grant all on *.* to slave@192.168.0.2 identified by 'funsion'; 执行完毕后,记得用 FLUSH PRIVILEGE

[MySQL]MySQL之权限管理

一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执行update操作.只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql. 那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍:第一阶段:服务器首先会检查你是否允许连接.因为创建用户的时候会加上主机限制,可以限制成本地.某个IP.某个IP段.以及任何地方等,只允许你从配置的指定

MYSQL用户权限管理学习笔记

MYSQL 用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1)       超级管理员用户(root),拥有全部权限 (2)       普通用户,由root创建,普通用户只拥有root所分配的权限 1.1 权限表的位置 数据库:mysql 与权限相关的数据表:user,db,host,tables_priv,columns_priv,procs_priv等 1.2 user表 User表存储了: (1)用户的信息:hots(用户所在的主机),user

mysql 用户权限管理详细

用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user  zx_root   IDENTIFIED by 'xxxxx';   //identified by 会将纯文本密码加密作为散列值存储 修改 mysql>rename   user  feng  to   newuser://mysql 5之后可以使用,之前需要使用update 更新user表 删除