mysql5.7与mysql8字符编码区别
5.7这个默认编码是Latin1而 8 则默认是utf8mb4 如果在5.7的环境下插入或者查看带有中文标识的数据会报错
如果开发条件下默认使用5.7环境那么一定要首先更改编码 linux环境下更改my.cnf ,windows下更改my.ini,更改完毕记得重启mysql - 》systemctl restart mysqld.server
这样操作后,以后每次创建表默认的字符集就都是utf8
mysql各级别的字符集
MySQL有四个级别的字符集和比较规则,分别是:
·服务器级别
·数据库级别
·标记别
·列级别
当我们更改server后database字符集也会改变
比较规则
字符集与比较规则都有着对应关系 比如 utf8 对应着 utf8_general_ci
utf8_general_ci 比 utf8_unicode_ci快,精准度较低,平常使用前者即可,如果有其它语言就使用后者
请求到响应的过程中的编码解码
SQL大小写规范
MySQL在Linux下数据库名、表名、列名、别名大小写:
1、数据库名、表名、表的别名、变量名、是严格区分大小写的
2、关键字、函数名称在SQL中不区分大小写
3、列明(或字段名)与列的别名(或字段别名)在所有的情况下均忽略大小写在Windows下全部不区分大小写
所以我们平时创建数据库或者表或者写sql时建议关键字都大写,数据库或者表名创建的时候就不要大写,sql语句以分号结尾
用户密码修改
ALTER USER ‘zhangsan’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123’; #修改加密规则
ALTER USER ‘zhangsan’@‘localhost’ IDENTIFIED BY ‘123’ PASSWORD EXPIRE NEVER; #更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限
用户与权限管理
MySQL用户分为root用户与普通用户来管理用户账号
,mysql提供了很多语句用来管理用户账号,这些语句可以用来管理包括登录和退出MySQL服务器,创建用户、删除用户、密码管理和权限管理等内容。
mysql数据库的安全性需要通过账户管理来保证
·基本登陆服务器
mysql -u root -p
·创建用户
– 注意这里实在mysql数据库中
select host,user from user
– 创建张三用户
create user 'zhangsan'@'localhost' IDENTIFIED by 'abc1238';
·修改用户
修改用户名(就是在mysql库中user表中修改字段) update user set user = ‘lisi’ whereuser
= ‘zhangsan’
修改之后记住要flush privileges
(刷新权限)
·删除用户
同修改,只不过是
drop user 'zhangsan'
或者delete user where user = 'zhangsan'
权限管理
就是MySQL允许你做你权限以内的事情,不可以越界,允许你查那你就不能改;只允许你从指定机器上连接就不许从其它机器上连接
权限列表
show PRIVILEGES
权限分布 | 可能的设置的权限 |
---|---|
表权限 | ‘select’;‘insert’,‘update’,‘delete’;‘create’,‘drop’,‘grant’,‘references’,‘index’,‘alter’ |
列权限 | ‘select’,‘insert’,‘update’,‘references’ |
过程权限 | ‘rxecute’,‘alter’,‘routine’,‘grant’ |
授予权限的原则
权限控制主要是出于安全因素,因此需要遵循以下几个经验原则
1.只授予能满足需求的最小权限
,放指用户干坏事。比如用户只需要查询,那就只给select权限
2.创建用户的时候限制用户的登录主机,一般是限制成指定ip或者内网ip段
3.为每个用户设置满足密码复杂度的密码
4.定期清理不需要的用户
,回收权限或者删除用户
授予权限
给用户授权的方式有两种,分别是通过把`角色赋予用户给用户授权和直接给用户授权。用户是数据库的使用者,我们可以通过给用户授权访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全隐患
授权方法
1.命令方式(我不喜欢)例如 grant all PRIVILEGES on * . * to ‘zhangsan’@’%’; #给所有数据库下所有的表权限给张三
2.直接通过可视化工具修改
可以看到张三用户啥权限都没有,所以只能靠到这一个,并且只能查,其他操作会报错
查看权限
SHOW GRANTS
或者show grants for current_uesr;
或者show grants for current_uesr();
查看某个用户全局权限
SHOW GRANTS FOR 'user'@'主机地址';
权限回收:就是取消已经赋予用户的某些权限,
收回用户不必要的权限可以在一定程度上保证系统的安全性
;mmysql中使用REVOKE
取消用户的某些权限,使用revoke收回权限之后,用户账号的记录将从db、host、tables_priv和columns_priv表中删除,但是用户账号记录仍然在user表中保存
注意:在将用户账户从user表中删除之前,应该回收响应用户的所有权限
老规矩,还是习惯之前的可视化工具操作
权限表:mysql服务器通过
权限表
来控制用户对数据库的访问,权限表存放在mysql数据库中。mysql数据库系统会根据这些权限表的内容为每个用户赋予相应的权限。这些权限表中最重要的是user表、db表、除此之外还有table_priv表、column_priv表和proc_priv表
等。在mysql启动的时候,服务器将这些数据库表中权限信息内容读入内存。
表名 | 描述 |
---|---|
user | 用户账号及权限 |
global_grants | 动态全局授权 |
db | 数据库层级的权限 |
tables_priv | 表层级的权限 |
columns_priv | 列层级权限 |
procs_priv | 存储过程和函数权限 |
proxics_priv | 代理用户权限 |
以上表都可以去mysql库中查看
访问控制