Mysql用户管理;权限管理;远程工具访问;大小写问题;sql—mode
1.创建用户
create user zhang3 identified by '123123';
表示创建名称为zhang3的用户,密码设为123123;
2.查看用户
select host,user,password,select_priv,insert_priv,drop_priv from mysql.user;
host : 表示连接类型
% 表示所有远程通过 TCP方式的连接IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定ip地址进行的TCP方式的连接
机器名 通过制定i网络中的机器名进行的TCP方式的连接
::1 IPv6的本地ip地址 等同于IPv4的 127.0.0.1
localhost 本地方式通过命令行方式的连接 ,比如mysql -u xxx -p 123xxx 方式的连接。
User:表示用户名
同一用户通过不同方式链接的权限是不一样的。
password : 密码
所有密码串通过 password(明文字符串) 生成的密文字符串。加密算法为MYSQLSHA1 ,不可逆 。mysql 5.7 的密码保存到 authentication_string 字段中不再使用password 字段。
select_priv , insert_priv等
为该用户所拥有的权限。
修改当前用户的密码:
set password =password('123456')修改某个用户的密码:
update mysql.user set password=password('123456') where user='li4';flush privileges; #所有通过user表的修改,必须用该命令才能生效。
删除用户
drop user li4 ;
不要通过delete from user u where user='li4' 进行删除,系统会有残留信息保留
权限管理
授予权限
授权命令:grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
该权限如果发现没有该用户,则会直接新建一个用户。
比如
grant select,insert,delete,drop on atguigudb.* to [email protected] ;
#给li4用户用本地命令行方式下,授予atguigudb这个库下的所有表的插删改查的权限。
grant all privileges on *.* to [email protected]'%' identified by '123';
#授予通过网络方式登录的的joe用户 ,对所有库所有表的全部权限,密码设为123.
远程连接root;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
操作完成之后要执行刷新的操作:
flush privileges;
收回权限
查看当前用户权限
show grants;收回权限命令:
revoke 权限1,权限2,…权限n on 数据库名称.表名称 from 用户名@用户地址 ;
REVOKE ALL PRIVILEGES ON mysql.* FROM [email protected];
#收回全库全表的所有权限
REVOKE select,insert,update,delete ON mysql.* FROM [email protected];
#收回mysql库下的所有表的插删改查权限
必须用户重新登录后才能生效
查看权限
查看当前用户权限
show grants;
查看某用户的全局权限
select * from user ;
查看某用户的某库的权限
select * from db;
查看某用户的某个表的权限
select * from tables_priv;
通过远程工具进行访问
1、先 ping 一下数据库服务器的ip 地址确认网络畅通。2、关闭数据库服务的防火墙
service iptables stop
3、 确认Mysql中已经有可以通过远程登录的账户
select * from mysql.user where user='li4' and host='%';
如果没有用户,先执行如下命令:
grant all privileges on *.* to [email protected]'%' identified by '123123';
4、测试连接
大小写的问题
SHOW VARIABLES LIKE '%lower_case_table_names%' ;
windows系统默认大小写不敏感,但是linux系统是大小写敏感的
默认为0,大小写敏感。
设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和DB进行查找。
设置2,创建的表和DB依据语句上格式存放,凡是查找都是转换为小写进行
当想设置为大小写不敏感时,要在my.cnf这个配置文件 [mysqld] 中加入 lower_case_table_names=1 ,然后重启服务器。
但是要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。
在进行数据库参数设置之前,需要掌握这个参数带来的影响,切不可盲目设置。
MySQL的sql_mode合理设置
show variables like 'sql_mode';sql_mode常用值如下:
set sql_mode='ONLY_FULL_GROUP_BY';ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT:
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
ORACLE:
设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.