管理MYSQL数据库
- MYSQL允许授权用户连接到MYSQL服务器 可以访问和操作数据库的数据
- 用户需要有效的用户账户。
- 你需要创建此类用户账户、授权他们一些权限、 重命名账户和密码、定期删除一些账户///等等操作
创建用户账号
-
根据用户名和主机定义。可能跟密码相关联
-
主机名是用户连接到数据库的机器。用户名+主机=账户名
初始用户集: 是在系统安装MYSQL时 自动创建的用户。
- Superuser account:超级用户 ——>root用户。就是你自己
- Anonymous accounts: 匿名用户。
创建新的用户:
-
create user
-
账户名 = ‘用户名’@‘主机名’
-
如果没有@主机 **则默认是’%‘ ** 就是用户可以通过任何主机连接到mysql服务器。
localhost表示本机
-
密码可有可无。 设密码后会自动加密。
-
默认这个用户没有任何权限
-
/*语法*/
create user 账户名 【identified by 密码】
/*三个例子*/
-- 第一种创建用户带主机名和密码
create user 'chang'@'localhost' identified by '123';
-- 第二种 创建用户不带主机
create user 'jia' identified by '123';
-- 第三种 可以没有密码
create user 'le'@'localhost';
可以使用如下语句查看用户
-- 查看用户详细信息
select * from mysql.user;
-- 查看用户表的属性
describe mysql.user;
-
insert
-
可以直接在授权表中插入user信息创建账户
-
要注意执行 flush privileges 重新加载所以授权表。
目的是永久储存对授权表所做的更改。
如果insert后 没有立即执行, 则不会反映更改信息 直到重启mysql才可以。
-
十分麻烦 没有create好用
-
-- 要写明列和插入的值 没有默认值的列在插入时必须规定值
insert into mysql.user(host, user, ssl_type, ssl_cipher, x509_issuer, x509_subject, authentication_string)
values('localhost', 'j', '', '', '', '', '123');
修改用户账户和密码
- 为了保护数据安全 需要经常更改用户的名字 和密码
-
更改用户的账户
rename to 可以更改用户名字和主机名
注意如果用户有确定的主机 则必须带主机名字
/*语法*/ rename olduser to newuser; -- to用户名如果不带@主机 则默认改为% -- 完整的应该是 Username@Host 但是因为jia没有确定的主机 所有不需要@ rename user 'jia' to 'j'@'localhost';
-
更改密码
- set password
- 可以为账户设置新密码 和 修改密码
- 如果没有指定哪个账户 则默认是当前账户
- 密码会自动加密
- update
- 不能为没有密码的更改密码。
- 直接在授权表中修改
- 修改的密码不会加密
-- 改变用户密码 两种方式 -- 第一种更加安全 for...是可选句子 也可以不指定 直接 = set password for 'jia'@'localhost'='12345'; -- 密码不会加密 update mysql.user set authentication_string='123' where User='jia' and Host='localhost';
- set password
删除用户账户
- 账户不存在 需要把他删除掉
- 自动删除分配的权限
两种方法:
- drop User
- 对有create user和delete权限的用户可以执行drop
- delete
- 直接修改了授权表
- 执行后立即执行flush priviliges
SET SQL_SAFE_UPDATES = 0;
-- 如果这个user有确定的某个主机 一定要带上主机名
delete from mysql.user where user='jia' and host='localhost';
drop user 'jia'@'localhost';
管理用户权限
- 用create user和insert语句后并没有设置权限
- 所以需要分配权限以管理用户对数据库的访问
- 也可以撤销一些用户的权限
授予权限
- grant 权限 on 表 to 账户
-- 允许chang用户执行select操作在sakila任何表
grant select on sakila.* to 'chang'@'localhost';
-- 允许jia这个用户可以在sakila所有表中执行....操作
grant select,update,insert, delete, create, alter on sakila.* to 'jia'@'localhost';
注意
- 若是 * . *: 表示指定用户对mysql所有数据库的所有表拥有设置的权限
- 若是*:表示指定用户 对当前数据库的所有表拥有设置的权限
- 若是 数据库名字.* : 表示对特定数据库的所有表
- 也可以只有表名: 用户只对该表有此权限
- 可以指定特定列名: 表示只对该列有权限
- 可以用all 赋予所有权限
-
查看授权
show grant
-- 显示权限 show grants for 'jia'@'localhost';
撤销权限
revoke: 可以撤销全部或者部分权限
-- 撤销权限
revoke select,update,insert, delete, create, alter on sakila.* from 'jia'@'localhost';