赞
踩
1.权限表
MySQL 是一个多用户的数据库,MySQL的用户可以分为两大类:
(1).超级管理员用户(root),拥有全部权限
(2).普通用户,由root创建,普通用户只拥有root所 分配的权限
1.1 权限表的位置
数据库:MySQL
与权限相关的数据表:user,db,host,tables_priv,columns_privs,procs_priv等
1.2 user表
user表存储了:
(1)用户的信息:host(用户所在的主机),user(用户名),password(密码)
(2)用户的权限信息:_priv
(3)安全相关的信息:ssl_,x509,记录用户登录的验证操作等
(4)与资源分配相关的信息:max_,
max_questions 表示用户在一个小时内最多可以进行的查询次数。
max_update表示一个用户在一个小时内最多进行的更新次数,也包括增加数据、删除数据。
max_connections:表示用户最多可以建立的连接数。
1.2.1 user表的内容
(1)host列
localhost 表示本机的用户或者超级管理员
%表示任何主机上的root用户
说明:_priv权限是全局权限,不受数据库的范围限制。
1.3 DB表
(1)与用户相关的字段:hots(用户所在的主机),user(用户名)
(2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。
1.4 host表
(1)与用户相关的字段:hots(用户所在的主机)
(2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。
说明:
(1)记录主机上的用户对数据库拥有的权限,侧重点在主机,而不在用户。
(2)Host表的优先级大于DB表,如果db 表规定这个用户没有权限,但是host表规定了这台主机的用户权限,那么db的这个用户也是拥有权限的。
1.5tables_priv表
设定了用户对某个表拥有的权限,该表记录了用户的信息,以及某个表的权限信息table_priv(select,insert,alter等等),以及表上的某个列的权限信息column_priv。
1.6 coiumn_priv表
记录某用户对某表的某个列所拥有的权限
1.7procs_priv
规定了用户关于存储过程及存储函数的操作权限,主要字段:proc_priv
2.创建数据库用户2
2.1 创建普通用户
create user "用户名称" [@“主机名称”]
eg:
create user "user1";
验证是否创建成功:
说明:host字段的%表示不受任何主机的限制。
(2)创建待密码的用户
create user 'user3' @'localhost' [indentifidy by '用户密码'];
eg:
create user 'user3' @'localhost' [indentified by '123';
验证:
说明:密码是哈希码的形式显示的
2.1.2 使用grant来创建用户,以及授予权限
grant 是用来给用户授权的,但是也可以用来创建用户,grant在给用户进行授权的时候,如果用户是不存在的,那么grant会自动创建这个用户,然后再给这个用户授权。
(1)添加权限
grant 权限 on 数据库.表 to ‘用户名’@‘登录主机’[indentified by '用户密码'];
权限:select ,update ,delete,insert ,create,alert,drop(表结构)、references(外键)、create temporary tables (创建临时表)、index(索引操作) 、create view ,show view (视图)、create routine |alert routine ,execute(存储过程)、all 、all privileges(所有权限)
数据库:数据库名或者*(所有数据库)
表:表名或者*(某数据库下的所有表),*.*表示所有数据库的所有表
主机:主机名或者%(任何其他主机)
eg: grant select ,insert,update,delete on *.* to 'dxc' @'%';
grant select on *.* to 'user4' @'localhost' identified by '123';
(2)为用户授予指定数据库、指定表、制定列的权限:
grant update(cid,cname) on mysqlpart2.custom to 'user3' @'localhost';
授权成功以后,可以在以下表中查看授权信息:
数据库:MySQL 》表 : tables_priv "Table privileges"
数据库:MySQL 》表:coiumns_priv "Column privilgges"
(3)用户权限表
位置:数据库: information_schema 》 表 user_privileges
表的说明:
grantee: 授权者
privilege_type:权限名称
用户表:数据库: mysql »表: user "Users and global privileges"
说明:user表中,”_priv”的值域USER_PRIVILEGES表的PRIVILEGE_TYPE的值是一一对应的。
(4)权限的层级关系
a.权限的层级关系,就是指权限的适用范围。
b.权限的最高层级是全局级,所谓全局级就是可以在任何数据库的任何数据表上进行操作。
c.数据库级:只能在某个数据库上进行操作。
d.列级:权限信息所在位置:数据库:》MySQL 表:columns_priv"Column privileges;
e.子程序级:数据库:MySQL 》 表 :procs_priv "Procedure privilges"
(5)撤销信息
revoke 权限 on 数据库.表 from '用户名' @‘登录主机’;
说明 :赋权与撤销权限的区别,就是revoke 是将to 改为 from ;
eg :
revoke update (cid,cname) on mysqlpart2.custom from 'user3' @'localhost';
(6)查看权限
show grants; // 自己
show grants for 用户名称 @主机名称;
eg;
show grants for dba@localhost ; // 指定用户指定host
说明:所有SHOW关键字后面的词都是复数,所有CREATE关键字后面的词都是单数。
通过mysql.columns_priv 表来查看权限:
select * from mysql.columns_priv where user='user3' and host='localhost';
2.1.4 CREATE USER 与GRANT 两种方式创建用户的区别
a.CREATE USER 创建用户的优点:语法简单
b.create user 创建用户的不足:用户无权限
c.grant 创建用户的优势:创建用户有权限
d.grant 创建用户的不足:语法较 create user 繁琐
3.删除MySQL 的用户
delete from mysql.user where user ='用户名称’and host='主机名称';
eg:
delete from mysql.user where user='user3' and host='localhost';
删除后使用:flush privileges 来刷新权限。
说明:使用delete 删除用户后,必须使用flush privileges 来刷新权限,否则将无法继续创建用户名与已删用户的用户名相同的用户,即使在user表中看不到已删的用户,如果不刷新权限,也是无法再新建的。
4.修改用户密码
update mysql.user set password=PASSWORD('新密码') where user='用户名' [and host='主机名']
注意:
(1)如果不加where条件,则会把所有用户的密码都修改为‘新密码’
(2)密码修改成功后,需要进行权限刷新操作才能生效,flush privileges;
(1).修改密码的权限
ROOT用户可以修改自己的密码,也可以修改其他用户的密码
其他用户只能修改自己的密码。
(2)PASSWORD函数
用于把密码明文进行加密,所得到的密码为原密码的哈希值。
(3)ROOT用户、普通用户修改自己的密码
set password=password('新密码')
(4)root用户为其他用户修改密码:
set password for '用户名称' @‘主机名称’=password('新密码')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。