本文共 2536 字,大约阅读时间需要 8 分钟。
19用户管理
权限表
存储账户权限信息表主要有:user、db、host、tables_priv、columns_priv、procs_priv
20账户管理
创建新用户
create user user_name //create user创建的用户没有任何权限
创建用户名Jeffery 主机名是localhost 密码为 mypass
create user 'jeffrey'@'localhost' identified by 'mypass';
密码的哈希值可以用password()函数获取
mysql>select password('mypass');
grant创建用户并赋予权限
创建一个新用户usertest,对数据中的所有表都有select update的权限
mysql>grant select,update on *.* to 'usertest'@'localhost' identified by 'mypass';
User 表中的user和host是区分大小写的,在查询的时候要指定正确得用户名或主机名。
在user表中直接插入一条数据
insert into mysql.user(Host,User,Password) values('host','user',PASSWORD('aaa'));
删除用户
mysql>drop user 'jeffery' @'localhost';
drop user 不能自动关闭任何打开的用户对话。而且,如果用户有打开的对话,此时取消用户,,命令则不会生效,直到用户对话关闭后才生效。一旦对话关闭,用户也就被取消,再次登录会显示实效。
使用delete 删除用户
mysql>delete from MySQL.user where host='localhost' and user='test';
(1)root用户修改自己的mysql密码
①使用mysqladmin修改
mysql>mysqladmin -u -root -h localhost -password 'rootpwd';
②使用update修改mysql用户的user表
mysql>update mysql.user Password=password('rootpwd') where User='root' and Host='localhhost';
修改完后需要使用flush privileges语句重新加载
③使用set修改root的密码
mysql>SET PASSWORD=password("rootpwd");
为了使修改生效需要重新启动mysql或者使用flush privileges语句重新加载
(2)root用户修改普通用户密码
①使用update修改普通用户的密码
mysql>update mysql.user Password=password('rootpwd') where User='username' and Host='localhhost';
②使用grant修改普通用户的密码
mysql>grant usage on *.* to 'testuser'@'localhost' identified by 'newpwd';
(3)普通用修改自己的密码
③使用set修改密码
mysql>SET PASSWORD=password("rootpwd");
(4)root用户密码丢失解决方法
①使用--skip-grant-tables选项启动mysql服务
mysqld --skip-grant-tables
mysqld-nt --skip-grant-tables
mysqld-safe --skip-grant-tables
/etc/init.d/mysql start -mysqld --skip-grant-tables(Linux下)
21权限管理
(1)授权
①全局层级
限适用于一个给定的服务器中的所有数据库。这些权限都存储在MYSQL.user表中。
grant all on *.* revoke all on *.*
②数据库层级
限适用于一个给定的数据库中的所有目标。这些权限存储在MYSQL.db和MYSQL.host表中。
grant all on db_name.* revoke all on db_name.*
③表层级
限适用于一个给定表中的所有列。这些权限存储在MYSQL.tables_priv表中。
grant all on db_name.table1_name revoke all on db_name.table1_name
④列层级
限适用于一个给定表中的单一列。这些权限存储在MYSQL.columns_priv表中。
当时用revoke时,必须指定与被授权列相同的列。
⑤子程序层级
create routine 、alter routine 、execute和grant适用于已存储的子程序。
除了create routine ,其他的都存储在MYSQL.procs_priv表中。
(2)要使用grant 和 revoke 必须拥有grant option权限。
(3)回收权限
revoke from
mysql>revoke update on *.* from 'testuser'@'localhost';
(4)当mysql从旧版本升到新版本时,execute、create view、show view、create user、create routine和all routine权限,必须首先升级授权表。
(5)查看权限
mysql>show grant for 'user'@'localhost';
22访问控制
用户向mysql发起请求——>mysql检查user表中的权限是否符合(是)——>mysql检查db表中的权限是否符合(是)——>mysql检查tables_priv表中的权限是否符合(是)——>mysql检查columns_prive表中的权限是否符合
转载地址:http://ydsni.baihongyu.com/